ARM GAS /tmp/ccQxFjE3.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, 6 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 .bss.__sbrk_heap_end,"aw",%nobits 21 .align 2 24 __sbrk_heap_end: 25 0000 00000000 .space 4 26 .section .text._sbrk,"ax",%progbits 27 .align 1 28 .global _sbrk 29 .syntax unified 30 .thumb 31 .thumb_func 33 _sbrk: 34 .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 **** ARM GAS /tmp/ccQxFjE3.s page 2 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 **** */ 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 **** { 35 .loc 1 54 1 36 .cfi_startproc 37 @ args = 0, pretend = 0, frame = 24 38 @ frame_needed = 1, uses_anonymous_args = 0 39 0000 80B5 push {r7, lr} 40 .cfi_def_cfa_offset 8 41 .cfi_offset 7, -8 42 .cfi_offset 14, -4 43 0002 86B0 sub sp, sp, #24 44 .cfi_def_cfa_offset 32 45 0004 00AF add r7, sp, #0 46 .cfi_def_cfa_register 7 47 0006 7860 str r0, [r7, #4] 55:Core/Src/sysmem.c **** extern uint8_t _end; /* Symbol defined in the linker script */ 56:Core/Src/sysmem.c **** extern uint8_t _estack; /* Symbol defined in the linker script */ 57:Core/Src/sysmem.c **** extern uint32_t _Min_Stack_Size; /* Symbol defined in the linker script */ 58:Core/Src/sysmem.c **** const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size; 48 .loc 1 58 32 49 0008 144A ldr r2, .L5 50 .loc 1 58 53 51 000a 154B ldr r3, .L5+4 52 .loc 1 58 18 53 000c D31A subs r3, r2, r3 54 000e 7B61 str r3, [r7, #20] 59:Core/Src/sysmem.c **** const uint8_t *max_heap = (uint8_t *)stack_limit; 55 .loc 1 59 18 56 0010 7B69 ldr r3, [r7, #20] 57 0012 3B61 str r3, [r7, #16] 60:Core/Src/sysmem.c **** uint8_t *prev_heap_end; ARM GAS /tmp/ccQxFjE3.s page 3 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) 58 .loc 1 63 12 59 0014 134B ldr r3, .L5+8 60 0016 1B68 ldr r3, [r3] 61 .loc 1 63 6 62 0018 002B cmp r3, #0 63 001a 02D1 bne .L2 64:Core/Src/sysmem.c **** { 65:Core/Src/sysmem.c **** __sbrk_heap_end = &_end; 64 .loc 1 65 21 65 001c 114B ldr r3, .L5+8 66 001e 124A ldr r2, .L5+12 67 0020 1A60 str r2, [r3] 68 .L2: 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) 69 .loc 1 69 23 70 0022 104B ldr r3, .L5+8 71 0024 1A68 ldr r2, [r3] 72 0026 7B68 ldr r3, [r7, #4] 73 0028 1344 add r3, r3, r2 74 .loc 1 69 6 75 002a 3A69 ldr r2, [r7, #16] 76 002c 9A42 cmp r2, r3 77 002e 07D2 bcs .L3 70:Core/Src/sysmem.c **** { 71:Core/Src/sysmem.c **** errno = ENOMEM; 78 .loc 1 71 5 79 0030 FFF7FEFF bl __errno 80 0034 0346 mov r3, r0 81 .loc 1 71 11 discriminator 1 82 0036 0C22 movs r2, #12 83 0038 1A60 str r2, [r3] 72:Core/Src/sysmem.c **** return (void *)-1; 84 .loc 1 72 12 85 003a 4FF0FF33 mov r3, #-1 86 003e 09E0 b .L4 87 .L3: 73:Core/Src/sysmem.c **** } 74:Core/Src/sysmem.c **** 75:Core/Src/sysmem.c **** prev_heap_end = __sbrk_heap_end; 88 .loc 1 75 17 89 0040 084B ldr r3, .L5+8 90 0042 1B68 ldr r3, [r3] 91 0044 FB60 str r3, [r7, #12] 76:Core/Src/sysmem.c **** __sbrk_heap_end += incr; 92 .loc 1 76 19 93 0046 074B ldr r3, .L5+8 94 0048 1A68 ldr r2, [r3] 95 004a 7B68 ldr r3, [r7, #4] 96 004c 1344 add r3, r3, r2 97 004e 054A ldr r2, .L5+8 98 0050 1360 str r3, [r2] ARM GAS /tmp/ccQxFjE3.s page 4 77:Core/Src/sysmem.c **** 78:Core/Src/sysmem.c **** return (void *)prev_heap_end; 99 .loc 1 78 10 100 0052 FB68 ldr r3, [r7, #12] 101 .L4: 79:Core/Src/sysmem.c **** } 102 .loc 1 79 1 103 0054 1846 mov r0, r3 104 0056 1837 adds r7, r7, #24 105 .cfi_def_cfa_offset 8 106 0058 BD46 mov sp, r7 107 .cfi_def_cfa_register 13 108 @ sp needed 109 005a 80BD pop {r7, pc} 110 .L6: 111 .align 2 112 .L5: 113 005c 00000000 .word _estack 114 0060 00000000 .word _Min_Stack_Size 115 0064 00000000 .word __sbrk_heap_end 116 0068 00000000 .word _end 117 .cfi_endproc 118 .LFE0: 120 .text 121 .Letext0: 122 .file 2 "/nix/store/p8vkamc9b2vlibs9aw76vnasdbifhcbm-gcc-arm-embedded-13.2.rel1/lib/gcc/arm-none-e 123 .file 3 "/nix/store/p8vkamc9b2vlibs9aw76vnasdbifhcbm-gcc-arm-embedded-13.2.rel1/arm-none-eabi/incl 124 .file 4 "/nix/store/p8vkamc9b2vlibs9aw76vnasdbifhcbm-gcc-arm-embedded-13.2.rel1/arm-none-eabi/incl 125 .file 5 "/nix/store/p8vkamc9b2vlibs9aw76vnasdbifhcbm-gcc-arm-embedded-13.2.rel1/arm-none-eabi/incl ARM GAS /tmp/ccQxFjE3.s page 5 DEFINED SYMBOLS *ABS*:00000000 sysmem.c /tmp/ccQxFjE3.s:21 .bss.__sbrk_heap_end:00000000 $d /tmp/ccQxFjE3.s:24 .bss.__sbrk_heap_end:00000000 __sbrk_heap_end /tmp/ccQxFjE3.s:27 .text._sbrk:00000000 $t /tmp/ccQxFjE3.s:33 .text._sbrk:00000000 _sbrk /tmp/ccQxFjE3.s:113 .text._sbrk:0000005c $d UNDEFINED SYMBOLS __errno _estack _Min_Stack_Size _end