recording file death
This commit is contained in:
parent
43bbd567f2
commit
017349fbcf
12 changed files with 0 additions and 3151 deletions
|
@ -1,46 +0,0 @@
|
|||
# This file was generated automatically by configure. Do not edit.
|
||||
VPATH = .
|
||||
links =
|
||||
host_alias = sparc-sun-solaris
|
||||
host_cpu = sparc
|
||||
host_vendor = sun
|
||||
host_os = solaris
|
||||
target_alias = sparc-sun-solaris
|
||||
target_cpu = sparc
|
||||
target_vendor = sun
|
||||
target_os = solaris
|
||||
target_makefile_frag = ./config/mt-sparc
|
||||
ALL=all.internal
|
||||
# @(#)Makefile 5.17 (Berkeley) 5/11/90
|
||||
|
||||
#### host and target dependent Makefile fragments come in here.
|
||||
MACHINE=sparc
|
||||
###
|
||||
|
||||
PROG= gprof
|
||||
SRCS= gprof.c arcs.c dfn.c lookup.c ${MACHINE}.c hertz.c \
|
||||
printgprof.c printlist.c
|
||||
LIBS = ../bfd/libbfd.a ../libiberty/libiberty.a
|
||||
|
||||
OBJS= gprof.o arcs.o dfn.o lookup.o ${MACHINE}.o hertz.o \
|
||||
printgprof.o printlist.o
|
||||
|
||||
CFLAGS= -I. -I../include -DMACHINE_H=\"${MACHINE}.h\" ${TCFLAGS} ${HCFLAGS}
|
||||
.c.o:
|
||||
$(CC) -c $(CFLAGS) $<
|
||||
|
||||
all: ${PROG}
|
||||
|
||||
.PHONY: check
|
||||
check:
|
||||
|
||||
beforeinstall:
|
||||
install -c -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \
|
||||
${.CURDIR}/gprof.flat ${.CURDIR}/gprof.callg \
|
||||
${DESTDIR}/usr/share/misc
|
||||
|
||||
$(PROG): $(OBJS)
|
||||
$(CC) $(CFLAGS) $(OBJS) -o $(PROG) $(LIBS)
|
||||
|
||||
clean:
|
||||
-rm -f $(OBJS) core gprof nohup.out
|
219
gprof/blurbs.c
219
gprof/blurbs.c
|
@ -1,219 +0,0 @@
|
|||
#include <stdio.h>
|
||||
#include "gprof.h"
|
||||
|
||||
void
|
||||
flat_blurb (file)
|
||||
FILE *file;
|
||||
{
|
||||
fputs("\n\
|
||||
% the percentage of the total running time of the\n\
|
||||
time program used by this function.\n\
|
||||
\n\
|
||||
cumulative a running sum of the number of seconds accounted\n\
|
||||
seconds for by this function and those listed above it.\n\
|
||||
\n\
|
||||
self the number of seconds accounted for by this\n\
|
||||
seconds function alone. This is the major sort for this\n\
|
||||
listing.\n\
|
||||
\n\
|
||||
calls the number of times this function was invoked, if\n\
|
||||
this function is profiled, else blank.\n\
|
||||
\n\
|
||||
self the average number of milliseconds spent in this\n\
|
||||
ms/call function per call, if this function is profiled,\n\
|
||||
else blank.\n\
|
||||
\n\
|
||||
total the average number of milliseconds spent in this\n\
|
||||
ms/call function and its descendents per call, if this \n\
|
||||
function is profiled, else blank.\n\
|
||||
\n\
|
||||
name the name of the function. This is the minor sort\n\
|
||||
for this listing. The index shows the location of\n\
|
||||
the function in the gprof listing. If the index is\n\
|
||||
in parenthesis it shows where it would appear in\n\
|
||||
the gprof listing if it were to be printed.\n\
|
||||
\n", file);
|
||||
}
|
||||
|
||||
static char *callg_blurb_bsd = "\n\
|
||||
\n\
|
||||
\n\
|
||||
call graph profile:\n\
|
||||
The sum of self and descendents is the major sort\n\
|
||||
for this listing.\n\
|
||||
\n\
|
||||
function entries:\n\
|
||||
\n\
|
||||
index the index of the function in the call graph\n\
|
||||
listing, as an aid to locating it (see below).\n\
|
||||
\n\
|
||||
%time the percentage of the total time of the program\n\
|
||||
accounted for by this function and its\n\
|
||||
descendents.\n\
|
||||
\n\
|
||||
self the number of seconds spent in this function\n\
|
||||
itself.\n\
|
||||
\n\
|
||||
descendents\n\
|
||||
the number of seconds spent in the descendents of\n\
|
||||
this function on behalf of this function.\n\
|
||||
\n\
|
||||
called the number of times this function is called (other\n\
|
||||
than recursive calls).\n\
|
||||
\n\
|
||||
self the number of times this function calls itself\n\
|
||||
recursively.\n\
|
||||
\n\
|
||||
name the name of the function, with an indication of\n\
|
||||
its membership in a cycle, if any.\n\
|
||||
\n\
|
||||
index the index of the function in the call graph\n\
|
||||
listing, as an aid to locating it.\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
parent listings:\n\
|
||||
\n\
|
||||
self* the number of seconds of this function's self time\n\
|
||||
which is due to calls from this parent.\n\
|
||||
\n\
|
||||
descendents*\n\
|
||||
the number of seconds of this function's\n\
|
||||
descendent time which is due to calls from this\n\
|
||||
parent.\n\
|
||||
\n\
|
||||
called** the number of times this function is called by\n\
|
||||
this parent. This is the numerator of the\n\
|
||||
fraction which divides up the function's time to\n\
|
||||
its parents.\n\
|
||||
\n\
|
||||
total* the number of times this function was called by\n\
|
||||
all of its parents. This is the denominator of\n\
|
||||
the propagation fraction.\n\
|
||||
\n\
|
||||
parents the name of this parent, with an indication of the\n\
|
||||
parent's membership in a cycle, if any.\n\
|
||||
\n\
|
||||
index the index of this parent in the call graph\n\
|
||||
listing, as an aid in locating it.\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
children listings:\n\
|
||||
\n\
|
||||
self* the number of seconds of this child's self time\n\
|
||||
which is due to being called by this function.\n\
|
||||
\n\
|
||||
descendent*\n\
|
||||
the number of seconds of this child's descendent's\n\
|
||||
time which is due to being called by this\n\
|
||||
function.\n\
|
||||
\n\
|
||||
called** the number of times this child is called by this\n\
|
||||
function. This is the numerator of the\n\
|
||||
propagation fraction for this child.\n\
|
||||
\n\
|
||||
total* the number of times this child is called by all\n\
|
||||
functions. This is the denominator of the\n\
|
||||
propagation fraction.\n\
|
||||
\n\
|
||||
children the name of this child, and an indication of its\n\
|
||||
membership in a cycle, if any.\n\
|
||||
\n\
|
||||
index the index of this child in the call graph listing,\n\
|
||||
as an aid to locating it.\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
* these fields are omitted for parents (or\n\
|
||||
children) in the same cycle as the function. If\n\
|
||||
the function (or child) is a member of a cycle,\n\
|
||||
the propagated times and propagation denominator\n\
|
||||
represent the self time and descendent time of the\n\
|
||||
cycle as a whole.\n\
|
||||
\n\
|
||||
** static-only parents and children are indicated\n\
|
||||
by a call count of 0.\n\
|
||||
\n\
|
||||
\n\
|
||||
\n\
|
||||
cycle listings:\n\
|
||||
the cycle as a whole is listed with the same\n\
|
||||
fields as a function entry. Below it are listed\n\
|
||||
the members of the cycle, and their contributions\n\
|
||||
to the time and call counts of the cycle.\n\
|
||||
\n";
|
||||
|
||||
static char *callg_blurb_fsf = "\n\
|
||||
This table describes the call tree of the program, and was sorted by\n\
|
||||
the total amount of time spent in each function and its children.\n\n\
|
||||
Each entry in this table consists of several lines. The line with the\n\
|
||||
index number at the left hand margin lists the current function.\n\
|
||||
The lines above it list the functions that called this function,\n\
|
||||
and the lines below it list the functions this one called.\n\
|
||||
This line lists:\n\
|
||||
index A unique number given to each element of the table.\n\
|
||||
Index numbers are sorted numerically.\n\
|
||||
The index number is printed next to every function name so\n\
|
||||
it is easier to look up where the function in the table.\n\n\
|
||||
% time This is the percentage of the `total' time that was spent\n\
|
||||
in this function and its children. Note that due to\n\
|
||||
different viewpoints, functions excluded by options, etc,\n\
|
||||
these numbers will NOT add up to 100%.\n\n\
|
||||
self This is the total amount of time spent in this function.\n\n\
|
||||
children This is the total amount of time propagated into this\n\
|
||||
function by its children.\n\n\
|
||||
called This is the number of times the function was called.\n\
|
||||
If the function called itself recursively, the number\n\
|
||||
only includes non-recursive calls, and is followed by\n\
|
||||
a `+' and the number of recursive calls.\n\n\
|
||||
name The name of the current function. The index number is\n\
|
||||
printed after it. If the function is a member of a\n\
|
||||
cycle, the cycle number is printed between the\n\
|
||||
function's name and the index number.\n\n\n\
|
||||
For the function's parents, the fields have the following meanings:\n\n\
|
||||
self This is the amount of time that was propagated directly\n\
|
||||
from the function into this parent.\n\n\
|
||||
children This is the amount of time that was propagated from\n\
|
||||
the function's children into this parent.\n\n\
|
||||
called This is the number of times this parent called the\n\
|
||||
function `/' the total number of times the function\n\
|
||||
was called. Recursive calls to the function are not\n\
|
||||
included in the number after the `/'.\n\n\
|
||||
name This is the name of the parent. The parent's index\n\
|
||||
number is printed after it. If the parent is a\n\
|
||||
member of a cycle, the cycle number is printed between\n\
|
||||
the name and the index number.\n\n\
|
||||
If the parents of the function cannot be determined, the word\n\
|
||||
`<spontaneous>' is printed in the `name' field, and all the other\n\
|
||||
fields are blank.\n\n\
|
||||
For the function's children, the fields have the following meanings:\n\n\
|
||||
self This is the amount of time that was propagated directly\n\
|
||||
from the child into the function.\n\n\
|
||||
children This is the amount of time that was propagated from the\n\
|
||||
child's children to the function.\n\n\
|
||||
called This is the number of times the function called\n\
|
||||
this child `/' the total number of times the child\n\
|
||||
was called. Recursive calls by the child are not\n\
|
||||
listed in the number after the `/'.\n\n\
|
||||
name This is the name of the child. The child's index\n\
|
||||
number is printed after it. If the child is a\n\
|
||||
member of a cycle, the cycle number is printed\n\
|
||||
between the name and the index number.\n\n\
|
||||
If there are any cycles (circles) in the call graph, there is an\n\
|
||||
entry for the cycle-as-a-whole. This entry shows who called the\n\
|
||||
cycle (as parents) and the members of the cycle (as children.)\n\
|
||||
The `+' recursive calls entry shows the number of function calls that\n\
|
||||
were internal to the cycle, and the calls entry for each member shows,\n\
|
||||
for that member, how many times it was called from other members of\n\
|
||||
the cycle.\n\n";
|
||||
|
||||
void
|
||||
callg_blurb (file)
|
||||
FILE *file;
|
||||
{
|
||||
if (bsd_style_output)
|
||||
fputs(callg_blurb_bsd, file);
|
||||
else
|
||||
fputs(callg_blurb_fsf, file);
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
MACHINE=i386
|
|
@ -1 +0,0 @@
|
|||
MACHINE=sparc
|
678
gprof/configure
vendored
678
gprof/configure
vendored
|
@ -1,678 +0,0 @@
|
|||
#!/bin/sh
|
||||
# Please do not edit this file. It is generated automatically from
|
||||
# configure.in and a configure template.
|
||||
configdirs=
|
||||
|
||||
# the debugger.
|
||||
#set -x
|
||||
|
||||
#!/bin/sh
|
||||
|
||||
# Configuration script template
|
||||
# Copyright (C) 1988, 1990, 1991 Free Software Foundation, Inc.
|
||||
|
||||
#This file is part of GNU.
|
||||
|
||||
#GNU CC is free software; you can redistribute it and/or modify
|
||||
#it under the terms of the GNU General Public License as published by
|
||||
#the Free Software Foundation; either version 1, or (at your option)
|
||||
#any later version.
|
||||
|
||||
#GNU CC is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
#GNU General Public License for more details.
|
||||
|
||||
#You should have received a copy of the GNU General Public License
|
||||
#along with GNU CC; see the file COPYING. If not, write to
|
||||
#the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
# $Id$
|
||||
|
||||
#
|
||||
# Shell script to create proper links to machine-dependent files in
|
||||
# preparation for compilation.
|
||||
#
|
||||
# If configure succeeds, it leaves its status in config.status.
|
||||
# If configure fails after disturbing the status quo,
|
||||
# config.status is removed.
|
||||
#
|
||||
|
||||
remove=rm
|
||||
hard_link=ln
|
||||
symbolic_link='ln -s'
|
||||
|
||||
#for Test
|
||||
#remove="echo rm"
|
||||
#hard_link="echo ln"
|
||||
#symbolic_link="echo ln -s"
|
||||
|
||||
progname=$0
|
||||
|
||||
# clear some things potentially inherited from environment.
|
||||
|
||||
ansi=
|
||||
clib=
|
||||
defaulttargets=
|
||||
destdir=
|
||||
fatal=
|
||||
hostsubdir=
|
||||
norecurse=
|
||||
removing=
|
||||
srcdir=
|
||||
srctrigger=
|
||||
target=
|
||||
targets=
|
||||
targetsubdir=
|
||||
template=
|
||||
verbose=
|
||||
|
||||
for arg in $*;
|
||||
do
|
||||
case ${arg} in
|
||||
-ansi | +ansi)
|
||||
ansi=true
|
||||
;;
|
||||
-clib | +c*)
|
||||
clib=clib
|
||||
;;
|
||||
-destdir=* | +destdir=* | +destdi=* | +destd=* | +dest=* | +des=* | +de=* | +d=*)
|
||||
destdir=`echo ${arg} | sed 's/[+-]d[a-z]*=//'`
|
||||
;;
|
||||
-forcesubdirs | +forcesubdirs | +forcesubdir | +forcesubdi | +forcesubd \
|
||||
| +forcesub | +forcesu | +forces | +force | +forc | +for | +fo | +f)
|
||||
forcesubdirs=${arg}
|
||||
;;
|
||||
-languages=* | +languages=* | +language=* | +languag=* \
|
||||
| +langua=* | +langu=* | +lang=* | +lan=* | +la=* \
|
||||
| +l=*)
|
||||
languages="${languages} `echo ${arg} | sed 's/[+-]l[a-z]*=//'`"
|
||||
;;
|
||||
-gas | +gas | +ga | +g)
|
||||
gas=yes
|
||||
;;
|
||||
-help | +h | +help)
|
||||
fatal=true
|
||||
;;
|
||||
-nfp | +nfp | +nf | +n)
|
||||
nfp=yes
|
||||
;;
|
||||
-norecurse | +norecurse)
|
||||
norecurse=true
|
||||
;;
|
||||
-rm | +rm)
|
||||
removing=${arg}
|
||||
;;
|
||||
# -srcdir=* | +srcdir=* | +srcdi=* | +srcd=* | +src=* | +sr=* | +s=*)
|
||||
# srcdir=`echo ${arg} | sed 's/[+-]s[a-z]*=//'`
|
||||
# ;;
|
||||
-target=* | +target=* | +targe=* | +targ=* | +tar=* | +ta=* | +t=*)
|
||||
if [ -n "${targets}" ] ; then
|
||||
forcesubdirs="+forcesubdirs"
|
||||
fi
|
||||
|
||||
newtargets="${targets} `echo ${arg} | sed 's/[+-]t[a-z]*=//'`"
|
||||
targets="${newtargets}"
|
||||
;;
|
||||
-template=* | +template=*)
|
||||
template=`echo ${arg} | sed 's/[+-]template=//'`
|
||||
;;
|
||||
+verbose | +verbos | +verbo | +verb | +ver | +ve | +v)
|
||||
verbose=${arg}
|
||||
;;
|
||||
-* | +*)
|
||||
(echo ;
|
||||
echo "Unrecognized option: \"${arg}\"". ;
|
||||
echo) 1>&2
|
||||
fatal=true
|
||||
;;
|
||||
*)
|
||||
if [ -n "${hosts}" ] ; then
|
||||
forcesubdirs="+forcesubdirs"
|
||||
fi
|
||||
|
||||
newhosts="${hosts} ${arg}"
|
||||
hosts=${newhosts}
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ -n "${verbose}" ] ; then
|
||||
echo `pwd`/configure $*
|
||||
echo targets=\"${targets}\"
|
||||
fi
|
||||
|
||||
# process host and target only if not rebuilding configure itself or removing.
|
||||
if [ -z "${template}" -a -z "${removing}" -a -z "${fatal}" ] ; then
|
||||
# Complain if an arg is missing
|
||||
if [ -z "${hosts}" ] ; then
|
||||
(echo ;
|
||||
echo "configure: No HOST specified." ;
|
||||
echo) 2>&1
|
||||
fatal=true
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "${fatal}" -o "${hosts}" = "help" ] ; then
|
||||
(echo "Usage: configure HOST" ;
|
||||
echo ;
|
||||
echo "Options: [defaults in brackets]" ;
|
||||
echo " +ansi configure w/ANSI library. [no ansi lib]" ;
|
||||
echo " +destdir=MYDIR configure for installation into MYDIR. [/usr/local]" ;
|
||||
echo " +forcesubdirs configure in subdirectories. [in source directories]" ;
|
||||
echo " +lang=LANG configure to build LANG. [gcc]" ;
|
||||
echo " +help print this message. [normal config]" ;
|
||||
echo " +gas configure the compilers for use with gas. [native as]" ;
|
||||
echo " +nfp configure the compilers default to soft floating point. [hard float]" ;
|
||||
echo " +norecurse configure this directory only. [recurse]" ;
|
||||
echo " +rm remove this configuration. [build a configuration]" ;
|
||||
echo " +target=TARGET configure for TARGET. [TARGET = HOST]" ;
|
||||
echo " +template=TEM rebuild configure using TEM. [normal config]" ;
|
||||
echo ;
|
||||
echo "Where HOST and TARGET are something like \"vax\", \"sun3\", \"encore\", etc." ;
|
||||
echo "Asking for more than one \"+target\" implies \"+forcesubdirs\". Any other" ;
|
||||
echo "options given will apply to all targets.") 1>&2
|
||||
|
||||
if [ -r config.status ] ; then
|
||||
cat config.status
|
||||
fi
|
||||
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#### configure.in common parts come in here.
|
||||
# This file is a shell script that supplies the information necessary
|
||||
# to tailor a template configure script into the configure script
|
||||
# appropriate for this directory. For more information, check any
|
||||
# existing configure script.
|
||||
|
||||
srctrigger=gprof.c
|
||||
srcname="gprof"
|
||||
|
||||
## end of common part.
|
||||
|
||||
# are we rebuilding config itself?
|
||||
if [ -n "${template}" ] ; then
|
||||
if [ ! -r ${template} ] ; then
|
||||
echo "Can't find template ${template}."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# prep the template
|
||||
sed -e '/^#### configure.in common parts come in here.$/,/^## end of common part.$/c\
|
||||
#### configure.in common parts come in here.\
|
||||
## end of common part.' \
|
||||
-e '/^#### configure.in per-host parts come in here.$/,/^## end of per-host part.$/c\
|
||||
#### configure.in per-host parts come in here.\
|
||||
## end of per-host part.' \
|
||||
-e '/^#### configure.in per-target parts come in here.$/,/^## end of per-target part.$/c\
|
||||
#### configure.in per-target parts come in here.\
|
||||
## end of per-target part.' \
|
||||
< ${template} > template.new
|
||||
|
||||
if [ -r configure.in ] ; then
|
||||
if [ -z "`grep '^# per\-host:' configure.in`" ] ; then
|
||||
echo `pwd`/configure.in has no "per-host:" line.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "`grep '^# per\-target:' configure.in`" ] ; then
|
||||
echo `pwd`/configure.in has no "per-target:" line.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# split configure.in into common, per-host, and per-target parts
|
||||
sed -e '/^# per\-host:/,$d' configure.in > configure.com
|
||||
sed -e '1,/^# per\-host:/d' -e '/^# per\-target:/,$d' configure.in > configure.hst
|
||||
sed -e '1,/^# per\-target:/d' configure.in > configure.tgt
|
||||
|
||||
# and insert them
|
||||
sed -e '/^#### configure.in common parts come in here.$/ r configure.com' \
|
||||
-e '/^#### configure.in per\-host parts come in here.$/ r configure.hst' \
|
||||
-e '/^#### configure.in per\-target parts come in here.$/ r configure.tgt' \
|
||||
template.new > configure.new
|
||||
|
||||
rm -f configure.com configure.tgt configure.hst
|
||||
else
|
||||
echo Warning: no configure.in in `pwd`
|
||||
cat ${template} >> configure
|
||||
fi
|
||||
|
||||
chmod a+x configure.new
|
||||
rm template.new
|
||||
# mv configure configure.old
|
||||
mv configure.new configure
|
||||
echo Rebuilt configure in `pwd`
|
||||
|
||||
if [ -z "${norecurse}" ] ; then
|
||||
while [ -n "${configdirs}" ] ; do
|
||||
# set configdir to car of configdirs, configdirs to cdr of configdirs
|
||||
set ${configdirs}; configdir=$1; shift; configdirs=$*
|
||||
|
||||
if [ "`echo ${configdir}.*`" != "${configdir}.*" ] ; then
|
||||
targetspecificdirs=${configdir}.*
|
||||
else
|
||||
targetspecificdirs=
|
||||
fi
|
||||
|
||||
for i in ${configdir} ${targetspecificdirs} ; do
|
||||
if [ -d $i ] ; then
|
||||
if [ -r $i/configure ] ; then
|
||||
(cd $i ;
|
||||
./configure +template=${template} ${verbose})
|
||||
else
|
||||
echo No configure script in `pwd`/$i
|
||||
fi
|
||||
else
|
||||
echo Warning: directory $i is missing.
|
||||
fi
|
||||
done
|
||||
done
|
||||
fi
|
||||
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# some sanity checks on configure.in
|
||||
if [ -z "${srctrigger}" ] ; then
|
||||
echo srctrigger not set in configure.in. `pwd` not configured.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
for host in ${hosts} ; do
|
||||
# Default other arg
|
||||
if [ -z "${targets}" -o -n "${defaulttargets}" ] ; then
|
||||
targets=${host}
|
||||
defaulttargets=true
|
||||
fi
|
||||
|
||||
host_makefile_frag=config/hmake-${host}
|
||||
|
||||
#### configure.in per-host parts come in here.
|
||||
|
||||
## end of per-host part.
|
||||
|
||||
|
||||
for target in ${targets} ; do
|
||||
|
||||
if [ -n "${verbose}" ] ; then
|
||||
echo host \= \"${host}\", target \= \"${target}\".
|
||||
fi
|
||||
|
||||
target_makefile_frag=config/tmake-${target}
|
||||
|
||||
#### configure.in per-target parts come in here.
|
||||
|
||||
files=
|
||||
links=
|
||||
## end of per-target part.
|
||||
|
||||
# Temporarily, we support only direct subdir builds.
|
||||
hostsubdir=Host-${host}
|
||||
targetsubdir=Target-${target}
|
||||
|
||||
if [ -n "${removing}" ] ; then
|
||||
if [ -n "${forcesubdirs}" ] ; then
|
||||
if [ -d "${hostsubdir}" ] ; then
|
||||
rm -rf ${hostsubdir}/${targetsubdir}
|
||||
|
||||
if [ -z "`(ls ${hostsubdir}) 2>&1 | grep Target-`" ] ; then
|
||||
rm -rf ${hostsubdir}
|
||||
fi
|
||||
else
|
||||
echo Warning: no `pwd`/${hostsubdir} to remove.
|
||||
fi
|
||||
else
|
||||
rm -f Makefile config.status ${links}
|
||||
fi
|
||||
else
|
||||
if [ -n "${forcesubdirs}" ] ; then
|
||||
# check for existing status before allowing forced subdirs.
|
||||
if [ -f Makefile ] ; then
|
||||
echo "Makefile already exists in source directory. `pwd` not configured."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d ${hostsubdir} ] ; then mkdir ${hostsubdir} ; fi
|
||||
cd ${hostsubdir}
|
||||
|
||||
if [ ! -d ${targetsubdir} ] ; then mkdir ${targetsubdir} ; fi
|
||||
cd ${targetsubdir}
|
||||
|
||||
srcdir=../..
|
||||
else
|
||||
# if not subdir builds, then make sure none exist.
|
||||
if [ -n "`(ls .) 2>&1 | grep Host-`" ] ; then
|
||||
echo "Configured subdirs exist. `pwd` not configured."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Find the source files, if location was not specified.
|
||||
if [ -z "${srcdir}" ] ; then
|
||||
srcdirdefaulted=1
|
||||
srcdir=.
|
||||
if [ -n "${srctrigger}" -a ! -r ${srctrigger} ] ; then
|
||||
srcdir=..
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "${srctrigger}" -a ! -r ${srcdir}/${srctrigger} ] ; then
|
||||
if [ -z "${srcdirdefaulted}" ] ; then
|
||||
echo "${progname}: Can't find ${srcname} sources in `pwd`/${srcdir}" 1>&2
|
||||
else
|
||||
echo "${progname}: Can't find ${srcname} sources in `pwd`/. or `pwd`/.." 1>&2
|
||||
fi
|
||||
|
||||
echo \(At least ${srctrigger} is missing.\) 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Set up the list of links to be made.
|
||||
# ${links} is the list of link names, and ${files} is the list of names to link to.
|
||||
|
||||
# Make the links.
|
||||
while [ -n "${files}" ] ; do
|
||||
# set file to car of files, files to cdr of files
|
||||
set ${files}; file=$1; shift; files=$*
|
||||
set ${links}; link=$1; shift; links=$*
|
||||
|
||||
if [ ! -r ${srcdir}/${file} ] ; then
|
||||
echo "${progname}: cannot create a link \"${link}\"," 1>&2
|
||||
echo "since the file \"${file}\" does not exist." 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
${remove} -f ${link}
|
||||
rm -f config.status
|
||||
# Make a symlink if possible, otherwise try a hard link
|
||||
${symbolic_link} ${srcdir}/${file} ${link} 2>/dev/null || ${hard_link} ${srcdir}/${file} ${link}
|
||||
|
||||
if [ ! -r ${link} ] ; then
|
||||
echo "${progname}: unable to link \"${link}\" to \"${srcdir}/${file}\"." 1>&2
|
||||
exit 1
|
||||
fi
|
||||
echo "Linked \"${link}\" to \"${srcdir}/${file}\"."
|
||||
done
|
||||
|
||||
# Create a .gdbinit file which runs the one in srcdir
|
||||
# and tells GDB to look there for source files.
|
||||
|
||||
case ${srcdir} in
|
||||
.)
|
||||
;;
|
||||
*)
|
||||
echo "dir ." > .gdbinit
|
||||
echo "dir ${srcdir}" >> .gdbinit
|
||||
echo "source ${srcdir}/.gdbinit" >> .gdbinit
|
||||
;;
|
||||
esac
|
||||
|
||||
# Install a makefile, and make it set VPATH
|
||||
# if necessary so that the sources are found.
|
||||
# Also change its value of srcdir.
|
||||
|
||||
# FIXME-someday: This business of always writing to .tem and mv back
|
||||
# is so that I don't screw things up while developing. Once this
|
||||
# template is stable, these should be optimized. xoxorich.
|
||||
|
||||
# Define macro CROSS_COMPILE in compilation if this is a cross-compiler.
|
||||
if [ "${host}" != "${target}" ] ; then
|
||||
echo "CROSS=-DCROSS_COMPILE" > Makefile
|
||||
echo "ALL=start.encap" >> Makefile
|
||||
else
|
||||
echo "ALL=all.internal" > Makefile
|
||||
fi
|
||||
|
||||
# set target, host, VPATH
|
||||
echo "host = ${host}" >> Makefile
|
||||
echo "target = ${target}" >> Makefile
|
||||
|
||||
if [ -n "${forcesubdirs}" ] ; then
|
||||
echo "subdir = /${hostsubdir}/${targetsubdir}" >> Makefile
|
||||
else
|
||||
echo "subdir =" >> Makefile
|
||||
fi
|
||||
|
||||
# echo "workdir = `pwd`" >> Makefile
|
||||
echo "VPATH = ${srcdir}" >> Makefile
|
||||
|
||||
# add Makefile.in
|
||||
cat ${srcdir}/Makefile.in >> Makefile
|
||||
|
||||
# and shake thoroughly.
|
||||
# Conditionalize the makefile for this host.
|
||||
if [ -f ${srcdir}/${host_makefile_frag} ] ; then
|
||||
sed -e "/^####/ r ${srcdir}/${host_makefile_frag}" Makefile > Makefile.tem
|
||||
mv Makefile.tem Makefile
|
||||
fi
|
||||
|
||||
# Conditionalize the makefile for this target.
|
||||
if [ -f ${srcdir}/${target_makefile_frag} ] ; then
|
||||
sed -e "/^####/ r ${srcdir}/${target_makefile_frag}" Makefile > Makefile.tem
|
||||
mv Makefile.tem Makefile
|
||||
fi
|
||||
|
||||
# set srcdir
|
||||
sed "s@^srcdir = \.@srcdir = ${srcdir}@" Makefile > Makefile.tem
|
||||
mv Makefile.tem Makefile
|
||||
|
||||
# set destdir
|
||||
if [ -n "${destdir}" ] ; then
|
||||
sed "s:^destdir =.*$:destdir = ${destdir}:" Makefile > Makefile.tem
|
||||
mv Makefile.tem Makefile
|
||||
fi
|
||||
|
||||
# Remove all formfeeds, since some Makes get confused by them.
|
||||
sed "s///" Makefile >> Makefile.tem
|
||||
mv Makefile.tem Makefile
|
||||
|
||||
# reset SUBDIRS
|
||||
sed "s:^SUBDIRS =.*$:SUBDIRS = ${configdirs}:" Makefile > Makefile.tem
|
||||
mv Makefile.tem Makefile
|
||||
|
||||
# reset NONSUBDIRS
|
||||
sed "s:^NONSUBDIRS =.*$:NONSUBDIRS = ${noconfigdirs}:" Makefile > Makefile.tem
|
||||
mv Makefile.tem Makefile
|
||||
|
||||
using=
|
||||
if [ -f ${srcdir}/${host_makefile_frag} ] ; then
|
||||
using=" using \"${host_makefile_frag}\""
|
||||
fi
|
||||
|
||||
if [ -f ${srcdir}/${target_makefile_frag} ] ; then
|
||||
if [ -z "${using}" ] ; then
|
||||
andusing=" using \"${target_makefile_frag}\""
|
||||
else
|
||||
andusing="${using} and \"${target_makefile_frag}\""
|
||||
fi
|
||||
else
|
||||
andusing=${using}
|
||||
fi
|
||||
|
||||
echo "Created \"Makefile\"" in `pwd`${andusing}.
|
||||
|
||||
if [ "${host}" = "${target}" ] ; then
|
||||
echo "Links are now set up for use with a ${target}." \
|
||||
> config.status
|
||||
# | tee ${srcdir}/config.status
|
||||
else
|
||||
echo "Links are now set up for host ${host} and target ${target}." \
|
||||
> config.status
|
||||
# | tee ${srcdir}/config.status
|
||||
fi
|
||||
|
||||
originaldir=`pwd`
|
||||
cd ${srcdir}
|
||||
fi
|
||||
done # for each target
|
||||
|
||||
# # Now build a Makefile for this host.
|
||||
# if [ -n "${forcesubdirs}" ] ; then
|
||||
# cd ${hostsubdir}
|
||||
# cat > GNUmakefile << E!O!F
|
||||
## Makefile generated by configure for host ${host}.
|
||||
#
|
||||
#%:
|
||||
# for i in ${targets} ; do \
|
||||
# $(MAKE) -C Target-\$i \$@
|
||||
#
|
||||
#all clean stage1 stage2 stage3 stage4etags tags TAGS
|
||||
#E!O!F
|
||||
# fi
|
||||
done # for each host
|
||||
|
||||
# If there are subdirectories, then recurse.
|
||||
|
||||
if [ -n "${norecurse}" -o -z "${configdirs}" ] ; then exit 0 ; fi
|
||||
|
||||
# configdirs is not null
|
||||
for configdir in ${configdirs} ; do
|
||||
echo Configuring ${configdir}...
|
||||
specifics=
|
||||
commons=
|
||||
|
||||
if [ -n "${defaulttargets}" ] ; then
|
||||
for host in ${hosts} ; do
|
||||
if [ -d ${configdir}.${host} ] ; then
|
||||
newspecifics="${specifics} ${host}"
|
||||
specifics=${newspecifics}
|
||||
else
|
||||
newcommons="${commons} ${host}"
|
||||
commons=${newcommons}
|
||||
fi # if target specific
|
||||
done # for each host
|
||||
|
||||
if [ -n "${commons}" ] ; then
|
||||
if [ -d ${configdir} ] ; then
|
||||
(cd ${configdir} ;
|
||||
./configure ${commons} ${verbose} ${forcesubdirs} ${removing} "+destdir=${destdir}") \
|
||||
| sed 's/^/ /'
|
||||
else
|
||||
echo Warning: directory \"${configdir}\" is missing.
|
||||
fi
|
||||
fi # if any common hosts
|
||||
|
||||
if [ -n "${specifics}" ] ; then
|
||||
for host in ${specifics} ; do
|
||||
echo Configuring target specific directory ${configdir}.${host}...
|
||||
(cd ${configdir}.${host} ;
|
||||
./configure ${host} ${verbose} ${forcesubdirs} ${removing} "+destdir=${destdir}") \
|
||||
| sed 's/^/ /'
|
||||
done # for host in specifics
|
||||
fi # if there are any specifics
|
||||
else
|
||||
|
||||
for target in ${targets} ; do
|
||||
if [ -d ${configdir}.${target} ] ; then
|
||||
newspecifics="${specifics} ${target}"
|
||||
specifics=${newspecifics}
|
||||
else
|
||||
newcommons="${commons} +target=${target}"
|
||||
commons=${newcommons}
|
||||
fi
|
||||
|
||||
done # check for target specific dir override
|
||||
|
||||
if [ -n "${verbose}" ] ; then
|
||||
echo " "commons=\"${commons}\"
|
||||
echo " "specifics=\"${specifics}\"
|
||||
fi # if verbose
|
||||
|
||||
if [ -n "${commons}" ] ; then
|
||||
if [ -d ${configdir} ] ; then
|
||||
(cd ${configdir} ;
|
||||
./configure ${hosts} ${verbose} ${forcesubdirs} ${removing} ${commons} "+destdir=${destdir}") \
|
||||
| sed 's/^/ /'
|
||||
else
|
||||
echo Warning: directory \"${configdir}\" is missing.
|
||||
fi
|
||||
fi # if any commons
|
||||
|
||||
if [ -n "${specifics}" ] ; then
|
||||
for target in ${specifics} ; do
|
||||
echo Configuring target specific directory ${configdir}.${target}...
|
||||
(cd ${configdir}.${target} ;
|
||||
./configure ${hosts} ${verbose} ${forcesubdirs} ${removing} "+target=${target}" "+destdir=${destdir}") \
|
||||
| sed 's/^/ /'
|
||||
done
|
||||
fi # if any specifics
|
||||
fi # not default targets
|
||||
done
|
||||
|
||||
exit 0
|
||||
|
||||
#
|
||||
# $Log$
|
||||
# Revision 1.1 1991/07/23 19:09:21 sef
|
||||
# Initial revision
|
||||
#
|
||||
# Revision 1.20 1991/06/18 15:30:33 rich
|
||||
# Added prms.
|
||||
#
|
||||
# Revision 1.19 1991/06/13 04:21:14 rich
|
||||
# Re-arrange so that gcc, which creates directories, gets installed
|
||||
# first.
|
||||
#
|
||||
# Revision 1.18 1991/06/12 21:23:05 rich
|
||||
# correctly propogate destdir
|
||||
#
|
||||
# Revision 1.17 1991/06/09 20:39:58 rich
|
||||
# Added +clib option.
|
||||
#
|
||||
# Revision 1.16 1991/05/27 21:04:21 rich
|
||||
# Removed clib for now.
|
||||
#
|
||||
# Revision 1.15 1991/05/27 20:54:24 rich
|
||||
# fixed a bug in multiple targets
|
||||
#
|
||||
# Revision 1.14 1991/05/22 01:44:04 rich
|
||||
# remove gdb until config issues resolve.
|
||||
#
|
||||
# Revision 1.13 1991/05/19 08:00:09 rich
|
||||
# Added gdb.
|
||||
#
|
||||
# Revision 1.12 1991/05/19 00:32:13 rich
|
||||
# Changes to deal with missing subdirs gracefully, and changes dictated
|
||||
# from dropping configure over gdb.
|
||||
#
|
||||
# Revision 1.4 1991/05/19 00:16:45 rich
|
||||
# Configure for gdb.
|
||||
#
|
||||
# Revision 1.10 1991/05/04 00:58:38 rich
|
||||
# Fix program name bug.
|
||||
#
|
||||
# Revision 1.9 1991/05/03 19:14:18 rich
|
||||
# Changed getopt to libiberty, commented out an aborted attempt at host
|
||||
# level Makefiles because it caused errors on +rm, add a warning for
|
||||
# directories expected to be removed on +rm but that don't exist.
|
||||
#
|
||||
# Revision 1.8 1991/04/24 16:50:59 rich
|
||||
# Three staging checkpoint.
|
||||
#
|
||||
# Revision 1.7 1991/04/17 01:34:47 rich
|
||||
# Added getopt for binutils, fixed problem with host dependancies in
|
||||
# configure.template.
|
||||
#
|
||||
# Revision 1.6 1991/04/16 00:18:44 rich
|
||||
# Now handles multiple hosts and targets.
|
||||
#
|
||||
# Revision 1.5 1991/04/15 23:43:44 rich
|
||||
# Now handles multiple hosts and targets.
|
||||
#
|
||||
# Revision 1.4 1991/04/13 02:11:03 rich
|
||||
# Config cut 3. We now almost install a29k.
|
||||
#
|
||||
# Revision 1.3 1991/04/11 02:41:54 rich
|
||||
# Cut 2 config. Subdirs.
|
||||
#
|
||||
#
|
||||
#
|
||||
|
||||
#
|
||||
# Local Variables:
|
||||
# fill-column: 131
|
||||
# End:
|
||||
#
|
||||
|
||||
# end of configure.template
|
|
@ -1,108 +0,0 @@
|
|||
|
||||
|
||||
|
||||
call graph profile:
|
||||
The sum of self and descendents is the major sort
|
||||
for this listing.
|
||||
|
||||
function entries:
|
||||
|
||||
index the index of the function in the call graph
|
||||
listing, as an aid to locating it (see below).
|
||||
|
||||
%time the percentage of the total time of the program
|
||||
accounted for by this function and its
|
||||
descendents.
|
||||
|
||||
self the number of seconds spent in this function
|
||||
itself.
|
||||
|
||||
descendents
|
||||
the number of seconds spent in the descendents of
|
||||
this function on behalf of this function.
|
||||
|
||||
called the number of times this function is called (other
|
||||
than recursive calls).
|
||||
|
||||
self the number of times this function calls itself
|
||||
recursively.
|
||||
|
||||
name the name of the function, with an indication of
|
||||
its membership in a cycle, if any.
|
||||
|
||||
index the index of the function in the call graph
|
||||
listing, as an aid to locating it.
|
||||
|
||||
|
||||
|
||||
parent listings:
|
||||
|
||||
self* the number of seconds of this function's self time
|
||||
which is due to calls from this parent.
|
||||
|
||||
descendents*
|
||||
the number of seconds of this function's
|
||||
descendent time which is due to calls from this
|
||||
parent.
|
||||
|
||||
called** the number of times this function is called by
|
||||
this parent. This is the numerator of the
|
||||
fraction which divides up the function's time to
|
||||
its parents.
|
||||
|
||||
total* the number of times this function was called by
|
||||
all of its parents. This is the denominator of
|
||||
the propagation fraction.
|
||||
|
||||
parents the name of this parent, with an indication of the
|
||||
parent's membership in a cycle, if any.
|
||||
|
||||
index the index of this parent in the call graph
|
||||
listing, as an aid in locating it.
|
||||
|
||||
|
||||
|
||||
children listings:
|
||||
|
||||
self* the number of seconds of this child's self time
|
||||
which is due to being called by this function.
|
||||
|
||||
descendent*
|
||||
the number of seconds of this child's descendent's
|
||||
time which is due to being called by this
|
||||
function.
|
||||
|
||||
called** the number of times this child is called by this
|
||||
function. This is the numerator of the
|
||||
propagation fraction for this child.
|
||||
|
||||
total* the number of times this child is called by all
|
||||
functions. This is the denominator of the
|
||||
propagation fraction.
|
||||
|
||||
children the name of this child, and an indication of its
|
||||
membership in a cycle, if any.
|
||||
|
||||
index the index of this child in the call graph listing,
|
||||
as an aid to locating it.
|
||||
|
||||
|
||||
|
||||
* these fields are omitted for parents (or
|
||||
children) in the same cycle as the function. If
|
||||
the function (or child) is a member of a cycle,
|
||||
the propagated times and propagation denominator
|
||||
represent the self time and descendent time of the
|
||||
cycle as a whole.
|
||||
|
||||
** static-only parents and children are indicated
|
||||
by a call count of 0.
|
||||
|
||||
|
||||
|
||||
cycle listings:
|
||||
the cycle as a whole is listed with the same
|
||||
fields as a function entry. Below it are listed
|
||||
the members of the cycle, and their contributions
|
||||
to the time and call counts of the cycle.
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
|
||||
|
||||
|
||||
flat profile:
|
||||
|
||||
% the percentage of the total running time of the
|
||||
time program used by this function.
|
||||
|
||||
cumulative a running sum of the number of seconds accounted
|
||||
seconds for by this function and those listed above it.
|
||||
|
||||
self the number of seconds accounted for by this
|
||||
seconds function alone. This is the major sort for this
|
||||
listing.
|
||||
|
||||
calls the number of times this function was invoked, if
|
||||
this function is profiled, else blank.
|
||||
|
||||
self the average number of milliseconds spent in this
|
||||
ms/call function per call, if this function is profiled,
|
||||
else blank.
|
||||
|
||||
total the average number of milliseconds spent in this
|
||||
ms/call function and its descendents per call, if this
|
||||
function is profiled, else blank.
|
||||
|
||||
name the name of the function. This is the minor sort
|
||||
for this listing. The index shows the location of
|
||||
the function in the gprof listing. If the index is
|
||||
in parenthesis it shows where it would appear in
|
||||
the gprof listing if it were to be printed.
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
BEGIN {
|
||||
FS="\"";
|
||||
print "/* ==> Do not modify this file!! It is created automatically"
|
||||
print " by make-c-prog.awk; modify make-c-prog.awk instead. <== */"
|
||||
print ""
|
||||
print "#include <stdio.h>"
|
||||
}
|
||||
|
||||
{
|
||||
if (curfun != FUNCTION)
|
||||
{
|
||||
if (curfun)
|
||||
print "}"
|
||||
curfun = FUNCTION
|
||||
print ""
|
||||
print "void";
|
||||
printf "%s (file)\n", FUNCTION
|
||||
print " FILE *file;";
|
||||
print "{";
|
||||
}
|
||||
printf " fputs (\"";
|
||||
for (i = 1; i < NF; i++)
|
||||
printf "%s\\\"", $i;
|
||||
printf "%s\\n\", file);\n", $NF;
|
||||
}
|
||||
|
||||
END {
|
||||
print "}"
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 1989 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms are permitted
|
||||
* provided that: (1) source distributions retain this entire copyright
|
||||
* notice and comment, and (2) distributions including binaries display
|
||||
* the following acknowledgement: ``This product includes software
|
||||
* developed by the University of California, Berkeley and its contributors''
|
||||
* in the documentation or other materials provided with the distribution
|
||||
* and in all advertising materials mentioning features or use of this
|
||||
* software. Neither the name of the University nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
* 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.
|
||||
*
|
||||
* @(#)pathnames.h 5.2 (Berkeley) 6/1/90
|
||||
*/
|
||||
|
||||
#define _PATH_FLAT_BLURB "/usr/local/lib/gprof.flat"
|
||||
#define _PATH_CALLG_BLURB "/usr/local/lib/gprof.callg"
|
||||
|
12
gprof/t.c
12
gprof/t.c
|
@ -1,12 +0,0 @@
|
|||
void
|
||||
foo(int x) {
|
||||
if (x&3)
|
||||
foo (x-1);
|
||||
}
|
||||
|
||||
main() {
|
||||
int i;
|
||||
|
||||
for (i=0; i< 1024; i++)
|
||||
foo(i);
|
||||
}
|
160
mmalloc/README
160
mmalloc/README
|
@ -1,160 +0,0 @@
|
|||
The GNU mmalloc (mapped-malloc) package. fnf@cygnus.com
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This is a heavily modified version of GNU malloc which has been extended to
|
||||
use mmap() as the basic mechanism for for obtaining memory from the system,
|
||||
rather than sbrk(). This gives it several advantages over the
|
||||
more traditional malloc:
|
||||
|
||||
* Providing suitable precautions are taken to avoid memory region
|
||||
collisions, sbrk() is now available for use by applications that
|
||||
use this package and still need to use some memory management
|
||||
package that includes functions like malloc/realloc/free.
|
||||
|
||||
* Several different memory pools can be used, each of them growing
|
||||
or shinking under control of mmap(), with the mmalloc functions
|
||||
using a specific pool on a call by call basis.
|
||||
|
||||
* By using mmap, it is easy to create data pools which are intended to
|
||||
be persistent and exist as a filesystem object after the creating
|
||||
process has gone away.
|
||||
|
||||
* Because multiple memory pools can be managed, data used for a
|
||||
specific purpose can be allocated into it's own memory pool, making
|
||||
it easier to allow applications to "dump" and "restore" initialized
|
||||
malloc-managed memory regions. I.E., the "unexec" hack popularized
|
||||
by GNU emacs could potentially go away.
|
||||
|
||||
|
||||
Implementation
|
||||
--------------
|
||||
|
||||
The mmalloc functions contain no internal static state. All of mmalloc
|
||||
internal data is allocated in the mapped in region, along with the user
|
||||
data that it manages. This allows it to manage multiple such regions
|
||||
and to "pick up where it left off" when such regions are later dynamically
|
||||
mapped back in.
|
||||
|
||||
In some sense, malloc has been "purified" to contain no internal state
|
||||
information and generalized to use multiple memory regions rather than a
|
||||
single region managed by sbrk(). However the new routines now need an
|
||||
extra parameter which informs malloc which memory region it is dealing
|
||||
with (along with other information).
|
||||
|
||||
For ease of initial implementation, and to avoid exporting or importing
|
||||
any more global variables or routines than necessary, this package is
|
||||
implemented with all functions contained within a single source file.
|
||||
At some future point, once everything has stabilized, it may be desirable
|
||||
split it up into separate files.
|
||||
|
||||
The functions initially provided by mmalloc are:
|
||||
|
||||
void *mmalloc_attach (int fd, void *baseaddr);
|
||||
void *mmalloc_detach (void *md);
|
||||
int mmalloc_errno (void *md);
|
||||
int mmalloc_setkey (void *md, int keynum, void *key);
|
||||
void *mmalloc_getkey (void *md, int keynum);
|
||||
|
||||
void *mmalloc (void *md, size_t size);
|
||||
void *mrealloc (void *md, void *ptr, size_t size);
|
||||
void *mvalloc (void *md, size_t size);
|
||||
void mfree (void *md, void *ptr);
|
||||
|
||||
Backwards Compatibility
|
||||
-----------------------
|
||||
|
||||
To allow a single malloc package to be used in a given application, provision
|
||||
is made for the traditional malloc/realloc/free functions to be implemented
|
||||
as special cases of the mmalloc functions. In particular, if any of the
|
||||
functions that expect malloc descriptors are called with a NULL pointer rather
|
||||
than a valid malloc descriptor, then they default to using an mmap'd region
|
||||
starting at the current sbrk() value and mapped to /dev/zero. Applications
|
||||
can simply include the following defines to use the mmalloc versions:
|
||||
|
||||
#define malloc(size) mmalloc ((void *)0, (size))
|
||||
#define realloc(ptr,size) mrealloc ((void *)0, (ptr), (size));
|
||||
#define free(ptr) mfree ((void *)0, (ptr))
|
||||
|
||||
or replace the existing malloc/realloc/free calls with the above patterns
|
||||
if the #define's cause problems.
|
||||
|
||||
Note that this does not prevent calls to malloc/realloc/free within
|
||||
libraries from continuing to use the library version of malloc, so if this
|
||||
is a problem, the compatibility issue needs to be dealt with in another way.
|
||||
|
||||
|
||||
Function Descriptions
|
||||
---------------------
|
||||
|
||||
void *mmalloc_attach (int fd, void *baseaddr);
|
||||
|
||||
Initialize access to a mmalloc managed region.
|
||||
|
||||
If FD is a valid file descriptor for an open file then data for the
|
||||
mmalloc managed region is mapped to that file, otherwise "/dev/zero"
|
||||
is used and the data will not exist in any filesystem object.
|
||||
|
||||
If the open file corresponding to FD is from a previous use of
|
||||
mmalloc and passes some basic sanity checks to ensure that it is
|
||||
compatible with the current mmalloc package, then it's data is
|
||||
mapped in and is immediately accessible at the same addresses in
|
||||
the current process as the process that created the file.
|
||||
|
||||
If BASEADDR is not NULL, the mapping is established starting at the
|
||||
specified address in the process address space. If BASEADDR is NULL,
|
||||
the mmalloc package chooses a suitable address at which to start the
|
||||
mapped region, which will be the value of the previous mapping if
|
||||
opening an existing file which was previously built by mmalloc, or
|
||||
for new files will be a value chosen by mmap.
|
||||
|
||||
Specifying BASEADDR provides more control over where the regions
|
||||
start and how big they can be before bumping into existing mapped
|
||||
regions or future mapped regions.
|
||||
|
||||
On success, returns a "malloc descriptor" which is used in subsequent
|
||||
calls to other mmalloc package functions. It is explicitly "void *"
|
||||
("char *" for systems that don't fully support void) so that users
|
||||
of the package don't have to worry about the actual implementation
|
||||
details.
|
||||
|
||||
On failure returns NULL.
|
||||
|
||||
void *mmalloc_detach (void *md);
|
||||
|
||||
Terminate access to a mmalloc managed region by closing the base
|
||||
file and unmapping all memory pages associated with the region.
|
||||
|
||||
Returns NULL on success.
|
||||
|
||||
Returns the malloc descriptor on failure, which can subsequently
|
||||
be used for further action (such as obtaining more information about
|
||||
the nature of the failure).
|
||||
|
||||
void *mmalloc (void *md, size_t size);
|
||||
|
||||
Given an mmalloc descriptor MD, allocate additional memory of
|
||||
SIZE bytes in the associated mapped region.
|
||||
|
||||
void *mrealloc (void *md, void *ptr, size_t size);
|
||||
|
||||
Given an mmalloc descriptor MD and a pointer to memory previously
|
||||
allocated by mmalloc in PTR, reallocate the memory to be SIZE bytes
|
||||
long, possibly moving the existing contents of memory if necessary.
|
||||
|
||||
void *mvalloc (void *md, size_t size);
|
||||
|
||||
Like mmalloc but the resulting memory is aligned on a page boundary.
|
||||
|
||||
void mfree (void *md, void *ptr);
|
||||
|
||||
Given an mmalloc descriptor MD and a pointer to memory previously
|
||||
allocated by mmalloc in PTR, free the previously allocated memory.
|
||||
|
||||
int mmalloc_errno (void *md);
|
||||
|
||||
Given a mmalloc descriptor, if the last mmalloc operation
|
||||
failed for some reason due to a system call failure, then
|
||||
returns the associated errno. Returns 0 otherwise.
|
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue