From 2002-03-05 Scott Pakin <pakin@uiuc.edu>

* mmap-sup.c (MAP_PRIVATE_OR_SHARED): Define.
(__mmalloc_mmap_morecore): Use.
(__mmalloc_remap_core): Use.
This commit is contained in:
Andrew Cagney 2002-04-07 17:58:57 +00:00
parent c657a1f082
commit aeec20bafb
2 changed files with 23 additions and 6 deletions

View file

@ -1,3 +1,10 @@
2002-04-07 Andrew Cagney <ac131313@redhat.com>
From 2002-03-05 Scott Pakin <pakin@uiuc.edu>
* mmap-sup.c (MAP_PRIVATE_OR_SHARED): Define.
(__mmalloc_mmap_morecore): Use.
(__mmalloc_remap_core): Use.
2000-05-17 Eli Zaretskii <eliz@is.elta.co.il> 2000-05-17 Eli Zaretskii <eliz@is.elta.co.il>
* Makefile.in (install-info): Make sure $(infodir) exists. Run * Makefile.in (install-info): Make sure $(infodir) exists. Run

View file

@ -48,6 +48,15 @@ extern int getpagesize PARAMS ((void));
#define PAGE_ALIGN(addr) (caddr_t) (((long)(addr) + pagesize - 1) & \ #define PAGE_ALIGN(addr) (caddr_t) (((long)(addr) + pagesize - 1) & \
~(pagesize - 1)) ~(pagesize - 1))
/* Return MAP_PRIVATE if MDP represents /dev/zero. Otherwise, return
MAP_SHARED. */
#define MAP_PRIVATE_OR_SHARED(MDP) ((MDP -> flags & MMALLOC_DEVZERO) \
? MAP_PRIVATE \
: MAP_SHARED)
/* Get core for the memory region specified by MDP, using SIZE as the /* Get core for the memory region specified by MDP, using SIZE as the
amount to either add to or subtract from the existing region. Works amount to either add to or subtract from the existing region. Works
like sbrk(), but using mmap(). */ like sbrk(), but using mmap(). */
@ -113,7 +122,7 @@ __mmalloc_mmap_morecore (mdp, size)
{ {
/* Let mmap pick the map start address */ /* Let mmap pick the map start address */
mapto = mmap (0, mapbytes, PROT_READ | PROT_WRITE, mapto = mmap (0, mapbytes, PROT_READ | PROT_WRITE,
MAP_SHARED, mdp -> fd, foffset); MAP_PRIVATE_OR_SHARED (mdp), mdp -> fd, foffset);
if (mapto != (caddr_t) -1) if (mapto != (caddr_t) -1)
{ {
mdp -> base = mdp -> breakval = mapto; mdp -> base = mdp -> breakval = mapto;
@ -125,7 +134,8 @@ __mmalloc_mmap_morecore (mdp, size)
else else
{ {
mapto = mmap (mdp -> top, mapbytes, PROT_READ | PROT_WRITE, mapto = mmap (mdp -> top, mapbytes, PROT_READ | PROT_WRITE,
MAP_SHARED | MAP_FIXED, mdp -> fd, foffset); MAP_PRIVATE_OR_SHARED (mdp) | MAP_FIXED, mdp -> fd,
foffset);
if (mapto == mdp -> top) if (mapto == mdp -> top)
{ {
mdp -> top = moveto; mdp -> top = moveto;
@ -152,7 +162,7 @@ __mmalloc_remap_core (mdp)
/* FIXME: Quick hack, needs error checking and other attention. */ /* FIXME: Quick hack, needs error checking and other attention. */
base = mmap (mdp -> base, mdp -> top - mdp -> base, base = mmap (mdp -> base, mdp -> top - mdp -> base,
PROT_READ | PROT_WRITE, MAP_SHARED | MAP_FIXED, PROT_READ | PROT_WRITE, MAP_PRIVATE_OR_SHARED (mdp) | MAP_FIXED,
mdp -> fd, 0); mdp -> fd, 0);
return ((PTR) base); return ((PTR) base);
} }
@ -166,13 +176,13 @@ mmalloc_findbase (size)
caddr_t base = NULL; caddr_t base = NULL;
#ifdef MAP_ANONYMOUS #ifdef MAP_ANONYMOUS
flags = MAP_SHARED | MAP_ANONYMOUS; flags = MAP_PRIVATE | MAP_ANONYMOUS;
fd = -1; fd = -1;
#else #else
#ifdef MAP_FILE #ifdef MAP_FILE
flags = MAP_SHARED | MAP_FILE; flags = MAP_PRIVATE | MAP_FILE;
#else #else
flags = MAP_SHARED; flags = MAP_PRIVATE;
#endif #endif
fd = open ("/dev/zero", O_RDWR); fd = open ("/dev/zero", O_RDWR);
if (fd != -1) if (fd != -1)