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 <errno.h>
  25:Core/Src/sysmem.c **** #include <stdint.h>
  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