Welcome to mirror list, hosted at ThFree Co, Russian Federation.

sbrk.c « mmixware « sys « libc « newlib - cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 5eb9d77cf1baf9a471c10ac4f022c2822b766a5d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/* sbrk for MMIXware.

   Copyright (C) 2001 Hans-Peter Nilsson.
   Permission to use, copy, modify, and distribute this software is freely
   granted, provided that this notice is preserved with no changes.
   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.  */

#include <_ansi.h>
#include <sys/types.h>
#include <sys/stat.h>
#include "sys/syscall.h"

extern char *_Sbrk_high;

/* When the program is loaded, the first location in Pool_Segment holds
   the first available octabyte in the memory pool (a.k.a. the heap);
   somewhere after the command-line parameters.  We don't have to
   initialize that location, we can just use it straight up as a pointer;
   just point the symbol there.

   This file will be compiled with -no-builtin-syms, so we need to define
   Pool_Segment and any other symbols that would be predefined in mmixal.  */

__asm__ (" .global _Sbrk_high\n"
	 "_Sbrk_high	IS	Pool_Segment\n"
	 "Pool_Segment	IS	0x40<<56");

caddr_t
_sbrk (size_t incr)
{
  extern char end;		/* Defined by the linker */
  char *prev_heap_end;

  prev_heap_end = _Sbrk_high;
  _Sbrk_high += incr;
  return (caddr_t) prev_heap_end;
}