1 /******************************************************************************
2  *
3  * Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by
4  * Analog Devices, Inc.),
5  * Copyright (C) 2023-2024 Analog Devices, Inc.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *     http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  ******************************************************************************/
20 
21 /* **** Includes **** */
22 #include <stdint.h>
23 #include <errno.h>
24 #include <unistd.h>
25 
26 /**
27  * @brief  sbrk
28  * @detail Increase program data space
29  * @detail Malloc and related functions depend on this
30  */
31 
32 /* **** declarations **** */
33 static char *heap_end = 0;
34 extern unsigned int __HeapBase;
35 extern unsigned int __HeapLimit;
36 
37 /* **** functions **** */
_sbrk(int incr)38 caddr_t _sbrk(int incr)
39 {
40     char *prev_heap_end;
41 
42     if (heap_end == 0) {
43         heap_end = (caddr_t)&__HeapBase;
44     }
45     prev_heap_end = heap_end;
46 
47     if ((unsigned int)(heap_end + incr) > (unsigned int)&__HeapLimit) {
48         errno = ENOMEM;
49         return (caddr_t)-1;
50     }
51 
52     heap_end += incr;
53 
54     return (caddr_t)prev_heap_end;
55 }
56