ARM GAS /tmp/ccQHo1tW.s page 1 1 .cpu cortex-m4 2 .arch armv7e-m 3 .fpu fpv4-sp-d16 4 .eabi_attribute 27, 1 5 .eabi_attribute 28, 1 6 .eabi_attribute 20, 1 7 .eabi_attribute 21, 1 8 .eabi_attribute 23, 3 9 .eabi_attribute 24, 1 10 .eabi_attribute 25, 1 11 .eabi_attribute 26, 1 12 .eabi_attribute 30, 1 13 .eabi_attribute 34, 1 14 .eabi_attribute 18, 4 15 .file "sysmem.c" 16 .text 17 .Ltext0: 18 .cfi_sections .debug_frame 19 .file 1 "Core/Src/sysmem.c" 20 .section .text._sbrk,"ax",%progbits 21 .align 1 22 .global _sbrk 23 .syntax unified 24 .thumb 25 .thumb_func 27 _sbrk: 28 .LVL0: 29 .LFB0: 1:Core/Src/sysmem.c **** /** 2:Core/Src/sysmem.c **** ****************************************************************************** 3:Core/Src/sysmem.c **** * @file sysmem.c 4:Core/Src/sysmem.c **** * @author Generated by STM32CubeMX 5:Core/Src/sysmem.c **** * @brief System Memory calls file 6:Core/Src/sysmem.c **** * 7:Core/Src/sysmem.c **** * For more information about which C functions 8:Core/Src/sysmem.c **** * need which of these lowlevel functions 9:Core/Src/sysmem.c **** * please consult the newlib libc manual 10:Core/Src/sysmem.c **** ****************************************************************************** 11:Core/Src/sysmem.c **** * @attention 12:Core/Src/sysmem.c **** * 13:Core/Src/sysmem.c **** * Copyright (c) 2024 STMicroelectronics. 14:Core/Src/sysmem.c **** * All rights reserved. 15:Core/Src/sysmem.c **** * 16:Core/Src/sysmem.c **** * This software is licensed under terms that can be found in the LICENSE file 17:Core/Src/sysmem.c **** * in the root directory of this software component. 18:Core/Src/sysmem.c **** * If no LICENSE file comes with this software, it is provided AS-IS. 19:Core/Src/sysmem.c **** * 20:Core/Src/sysmem.c **** ****************************************************************************** 21:Core/Src/sysmem.c **** */ 22:Core/Src/sysmem.c **** 23:Core/Src/sysmem.c **** /* Includes */ 24:Core/Src/sysmem.c **** #include 25:Core/Src/sysmem.c **** #include 26:Core/Src/sysmem.c **** 27:Core/Src/sysmem.c **** /** 28:Core/Src/sysmem.c **** * Pointer to the current high watermark of the heap usage 29:Core/Src/sysmem.c **** */ ARM GAS /tmp/ccQHo1tW.s page 2 30:Core/Src/sysmem.c **** static uint8_t *__sbrk_heap_end = NULL; 31:Core/Src/sysmem.c **** 32:Core/Src/sysmem.c **** /** 33:Core/Src/sysmem.c **** * @brief _sbrk() allocates memory to the newlib heap and is used by malloc 34:Core/Src/sysmem.c **** * and others from the C library 35:Core/Src/sysmem.c **** * 36:Core/Src/sysmem.c **** * @verbatim 37:Core/Src/sysmem.c **** * ############################################################################ 38:Core/Src/sysmem.c **** * # .data # .bss # newlib heap # MSP stack # 39:Core/Src/sysmem.c **** * # # # # Reserved by _Min_Stack_Size # 40:Core/Src/sysmem.c **** * ############################################################################ 41:Core/Src/sysmem.c **** * ^-- RAM start ^-- _end _estack, RAM end --^ 42:Core/Src/sysmem.c **** * @endverbatim 43:Core/Src/sysmem.c **** * 44:Core/Src/sysmem.c **** * This implementation starts allocating at the '_end' linker symbol 45:Core/Src/sysmem.c **** * The '_Min_Stack_Size' linker symbol reserves a memory for the MSP stack 46:Core/Src/sysmem.c **** * The implementation considers '_estack' linker symbol to be RAM end 47:Core/Src/sysmem.c **** * NOTE: If the MSP stack, at any point during execution, grows larger than the 48:Core/Src/sysmem.c **** * reserved size, please increase the '_Min_Stack_Size'. 49:Core/Src/sysmem.c **** * 50:Core/Src/sysmem.c **** * @param incr Memory size 51:Core/Src/sysmem.c **** * @return Pointer to allocated memory 52:Core/Src/sysmem.c **** */ 53:Core/Src/sysmem.c **** void *_sbrk(ptrdiff_t incr) 54:Core/Src/sysmem.c **** { 30 .loc 1 54 1 view -0 31 .cfi_startproc 32 @ args = 0, pretend = 0, frame = 0 33 @ frame_needed = 0, uses_anonymous_args = 0 34 .loc 1 54 1 is_stmt 0 view .LVU1 35 0000 10B5 push {r4, lr} 36 .cfi_def_cfa_offset 8 37 .cfi_offset 4, -8 38 .cfi_offset 14, -4 39 0002 0346 mov r3, r0 55:Core/Src/sysmem.c **** extern uint8_t _end; /* Symbol defined in the linker script */ 40 .loc 1 55 3 is_stmt 1 view .LVU2 56:Core/Src/sysmem.c **** extern uint8_t _estack; /* Symbol defined in the linker script */ 41 .loc 1 56 3 view .LVU3 57:Core/Src/sysmem.c **** extern uint32_t _Min_Stack_Size; /* Symbol defined in the linker script */ 42 .loc 1 57 3 view .LVU4 58:Core/Src/sysmem.c **** const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size; 43 .loc 1 58 3 view .LVU5 44 .LVL1: 59:Core/Src/sysmem.c **** const uint8_t *max_heap = (uint8_t *)stack_limit; 45 .loc 1 59 3 view .LVU6 58:Core/Src/sysmem.c **** const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size; 46 .loc 1 58 51 is_stmt 0 view .LVU7 47 0004 0C4A ldr r2, .L8 48 0006 0D49 ldr r1, .L8+4 49 .LVL2: 60:Core/Src/sysmem.c **** uint8_t *prev_heap_end; 50 .loc 1 60 3 is_stmt 1 view .LVU8 61:Core/Src/sysmem.c **** 62:Core/Src/sysmem.c **** /* Initialize heap end at first call */ 63:Core/Src/sysmem.c **** if (NULL == __sbrk_heap_end) 51 .loc 1 63 3 view .LVU9 ARM GAS /tmp/ccQHo1tW.s page 3 52 .loc 1 63 12 is_stmt 0 view .LVU10 53 0008 0D48 ldr r0, .L8+8 54 .LVL3: 55 .loc 1 63 12 view .LVU11 56 000a 0068 ldr r0, [r0] 57 .loc 1 63 6 view .LVU12 58 000c 40B1 cbz r0, .L6 59 .L2: 64:Core/Src/sysmem.c **** { 65:Core/Src/sysmem.c **** __sbrk_heap_end = &_end; 66:Core/Src/sysmem.c **** } 67:Core/Src/sysmem.c **** 68:Core/Src/sysmem.c **** /* Protect heap from growing into the reserved MSP stack */ 69:Core/Src/sysmem.c **** if (__sbrk_heap_end + incr > max_heap) 60 .loc 1 69 3 is_stmt 1 view .LVU13 61 .loc 1 69 23 is_stmt 0 view .LVU14 62 000e 0C48 ldr r0, .L8+8 63 0010 0068 ldr r0, [r0] 64 0012 0344 add r3, r3, r0 65 .LVL4: 66 .loc 1 69 6 view .LVU15 67 0014 521A subs r2, r2, r1 68 0016 9342 cmp r3, r2 69 0018 06D8 bhi .L7 70:Core/Src/sysmem.c **** { 71:Core/Src/sysmem.c **** errno = ENOMEM; 72:Core/Src/sysmem.c **** return (void *)-1; 73:Core/Src/sysmem.c **** } 74:Core/Src/sysmem.c **** 75:Core/Src/sysmem.c **** prev_heap_end = __sbrk_heap_end; 70 .loc 1 75 3 is_stmt 1 view .LVU16 71 .LVL5: 76:Core/Src/sysmem.c **** __sbrk_heap_end += incr; 72 .loc 1 76 3 view .LVU17 73 .loc 1 76 19 is_stmt 0 view .LVU18 74 001a 094A ldr r2, .L8+8 75 001c 1360 str r3, [r2] 77:Core/Src/sysmem.c **** 78:Core/Src/sysmem.c **** return (void *)prev_heap_end; 76 .loc 1 78 3 is_stmt 1 view .LVU19 77 .LVL6: 78 .L1: 79:Core/Src/sysmem.c **** } 79 .loc 1 79 1 is_stmt 0 view .LVU20 80 001e 10BD pop {r4, pc} 81 .LVL7: 82 .L6: 65:Core/Src/sysmem.c **** } 83 .loc 1 65 5 is_stmt 1 view .LVU21 65:Core/Src/sysmem.c **** } 84 .loc 1 65 21 is_stmt 0 view .LVU22 85 0020 0748 ldr r0, .L8+8 86 0022 084C ldr r4, .L8+12 87 0024 0460 str r4, [r0] 88 0026 F2E7 b .L2 89 .LVL8: 90 .L7: ARM GAS /tmp/ccQHo1tW.s page 4 71:Core/Src/sysmem.c **** return (void *)-1; 91 .loc 1 71 5 is_stmt 1 view .LVU23 92 0028 FFF7FEFF bl __errno 93 .LVL9: 71:Core/Src/sysmem.c **** return (void *)-1; 94 .loc 1 71 11 is_stmt 0 discriminator 1 view .LVU24 95 002c 0C23 movs r3, #12 96 002e 0360 str r3, [r0] 72:Core/Src/sysmem.c **** } 97 .loc 1 72 5 is_stmt 1 view .LVU25 72:Core/Src/sysmem.c **** } 98 .loc 1 72 12 is_stmt 0 view .LVU26 99 0030 4FF0FF30 mov r0, #-1 100 0034 F3E7 b .L1 101 .L9: 102 0036 00BF .align 2 103 .L8: 104 0038 00000000 .word _estack 105 003c 00000000 .word _Min_Stack_Size 106 0040 00000000 .word __sbrk_heap_end 107 0044 00000000 .word _end 108 .cfi_endproc 109 .LFE0: 111 .section .bss.__sbrk_heap_end,"aw",%nobits 112 .align 2 115 __sbrk_heap_end: 116 0000 00000000 .space 4 117 .text 118 .Letext0: 119 .file 2 "/home/chiangni/.config/Code/User/globalStorage/bmd.stm32-for-vscode/@xpack-dev-tools/arm- 120 .file 3 "/home/chiangni/.config/Code/User/globalStorage/bmd.stm32-for-vscode/@xpack-dev-tools/arm- 121 .file 4 "/home/chiangni/.config/Code/User/globalStorage/bmd.stm32-for-vscode/@xpack-dev-tools/arm- 122 .file 5 "/home/chiangni/.config/Code/User/globalStorage/bmd.stm32-for-vscode/@xpack-dev-tools/arm- ARM GAS /tmp/ccQHo1tW.s page 5 DEFINED SYMBOLS *ABS*:00000000 sysmem.c /tmp/ccQHo1tW.s:21 .text._sbrk:00000000 $t /tmp/ccQHo1tW.s:27 .text._sbrk:00000000 _sbrk /tmp/ccQHo1tW.s:104 .text._sbrk:00000038 $d /tmp/ccQHo1tW.s:115 .bss.__sbrk_heap_end:00000000 __sbrk_heap_end /tmp/ccQHo1tW.s:112 .bss.__sbrk_heap_end:00000000 $d UNDEFINED SYMBOLS __errno _estack _Min_Stack_Size _end