aboutsummaryrefslogtreecommitdiff
path: root/gprof
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>1998-02-03 19:52:41 +0000
committerIan Lance Taylor <ian@airs.com>1998-02-03 19:52:41 +0000
commitc3de2a19e8e6b333525efb65de2e83791c73a378 (patch)
tree2c0cdd285d1d194c9223323e775aad85f83324a0 /gprof
parent37379a256bf9e85add0024d7e13f43aa0eba4282 (diff)
downloadgdb-c3de2a19e8e6b333525efb65de2e83791c73a378.zip
gdb-c3de2a19e8e6b333525efb65de2e83791c73a378.tar.gz
gdb-c3de2a19e8e6b333525efb65de2e83791c73a378.tar.bz2
Tue Feb 3 14:25:25 1998 Brent Baccala <baccala@freesoft.org>
Make it possible to build a cross gprof, although a few cases are still not handled: * configure.in: Don't set MY_TARGET. * gprof.h: Don't include MACHINE_H. Don't define FOPEN_RB or FOPEN_WB; just get them from sysdep.h. * core.h (min_insn_size, offset_to_code): Declare. * core.c (MIN_INSN_SIZE): Don't define. (min_insn_size, offset_to_code): New variables. (core_init): Initialize min_insn_size and offset_to_code. (find_call): New function. (core_create_line_syms): Don't use min_dist. Set is_static in pass 2. * hist.c (UNITS_TO_CODE): Define. * gprof.c (default_excluded_list): Add "__mcount_internal". * gmon.h: Change TARGET_alpha to __alpha__. * hertz.h: Ifdef MACH, define hertz as HZ. * alpha.c (alpha_Instruction): Rename from Instruction. Change all references. (alpha_find_call): Rename from find_call. * alpha.h: Remove. * dummy.c, dummy.h: Remove. * i386.c (i386_iscall): Rename from iscall. Change all references. Check for call instruction, not jump or lcall. (i386_find_call): Rename from find_call. Correct for VMA. Correct call destination computation. Don't dereference symbol if it is NULL. * i386.h: Remove. * ns532.c, ns532.h: Remove. * sparc.c (CALL): Define. (sparc_find_call): Rename from find_call. * sparc.h: Remove. * tahoe.c: Include cg_arcs.h, core.h, hist.h, and symtab.h. Don't include time_host.h. (CALLF, PC): Define. (enum tahoe_opermodes, tahoe_operandenum): Define. Rename all references to opermodes or operandenum to these. (tahoe_operandmode): Rename from operandmode. Call abort if switch does not return. (tahoe_operandname): Rename from operandname. Call abort if switch does not return. (tahoe_operandlength): Rename from operandlength. Call abort if switch does not return. (tahoe_reladdr): Rename from reladdr. (tahoe_find_call): Rename from find_call. Use core_text_space rather than textspace. * tahoe.h: Remove. * vax.c (CALLS, PC): Define. (enum opermodes, operandenum, struct modebyte): Define. (vax_operandmode): Rename from operandmode. Call abort if switch does not return. (vax_operandname): Rename from operandname. Call abort if switch does not return. (vax_operandlength): Rename from operandlength. Call abort if switch does not return. (vax_reladdr): Rename from reladdr. (vax_find_call): Rename from find_call. * vax.h: Remove. * Makefile.am (AUTOMAKE_OPTIONS): Set to cygnus. (MY_TARGET): Remove. (INCLUDES): Remove -DTARGET_$(MY_TARGET) and -DMACHINE_H= \"$(MY_TARGET).h\". (gprof_SOURCES): Add i386.c, alpha.c, vax.c, tahoe.c, sparc.c. (gprof_DEPENDENCIES): Remove $(MY_TARGET).o. (gprof_LDADD): Likewise. (noinst_HEADERS): Remove alpha.h, i386.h, ns532.h, sparc.h, tahoe.h, vax.h, dummy.h. (EXTRA_DIST): Remove alpha.c, i386.c, ns532.c, sparc.c, tahoe.c, vax.c, dummy.c. ($(OBJECTS)): Don't depend upon $(MY_TARGET).h. ($(MY_TARGET).o): Remove target. (i386.o, alpha.o, vax.o, tahoe.o, sparc.o): New targets. * configure, Makefile.in, aclocal.m4: Rebuild.
Diffstat (limited to 'gprof')
-rw-r--r--gprof/.Sanitize9
-rw-r--r--gprof/ChangeLog75
-rw-r--r--gprof/Makefile.am29
-rw-r--r--gprof/Makefile.in48
-rw-r--r--gprof/TODO6
-rw-r--r--gprof/aclocal.m439
-rw-r--r--gprof/alpha.c10
-rw-r--r--gprof/alpha.h36
-rwxr-xr-xgprof/configure155
-rw-r--r--gprof/configure.in14
-rw-r--r--gprof/core.c173
-rw-r--r--gprof/core.h4
-rw-r--r--gprof/dummy.c19
-rw-r--r--gprof/dummy.h55
-rw-r--r--gprof/gmon.h10
-rw-r--r--gprof/gprof.c3
-rw-r--r--gprof/gprof.h21
-rw-r--r--gprof/hertz.h8
-rw-r--r--gprof/hist.c2
-rw-r--r--gprof/i386.c56
-rw-r--r--gprof/i386.h38
-rw-r--r--gprof/ns532.c17
-rw-r--r--gprof/ns532.h51
-rw-r--r--gprof/sparc.c6
-rw-r--r--gprof/sparc.h31
-rw-r--r--gprof/tahoe.c86
-rw-r--r--gprof/tahoe.h46
-rw-r--r--gprof/vax.c62
-rw-r--r--gprof/vax.h52
29 files changed, 522 insertions, 639 deletions
diff --git a/gprof/.Sanitize b/gprof/.Sanitize
index 2cc7502..ea68878 100644
--- a/gprof/.Sanitize
+++ b/gprof/.Sanitize
@@ -35,7 +35,6 @@ TODO
acconfig.h
aclocal.m4
alpha.c
-alpha.h
basic_blocks.c
basic_blocks.h
bsd_callg_bl.m
@@ -52,8 +51,6 @@ configure.bat
configure.in
core.c
core.h
-dummy.c
-dummy.h
flat_bl.m
fsf_callg_bl.m
gconfig.in
@@ -71,26 +68,20 @@ hertz.h
hist.c
hist.h
i386.c
-i386.h
-ns532.c
-ns532.h
search_list.c
search_list.h
source.c
source.h
sparc.c
-sparc.h
stamp-h.in
sym_ids.c
sym_ids.h
symtab.c
symtab.h
tahoe.c
-tahoe.h
utils.c
utils.h
vax.c
-vax.h
Things-to-lose:
diff --git a/gprof/ChangeLog b/gprof/ChangeLog
index e10ee4f..cd8e426 100644
--- a/gprof/ChangeLog
+++ b/gprof/ChangeLog
@@ -1,3 +1,78 @@
+Tue Feb 3 14:25:25 1998 Brent Baccala <baccala@freesoft.org>
+
+ Make it possible to build a cross gprof, although a few cases are
+ still not handled:
+ * configure.in: Don't set MY_TARGET.
+ * gprof.h: Don't include MACHINE_H. Don't define FOPEN_RB or
+ FOPEN_WB; just get them from sysdep.h.
+ * core.h (min_insn_size, offset_to_code): Declare.
+ * core.c (MIN_INSN_SIZE): Don't define.
+ (min_insn_size, offset_to_code): New variables.
+ (core_init): Initialize min_insn_size and offset_to_code.
+ (find_call): New function.
+ (core_create_line_syms): Don't use min_dist. Set is_static in
+ pass 2.
+ * hist.c (UNITS_TO_CODE): Define.
+ * gprof.c (default_excluded_list): Add "__mcount_internal".
+ * gmon.h: Change TARGET_alpha to __alpha__.
+ * hertz.h: Ifdef MACH, define hertz as HZ.
+ * alpha.c (alpha_Instruction): Rename from Instruction. Change
+ all references.
+ (alpha_find_call): Rename from find_call.
+ * alpha.h: Remove.
+ * dummy.c, dummy.h: Remove.
+ * i386.c (i386_iscall): Rename from iscall. Change all
+ references. Check for call instruction, not jump or lcall.
+ (i386_find_call): Rename from find_call. Correct for VMA.
+ Correct call destination computation. Don't dereference symbol if
+ it is NULL.
+ * i386.h: Remove.
+ * ns532.c, ns532.h: Remove.
+ * sparc.c (CALL): Define.
+ (sparc_find_call): Rename from find_call.
+ * sparc.h: Remove.
+ * tahoe.c: Include cg_arcs.h, core.h, hist.h, and symtab.h. Don't
+ include time_host.h.
+ (CALLF, PC): Define.
+ (enum tahoe_opermodes, tahoe_operandenum): Define. Rename all
+ references to opermodes or operandenum to these.
+ (tahoe_operandmode): Rename from operandmode. Call abort if
+ switch does not return.
+ (tahoe_operandname): Rename from operandname. Call abort if
+ switch does not return.
+ (tahoe_operandlength): Rename from operandlength. Call abort if
+ switch does not return.
+ (tahoe_reladdr): Rename from reladdr.
+ (tahoe_find_call): Rename from find_call. Use core_text_space
+ rather than textspace.
+ * tahoe.h: Remove.
+ * vax.c (CALLS, PC): Define.
+ (enum opermodes, operandenum, struct modebyte): Define.
+ (vax_operandmode): Rename from operandmode. Call abort if switch
+ does not return.
+ (vax_operandname): Rename from operandname. Call abort if switch
+ does not return.
+ (vax_operandlength): Rename from operandlength. Call abort if
+ switch does not return.
+ (vax_reladdr): Rename from reladdr.
+ (vax_find_call): Rename from find_call.
+ * vax.h: Remove.
+ * Makefile.am (AUTOMAKE_OPTIONS): Set to cygnus.
+ (MY_TARGET): Remove.
+ (INCLUDES): Remove -DTARGET_$(MY_TARGET) and -DMACHINE_H=
+ \"$(MY_TARGET).h\".
+ (gprof_SOURCES): Add i386.c, alpha.c, vax.c, tahoe.c, sparc.c.
+ (gprof_DEPENDENCIES): Remove $(MY_TARGET).o.
+ (gprof_LDADD): Likewise.
+ (noinst_HEADERS): Remove alpha.h, i386.h, ns532.h, sparc.h,
+ tahoe.h, vax.h, dummy.h.
+ (EXTRA_DIST): Remove alpha.c, i386.c, ns532.c, sparc.c, tahoe.c,
+ vax.c, dummy.c.
+ ($(OBJECTS)): Don't depend upon $(MY_TARGET).h.
+ ($(MY_TARGET).o): Remove target.
+ (i386.o, alpha.o, vax.o, tahoe.o, sparc.o): New targets.
+ * configure, Makefile.in, aclocal.m4: Rebuild.
+
Mon Dec 29 14:17:08 1997 Ian Lance Taylor <ian@cygnus.com>
* core.c (core_sym_class): Treat weak symbols as text symbols.
diff --git a/gprof/Makefile.am b/gprof/Makefile.am
index 39524ad..a9768b6 100644
--- a/gprof/Makefile.am
+++ b/gprof/Makefile.am
@@ -1,32 +1,27 @@
## Process this file with automake to generate Makefile.in
-## We should have cygnus in AUTOMAKE_OPTIONS, but it doesn't work yet.
-AUTOMAKE_OPTIONS = foreign
+AUTOMAKE_OPTIONS = cygnus
SUFFIXES = .m
-INCLUDES = -D_GNU_SOURCE -DDEBUG -DTARGET_$(MY_TARGET) -DMACHINE_H=\"$(MY_TARGET).h\" -I../bfd -I$(srcdir)/../include -I$(srcdir)/../bfd
-
-MY_TARGET = @MY_TARGET@
+INCLUDES = -D_GNU_SOURCE -DDEBUG -I../bfd -I$(srcdir)/../include -I$(srcdir)/../bfd
bin_PROGRAMS = gprof
gprof_SOURCES = basic_blocks.c call_graph.c cg_arcs.c cg_dfn.c \
cg_print.c core.c gmon_io.c gprof.c hertz.c hist.c source.c \
search_list.c symtab.c sym_ids.c utils.c \
- flat_bl.c bsd_callg_bl.c fsf_callg_bl.c
-gprof_DEPENDENCIES = $(MY_TARGET).o ../bfd/libbfd.la ../libiberty/libiberty.a
-gprof_LDADD = $(MY_TARGET).o ../bfd/libbfd.la ../libiberty/libiberty.a
+ flat_bl.c bsd_callg_bl.c fsf_callg_bl.c \
+ i386.c alpha.c vax.c tahoe.c sparc.c
+gprof_DEPENDENCIES = ../bfd/libbfd.la ../libiberty/libiberty.a
+gprof_LDADD = ../bfd/libbfd.la ../libiberty/libiberty.a
noinst_HEADERS = \
- alpha.h i386.h ns532.h sparc.h tahoe.h vax.h dummy.h \
basic_blocks.h call_graph.h cg_arcs.h cg_dfn.h cg_print.h \
core.h gmon.h gmon_io.h gmon_out.h gprof.h hertz.h hist.h \
- search_list.h source.h sparc.h sym_ids.h symtab.h utils.h
+ search_list.h source.h sym_ids.h symtab.h utils.h
-EXTRA_DIST = \
- alpha.c i386.c ns532.c sparc.c tahoe.c vax.c dummy.c \
- flat_bl.c bsd_callg_bl.c fsf_callg_bl.c \
+EXTRA_DIST = flat_bl.c bsd_callg_bl.c fsf_callg_bl.c
BUILT_SOURCES = flat_bl.c bsd_callg_bl.c fsf_callg_bl.c
@@ -43,8 +38,7 @@ $(OBJECTS): ../bfd/bfd.h call_graph.h cg_arcs.h cg_print.h \
core.h gmon_io.h gmon_out.h gprof.h hertz.h hist.h \
search_list.h source.h sym_ids.h symtab.h utils.h \
$(srcdir)/../include/libiberty.h $(srcdir)/../bfd/sysdep.h \
- gconfig.h ../bfd/config.h $(MY_TARGET).h
-$(MY_TARGET).o: $(MY_TARGET).c
+ gconfig.h ../bfd/config.h
basic_blocks.o: basic_blocks.c
bsd_call_bl.o: bsd_call_bl.c
call_graph.o: call_graph.c
@@ -63,3 +57,8 @@ source.o: source.c
symtab.o: symtab.c
sym_ids.o: sym_ids.c
utils.o: utils.c
+i386.o: i386.c
+alpha.o: alpha.c
+vax.o: vax.c
+tahoe.o: tahoe.c
+sparc.o: sparc.c
diff --git a/gprof/Makefile.in b/gprof/Makefile.in
index 1cbdc59c1..3df9260 100644
--- a/gprof/Makefile.in
+++ b/gprof/Makefile.in
@@ -5,7 +5,7 @@
# gives unlimited permission to copy, distribute and modify it.
-SHELL = /bin/sh
+SHELL = @SHELL@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
@@ -66,32 +66,29 @@ PACKAGE = @PACKAGE@
RANLIB = @RANLIB@
VERSION = @VERSION@
-AUTOMAKE_OPTIONS = foreign
+AUTOMAKE_OPTIONS = cygnus
SUFFIXES = .m
-INCLUDES = -D_GNU_SOURCE -DDEBUG -DTARGET_$(MY_TARGET) -DMACHINE_H=\"$(MY_TARGET).h\" -I../bfd -I$(srcdir)/../include -I$(srcdir)/../bfd
-
-MY_TARGET = @MY_TARGET@
+INCLUDES = -D_GNU_SOURCE -DDEBUG -I../bfd -I$(srcdir)/../include -I$(srcdir)/../bfd
bin_PROGRAMS = gprof
gprof_SOURCES = basic_blocks.c call_graph.c cg_arcs.c cg_dfn.c \
cg_print.c core.c gmon_io.c gprof.c hertz.c hist.c source.c \
search_list.c symtab.c sym_ids.c utils.c \
- flat_bl.c bsd_callg_bl.c fsf_callg_bl.c
-gprof_DEPENDENCIES = $(MY_TARGET).o ../bfd/libbfd.la ../libiberty/libiberty.a
-gprof_LDADD = $(MY_TARGET).o ../bfd/libbfd.la ../libiberty/libiberty.a
+ flat_bl.c bsd_callg_bl.c fsf_callg_bl.c \
+ i386.c alpha.c vax.c tahoe.c sparc.c
+gprof_DEPENDENCIES = ../bfd/libbfd.la ../libiberty/libiberty.a
+gprof_LDADD = ../bfd/libbfd.la ../libiberty/libiberty.a
noinst_HEADERS = \
- alpha.h i386.h ns532.h sparc.h tahoe.h vax.h dummy.h \
basic_blocks.h call_graph.h cg_arcs.h cg_dfn.h cg_print.h \
core.h gmon.h gmon_io.h gmon_out.h gprof.h hertz.h hist.h \
- search_list.h source.h sparc.h sym_ids.h symtab.h utils.h
+ search_list.h source.h sym_ids.h symtab.h utils.h
+
+EXTRA_DIST = flat_bl.c bsd_callg_bl.c fsf_callg_bl.c
-EXTRA_DIST = \
- alpha.c i386.c ns532.c sparc.c tahoe.c vax.c dummy.c \
- flat_bl.c bsd_callg_bl.c fsf_callg_bl.c \
BUILT_SOURCES = flat_bl.c bsd_callg_bl.c fsf_callg_bl.c
info_TEXINFOS = gprof.texi
@@ -111,7 +108,7 @@ LIBS = @LIBS@
gprof_OBJECTS = basic_blocks.o call_graph.o cg_arcs.o cg_dfn.o \
cg_print.o core.o gmon_io.o gprof.o hertz.o hist.o source.o \
search_list.o symtab.o sym_ids.o utils.o flat_bl.o bsd_callg_bl.o \
-fsf_callg_bl.o
+fsf_callg_bl.o i386.o alpha.o vax.o tahoe.o sparc.o
gprof_LDFLAGS =
CFLAGS = @CFLAGS@
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
@@ -141,7 +138,7 @@ OBJECTS = $(gprof_OBJECTS)
default: all
.SUFFIXES:
-.SUFFIXES: .c .dvi .info .lo .m .o .ps .texi .texinfo
+.SUFFIXES: .S .c .dvi .info .lo .m .o .ps .s .texi .texinfo
$(srcdir)/Makefile.in: @MAINT@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --cygnus Makefile
@@ -202,6 +199,12 @@ uninstall-binPROGRAMS:
rm -f $(bindir)/`echo $$p|sed '$(transform)'`; \
done
+.s.o:
+ $(COMPILE) -c $<
+
+.S.o:
+ $(COMPILE) -c $<
+
.c.o:
$(COMPILE) -c $<
@@ -218,6 +221,13 @@ maintainer-clean-compile:
.c.lo:
$(LIBTOOL) --mode=compile $(COMPILE) -c $<
+# These are just copies of the above rule.
+.s.lo:
+ $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+.S.lo:
+ $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
mostlyclean-libtool:
rm -f *.lo
@@ -482,8 +492,7 @@ $(OBJECTS): ../bfd/bfd.h call_graph.h cg_arcs.h cg_print.h \
core.h gmon_io.h gmon_out.h gprof.h hertz.h hist.h \
search_list.h source.h sym_ids.h symtab.h utils.h \
$(srcdir)/../include/libiberty.h $(srcdir)/../bfd/sysdep.h \
- gconfig.h ../bfd/config.h $(MY_TARGET).h
-$(MY_TARGET).o: $(MY_TARGET).c
+ gconfig.h ../bfd/config.h
basic_blocks.o: basic_blocks.c
bsd_call_bl.o: bsd_call_bl.c
call_graph.o: call_graph.c
@@ -502,6 +511,11 @@ source.o: source.c
symtab.o: symtab.c
sym_ids.o: sym_ids.c
utils.o: utils.c
+i386.o: i386.c
+alpha.o: alpha.c
+vax.o: vax.c
+tahoe.o: tahoe.c
+sparc.o: sparc.c
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/gprof/TODO b/gprof/TODO
index 30a3cb2..20111c6 100644
--- a/gprof/TODO
+++ b/gprof/TODO
@@ -1,14 +1,14 @@
-Thu Feb 9 16:48:04 1995
-- documentation
-- optimize bfd_find_nearest_line_num() (or replace by different interface)
- gmon_io.c cannot deal with target architecture that have a pointer size
that is different from the host architectures pointer size---fix this
(gmon_out.h, and gmon_io.c)
- add support for prof file format so that prof files can be displayed
at the line-level (this is useful for the uprofile tool under DEC's
OSF/1)
+- take a hard look at --file-ordering (broken) and --function-ordering
++ documentation
++ optimize bfd_find_nearest_line_num() (or replace by different interface)
+ cleanup _bfd_ecoff_find_nearest_line_num() fixes & description
+ ensure "cc -pg" produces good files under OSF/1 v3.0
+ make sure gprof works together with OSF/1 v3.0's profiling libraries
diff --git a/gprof/aclocal.m4 b/gprof/aclocal.m4
index 39d4683..9d0b5aa 100644
--- a/gprof/aclocal.m4
+++ b/gprof/aclocal.m4
@@ -100,19 +100,26 @@ AC_REQUIRE([AM_PROG_LD])
AC_REQUIRE([AC_PROG_LN_S])
# Always use our own libtool.
-LIBTOOL='$(top_builddir)/libtool'
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
AC_SUBST(LIBTOOL)
+dnl CYGNUS LOCAL arguments to enable-shared
dnl Allow the --disable-shared flag to stop us from building shared libs.
AC_ARG_ENABLE(shared,
[ --enable-shared build shared libraries [default=yes]],
-[if test "$enableval" = no; then
- enable_shared=no
-else
- enable_shared=yes
-fi])
+[p=${PACKAGE-bogus-package-name}
+ case "$enableval" in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ # The value of $p (aka $PACKAGE) is assumed to come from AM_INIT_AUTOMAKE.
+ # If it didn't, it'll be `bogus-package-name', thus making this condition
+ # not be used.
+ *$p*) enable_shared=yes ;;
+ *) shared=no ;;
+esac])
libtool_shared=
test "$enable_shared" = no && libtool_shared=" --disable-shared"
+dnl END CYGNUS LOCAL
dnl Allow the --disable-static flag to stop us from building static libs.
AC_ARG_ENABLE(static,
@@ -267,7 +274,7 @@ AC_DEFUN(AM_MAINTAINER_MODE,
dnl AM_CYGWIN32()
AC_DEFUN(AM_CYGWIN32,
[AC_CACHE_CHECK(for Cygwin32 environment, am_cv_cygwin32,
-[AC_TRY_COMPILE(,[int main () { return __CYGWIN32__; }],
+[AC_TRY_COMPILE(,[return __CYGWIN32__;],
am_cv_cygwin32=yes, am_cv_cygwin32=no)
rm -f conftest*])
CYGWIN32=
@@ -283,9 +290,10 @@ dnl environment. But if we're not, then it compiles a test program
dnl to see if there is a suffix for executables.
AC_DEFUN(AM_EXEEXT,
[AC_REQUIRE([AM_CYGWIN32])
+AC_REQUIRE([AM_MINGW32])
AC_MSG_CHECKING([for executable suffix])
-AC_CACHE_VAL(am_cv_exeext,
-[if test "$CYGWIN32" = yes; then
+AC_CACHE_VAL(am_cv_exeext,[
+if test "$CYGWIN32" = yes -o "$MINGW32" = yes; then
am_cv_exeext=.exe
else
cat > am_c_test.c << 'EOF'
@@ -303,3 +311,16 @@ test x"${am_cv_exeext}" != xno && EXEEXT=${am_cv_exeext}
AC_MSG_RESULT(${am_cv_exeext})
AC_SUBST(EXEEXT)])
+# Check to see if we're running under Mingw, without using
+# AC_CANONICAL_*. If so, set output variable MINGW32 to "yes".
+# Otherwise set it to "no".
+
+dnl AM_MINGW32()
+AC_DEFUN(AM_MINGW32,
+[AC_CACHE_CHECK(for Mingw32 environment, am_cv_mingw32,
+[AC_TRY_COMPILE(,[return __MINGW32__;],
+am_cv_mingw32=yes, am_cv_mingw32=no)
+rm -f conftest*])
+MINGW32=
+test "$am_cv_mingw32" = yes && MINGW32=yes])
+
diff --git a/gprof/alpha.c b/gprof/alpha.c
index e99fee5..843dda3 100644
--- a/gprof/alpha.c
+++ b/gprof/alpha.c
@@ -58,7 +58,7 @@ typedef union
}
j; /* jump format */
}
-Instruction;
+alpha_Instruction;
static Sym indirect_child;
@@ -71,14 +71,14 @@ static Sym indirect_child;
* potentially call integer division routines, for example.)
*/
void
-find_call (parent, p_lowpc, p_highpc)
+alpha_find_call (parent, p_lowpc, p_highpc)
Sym *parent;
bfd_vma p_lowpc;
bfd_vma p_highpc;
{
static bfd_vma delta = 0;
bfd_vma dest_pc;
- Instruction *pc;
+ alpha_Instruction *pc;
Sym *child;
if (!delta)
@@ -105,8 +105,8 @@ find_call (parent, p_lowpc, p_highpc)
}
DBG (CALLDEBUG, printf ("[find_call] %s: 0x%lx to 0x%lx\n",
parent->name, p_lowpc, p_highpc));
- for (pc = (Instruction *) (p_lowpc + delta);
- pc < (Instruction *) (p_highpc + delta);
+ for (pc = (alpha_Instruction *) (p_lowpc + delta);
+ pc < (alpha_Instruction *) (p_highpc + delta);
++pc)
{
switch (pc->a.op_code)
diff --git a/gprof/alpha.h b/gprof/alpha.h
deleted file mode 100644
index b91324e..0000000
--- a/gprof/alpha.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 1983 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.
- *
- * @(#)alpha.h 1.4 (Berkeley) 6/1/90
- */
-#ifndef alpha_h
-#define alpha_h
-
-/*
- * Offset (in bytes) of the code from the entry address of a routine.
- * (see hist_assign_samples for use and explanation.)
- */
-#define OFFSET_TO_CODE 0
-#define UNITS_TO_CODE (OFFSET_TO_CODE / sizeof(UNIT))
-
-/*
- * Minimum size of an instruction (in bytes):
- */
-#define MIN_INSN_SIZE 4
-
-#endif /* alpha_h */
diff --git a/gprof/configure b/gprof/configure
index 5a9b2fa..3ededd3 100755
--- a/gprof/configure
+++ b/gprof/configure
@@ -58,6 +58,7 @@ mandir='${prefix}/man'
# Initialize some other variables.
subdirs=
MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
# Maximum number of lines to put in a shell here document.
ac_max_here_lines=12
@@ -575,7 +576,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
fi
echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:579: checking host system type" >&5
+echo "configure:580: checking host system type" >&5
host_alias=$host
case "$host_alias" in
@@ -596,7 +597,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$host" 1>&6
echo $ac_n "checking target system type""... $ac_c" 1>&6
-echo "configure:600: checking target system type" >&5
+echo "configure:601: checking target system type" >&5
target_alias=$target
case "$target_alias" in
@@ -614,7 +615,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$target" 1>&6
echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:618: checking build system type" >&5
+echo "configure:619: checking build system type" >&5
build_alias=$build
case "$build_alias" in
@@ -644,11 +645,12 @@ test "$host_alias" != "$target_alias" &&
# SunOS /usr/etc/install
# IRIX /sbin/install
# AIX /bin/install
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
# AFS /usr/afsws/bin/install, which mishandles nonexistent args
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:652: checking for a BSD compatible install" >&5
+echo "configure:654: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -660,12 +662,13 @@ else
/|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
*)
# OSF1 and SCO ODT 3.0 have their own names for install.
- for ac_prog in ginstall installbsd scoinst install; do
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
if test -f $ac_dir/$ac_prog; then
if test $ac_prog = install &&
grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
# AIX install. It has an incompatible calling convention.
- # OSF/1 installbsd also uses dspmsg, but is usable.
:
else
ac_cv_path_install="$ac_dir/$ac_prog -c"
@@ -717,7 +720,7 @@ cat >> confdefs.h <<EOF
EOF
echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
-echo "configure:721: checking whether build environment is sane" >&5
+echo "configure:724: checking whether build environment is sane" >&5
# Just in case
sleep 1
echo timestamp > conftestfile
@@ -764,7 +767,7 @@ test "$program_transform_name" = "" && program_transform_name="s,x,x,"
missing_dir=`cd $ac_aux_dir && pwd`
echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
-echo "configure:768: checking for working aclocal" >&5
+echo "configure:771: checking for working aclocal" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
@@ -777,7 +780,7 @@ else
fi
echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
-echo "configure:781: checking for working autoconf" >&5
+echo "configure:784: checking for working autoconf" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
@@ -790,7 +793,7 @@ else
fi
echo $ac_n "checking for working automake""... $ac_c" 1>&6
-echo "configure:794: checking for working automake" >&5
+echo "configure:797: checking for working automake" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
@@ -803,7 +806,7 @@ else
fi
echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
-echo "configure:807: checking for working autoheader" >&5
+echo "configure:810: checking for working autoheader" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
@@ -816,7 +819,7 @@ else
fi
echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
-echo "configure:820: checking for working makeinfo" >&5
+echo "configure:823: checking for working makeinfo" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
@@ -829,7 +832,7 @@ else
fi
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:833: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:836: checking whether ${MAKE-make} sets \${MAKE}" >&5
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -859,7 +862,7 @@ fi
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:863: checking for $ac_word" >&5
+echo "configure:866: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -888,7 +891,7 @@ if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:892: checking for $ac_word" >&5
+echo "configure:895: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -936,7 +939,7 @@ fi
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:940: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:943: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -946,11 +949,11 @@ ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS
cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext <<EOF
-#line 950 "configure"
+#line 953 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
-if { (eval echo configure:954: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
@@ -970,12 +973,12 @@ if test $ac_cv_prog_cc_works = no; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:974: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:977: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:979: checking whether we are using GNU C" >&5
+echo "configure:982: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -984,7 +987,7 @@ else
yes;
#endif
EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:988: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:991: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
@@ -999,7 +1002,7 @@ if test $ac_cv_prog_gcc = yes; then
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1003: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1006: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1029,7 +1032,7 @@ fi
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1033: checking for $ac_word" >&5
+echo "configure:1036: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1065,10 +1068,10 @@ fi
if test "$with_gnu_ld" = yes; then
echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
-echo "configure:1069: checking for GNU ld" >&5
+echo "configure:1072: checking for GNU ld" >&5
else
echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
-echo "configure:1072: checking for non-GNU ld" >&5
+echo "configure:1075: checking for non-GNU ld" >&5
fi
if eval "test \"`echo '$''{'ac_cv_path_LD'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -1107,7 +1110,7 @@ fi
test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; }
echo $ac_n "checking whether we are using GNU ld""... $ac_c" 1>&6
-echo "configure:1111: checking whether we are using GNU ld" >&5
+echo "configure:1114: checking whether we are using GNU ld" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1123,7 +1126,7 @@ echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6
echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:1127: checking whether ln -s works" >&5
+echo "configure:1130: checking whether ln -s works" >&5
if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1150,17 +1153,22 @@ fi
# Always use our own libtool.
-LIBTOOL='$(top_builddir)/libtool'
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
# Check whether --enable-shared or --disable-shared was given.
if test "${enable_shared+set}" = set; then
enableval="$enable_shared"
- if test "$enableval" = no; then
- enable_shared=no
-else
- enable_shared=yes
-fi
+ p=${PACKAGE-bogus-package-name}
+ case "$enableval" in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ # The value of $p (aka $PACKAGE) is assumed to come from AM_INIT_AUTOMAKE.
+ # If it didn't, it'll be `bogus-package-name', thus making this condition
+ # not be used.
+ *$p*) enable_shared=yes ;;
+ *) shared=no ;;
+esac
fi
libtool_shared=
@@ -1220,7 +1228,7 @@ $libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1224: checking for $ac_word" >&5
+echo "configure:1232: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1249,7 +1257,7 @@ if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1253: checking for $ac_word" >&5
+echo "configure:1261: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1297,7 +1305,7 @@ fi
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1301: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1309: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1307,11 +1315,11 @@ ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS
cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext <<EOF
-#line 1311 "configure"
+#line 1319 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
-if { (eval echo configure:1315: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1323: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
@@ -1331,12 +1339,12 @@ if test $ac_cv_prog_cc_works = no; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1335: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1343: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1340: checking whether we are using GNU C" >&5
+echo "configure:1348: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1345,7 +1353,7 @@ else
yes;
#endif
EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1349: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1357: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
@@ -1360,7 +1368,7 @@ if test $ac_cv_prog_gcc = yes; then
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1364: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1372: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1392,7 +1400,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6
-echo "configure:1396: checking for POSIXized ISC" >&5
+echo "configure:1404: checking for POSIXized ISC" >&5
if test -d /etc/conf/kconfig.d &&
grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1
then
@@ -1414,18 +1422,6 @@ fi
case "${target}" in
-alpha-*-*) MY_TARGET=alpha ;;
-i[3456]86-*-*) MY_TARGET=i386 ;;
-sparc-*-*) MY_TARGET=sparc ;;
-tahoe-*-*) MY_TARGET=tahoe ;;
-vax-*-*) MY_TARGET=vax ;;
-ns32k-*-*) MY_TARGET=ns532;;
-*-*-*) MY_TARGET=dummy ;;
-esac
-
-
-
-case "${target}" in
*-*-bsd4.4* | *-*-netbsd* | *-*-freebsd* | *-*-openbsd*)
cat >> confdefs.h <<\EOF
#define BSD44_FORMAT 1
@@ -1435,7 +1431,7 @@ EOF
esac
echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
-echo "configure:1439: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo "configure:1435: checking whether to enable maintainer-specific portions of Makefiles" >&5
# Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
if test "${enable_maintainer_mode+set}" = set; then
enableval="$enable_maintainer_mode"
@@ -1453,19 +1449,19 @@ fi
echo $ac_n "checking for Cygwin32 environment""... $ac_c" 1>&6
-echo "configure:1457: checking for Cygwin32 environment" >&5
+echo "configure:1453: checking for Cygwin32 environment" >&5
if eval "test \"`echo '$''{'am_cv_cygwin32'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1462 "configure"
+#line 1458 "configure"
#include "confdefs.h"
int main() {
-int main () { return __CYGWIN32__; }
+return __CYGWIN32__;
; return 0; }
EOF
-if { (eval echo configure:1469: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1465: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
am_cv_cygwin32=yes
else
@@ -1481,13 +1477,44 @@ fi
echo "$ac_t""$am_cv_cygwin32" 1>&6
CYGWIN32=
test "$am_cv_cygwin32" = yes && CYGWIN32=yes
+echo $ac_n "checking for Mingw32 environment""... $ac_c" 1>&6
+echo "configure:1482: checking for Mingw32 environment" >&5
+if eval "test \"`echo '$''{'am_cv_mingw32'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1487 "configure"
+#include "confdefs.h"
+
+int main() {
+return __MINGW32__;
+; return 0; }
+EOF
+if { (eval echo configure:1494: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ am_cv_mingw32=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ am_cv_mingw32=no
+fi
+rm -f conftest*
+rm -f conftest*
+fi
+
+echo "$ac_t""$am_cv_mingw32" 1>&6
+MINGW32=
+test "$am_cv_mingw32" = yes && MINGW32=yes
+
echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
-echo "configure:1487: checking for executable suffix" >&5
+echo "configure:1513: checking for executable suffix" >&5
if eval "test \"`echo '$''{'am_cv_exeext'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
- if test "$CYGWIN32" = yes; then
+
+if test "$CYGWIN32" = yes -o "$MINGW32" = yes; then
am_cv_exeext=.exe
else
cat > am_c_test.c << 'EOF'
@@ -1530,7 +1557,7 @@ EOF
# Ultrix sh set writes to stderr and can't be redirected directly,
# and sets the high bit in the cache file unless we assign to the vars.
(set) 2>&1 |
- case `(ac_space=' '; set) 2>&1` in
+ case `(ac_space=' '; set) 2>&1 | grep ac_space` in
*ac_space=\ *)
# `set' does not quote correctly, so add quotes (double-quote substitution
# turns \\\\ into \\, and sed turns \\ into \).
@@ -1617,6 +1644,7 @@ sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
$ac_vpsub
$extrasub
+s%@SHELL@%$SHELL%g
s%@CFLAGS@%$CFLAGS%g
s%@CPPFLAGS@%$CPPFLAGS%g
s%@CXXFLAGS@%$CXXFLAGS%g
@@ -1669,7 +1697,6 @@ s%@RANLIB@%$RANLIB%g
s%@LD@%$LD%g
s%@LN_S@%$LN_S%g
s%@LIBTOOL@%$LIBTOOL%g
-s%@MY_TARGET@%$MY_TARGET%g
s%@MAINT@%$MAINT%g
s%@EXEEXT@%$EXEEXT%g
diff --git a/gprof/configure.in b/gprof/configure.in
index 7144e5d..33f6089 100644
--- a/gprof/configure.in
+++ b/gprof/configure.in
@@ -19,20 +19,6 @@ AM_PROG_INSTALL
AC_ISC_POSIX
-case "${target}" in
-alpha-*-*) MY_TARGET=alpha ;;
-changequote(,)dnl
-i[3456]86-*-*) MY_TARGET=i386 ;;
-changequote([,])dnl
-sparc-*-*) MY_TARGET=sparc ;;
-tahoe-*-*) MY_TARGET=tahoe ;;
-vax-*-*) MY_TARGET=vax ;;
-ns32k-*-*) MY_TARGET=ns532;;
-*-*-*) MY_TARGET=dummy ;;
-esac
-
-AC_SUBST(MY_TARGET)
-
dnl We need to set BSD44_FORMAT on a host which uses the additional
dnl header fields. This is an attempt to do that. I can't think of a
dnl good feature test for this.
diff --git a/gprof/core.c b/gprof/core.c
index e390b1e..11b21a6 100644
--- a/gprof/core.c
+++ b/gprof/core.c
@@ -3,19 +3,15 @@
#include "core.h"
#include "symtab.h"
-#ifndef MIN_INSN_SIZE
-/* If not defined in MACHINE_H, assume smallest instruction is 1 byte
- long. THis is safe but may be needlessly slow on machines where
- all instructions are longer. */
-#define MIN_INSN_SIZE 1
-#endif
-
bfd *core_bfd;
int core_num_syms;
asymbol **core_syms;
asection *core_text_sect;
PTR core_text_space;
+int min_insn_size;
+int offset_to_code;
+
/* For mapping symbols to specific .o files during file ordering. */
struct function_map {
char *function_name;
@@ -25,6 +21,12 @@ struct function_map {
struct function_map *symbol_map;
int symbol_map_count;
+extern void i386_find_call PARAMS ((Sym *, bfd_vma, bfd_vma));
+extern void alpha_find_call PARAMS ((Sym *, bfd_vma, bfd_vma));
+extern void vax_find_call PARAMS ((Sym *, bfd_vma, bfd_vma));
+extern void tahoe_find_call PARAMS ((Sym *, bfd_vma, bfd_vma));
+extern void sparc_find_call PARAMS ((Sym *, bfd_vma, bfd_vma));
+
static void
DEFUN (read_function_mappings, (filename), const char *filename)
{
@@ -160,6 +162,23 @@ DEFUN (core_init, (a_out_name), const char *a_out_name)
done (1);
}
+ min_insn_size = 1;
+ offset_to_code = 0;
+
+ switch (bfd_get_arch (core_bfd))
+ {
+ case bfd_arch_vax:
+ case bfd_arch_tahoe:
+ offset_to_code = 2;
+ break;
+
+ case bfd_arch_alpha:
+ min_insn_size = 4;
+ break;
+
+ default:
+ }
+
if (function_mapping_file)
read_function_mappings (function_mapping_file);
}
@@ -193,6 +212,41 @@ DEFUN (core_get_text_space, (core_bfd), bfd * core_bfd)
}
+void
+DEFUN (find_call, (parent, p_lowpc, p_highpc),
+ Sym * parent AND bfd_vma p_lowpc AND bfd_vma p_highpc)
+{
+ switch (bfd_get_arch (core_bfd))
+ {
+ case bfd_arch_i386:
+ i386_find_call (parent, p_lowpc, p_highpc);
+ break;
+
+ case bfd_arch_alpha:
+ alpha_find_call (parent, p_lowpc, p_highpc);
+ break;
+
+ case bfd_arch_vax:
+ vax_find_call (parent, p_lowpc, p_highpc);
+ break;
+
+ case bfd_arch_sparc:
+ sparc_find_call (parent, p_lowpc, p_highpc);
+ break;
+
+ case bfd_arch_tahoe:
+ tahoe_find_call (parent, p_lowpc, p_highpc);
+ break;
+
+ default:
+ fprintf (stderr, "%s: -c not supported on architecture %s\n",
+ whoami, bfd_printable_name(core_bfd));
+
+ /* Don't give the error more than once. */
+ ignore_direct_calls = FALSE;
+ }
+}
+
/*
* Return class of symbol SYM. The returned class can be any of:
* 0 -> symbol is not interesting to us
@@ -429,15 +483,8 @@ DEFUN (core_create_function_syms, (core_bfd), bfd * core_bfd)
symtab.limit->mapped = 0;
}
-#ifdef __osf__
- /*
- * Suppress symbols that are not function names. This is
- * useful to suppress code-labels and aliases.
- *
- * This is known to be useful under DEC's OSF/1. Under SunOS 4.x,
- * labels do not appear in the symbol table info, so this isn't
- * necessary.
- */
+ /* Lookup filename and line number, if we can */
+
{
const char *filename, *func_name;
@@ -446,6 +493,18 @@ DEFUN (core_create_function_syms, (core_bfd), bfd * core_bfd)
{
symtab.limit->file = source_file_lookup_path (filename);
+ /* FIXME: Checking __osf__ here does not work with a cross
+ gprof. */
+#ifdef __osf__
+ /*
+ * Suppress symbols that are not function names. This is
+ * useful to suppress code-labels and aliases.
+ *
+ * This is known to be useful under DEC's OSF/1. Under SunOS 4.x,
+ * labels do not appear in the symbol table info, so this isn't
+ * necessary.
+ */
+
if (strcmp (symtab.limit->name, func_name) != 0)
{
/*
@@ -458,9 +517,9 @@ DEFUN (core_create_function_syms, (core_bfd), bfd * core_bfd)
symtab.limit->name, func_name));
continue;
}
+#endif
}
}
-#endif
symtab.limit->is_func = TRUE;
symtab.limit->is_bb_head = TRUE;
@@ -516,10 +575,10 @@ DEFUN (core_create_line_syms, (core_bfd), bfd * core_bfd)
{
char prev_name[PATH_MAX], prev_filename[PATH_MAX];
bfd_vma vma, min_vma = ~0, max_vma = 0;
- bfd_vma offset, prev_offset, min_dist;
+ bfd_vma offset;
Sym *prev, dummy, *sentinel, *sym;
const char *filename;
- int prev_line_num, i;
+ int prev_line_num;
Sym_Table ltab;
/*
* Create symbols for functions as usual. This is necessary in
@@ -537,18 +596,13 @@ DEFUN (core_create_line_syms, (core_bfd), bfd * core_bfd)
* it is time to create a new symbol.
*
* Of course, this is rather slow and it would be better if
- * bfd would provide an iterator for enumerating all line
- * infos, but for now, we try to speed up the second pass
- * by determining what the minimum code distance between two
- * lines is.
+ * bfd would provide an iterator for enumerating all line infos
*/
prev_name[0] = '\0';
ltab.len = 0;
- min_dist = core_text_sect->_raw_size;
- prev_offset = -min_dist;
prev_filename[0] = '\0';
prev_line_num = 0;
- for (offset = 0; offset < core_text_sect->_raw_size; offset += MIN_INSN_SIZE)
+ for (offset = 0; offset < core_text_sect->_raw_size; offset += min_insn_size)
{
vma = core_text_sect->vma + offset;
if (!get_src_info (vma, &filename, &dummy.name, &dummy.line_num)
@@ -564,18 +618,10 @@ DEFUN (core_create_line_syms, (core_bfd), bfd * core_bfd)
strcpy (prev_name, dummy.name);
strcpy (prev_filename, filename);
- if (offset - prev_offset < min_dist)
- {
- min_dist = offset - prev_offset;
- }
- prev_offset = offset;
-
min_vma = MIN (vma, min_vma);
max_vma = MAX (vma, max_vma);
}
- DBG (AOUTDEBUG, printf ("[core_create_line_syms] min_dist=%lx\n", min_dist));
-
/* make room for function symbols, too: */
ltab.len += symtab.len;
ltab.base = (Sym *) xmalloc (ltab.len * sizeof (Sym));
@@ -583,8 +629,25 @@ DEFUN (core_create_line_syms, (core_bfd), bfd * core_bfd)
/* pass 2 - create symbols: */
+ /* We now set is_static as we go along, rather than by running
+ through the symbol table at the end.
+
+ The old way called symtab_finalize before the is_static pass,
+ causing a problem since symtab_finalize uses is_static as part of
+ its address conflict resolution algorithm. Since global symbols
+ were prefered over static symbols, and all line symbols were
+ global at that point, static function names that conflicted with
+ their own line numbers (static, but labeled as global) were
+ rejected in favor of the line num.
+
+ This was not the desired functionality. We always want to keep
+ our function symbols and discard any conflicting line symbols.
+ Perhaps symtab_finalize should be modified to make this
+ distinction as well, but the current fix works and the code is a
+ lot cleaner now. */
+
prev = 0;
- for (offset = 0; offset < core_text_sect->_raw_size; offset += min_dist)
+ for (offset = 0; offset < core_text_sect->_raw_size; offset += min_insn_size)
{
sym_init (ltab.limit);
if (!get_src_info (core_text_sect->vma + offset, &filename,
@@ -601,6 +664,23 @@ DEFUN (core_create_line_syms, (core_bfd), bfd * core_bfd)
ltab.limit->file = source_file_lookup_path (filename);
ltab.limit->addr = core_text_sect->vma + offset;
+
+ /* Set is_static based on the enclosing function, using either:
+ * 1) the previous symbol, if it's from the same function, or
+ * 2) a symtab lookup
+ */
+
+ if (prev && ltab.limit->file == prev->file &&
+ strcmp (ltab.limit->name, prev->name) == 0)
+ {
+ ltab.limit->is_static = prev->is_static;
+ }
+ else
+ {
+ sym = sym_lookup(&symtab, ltab.limit->addr);
+ ltab.limit->is_static = sym->is_static;
+ }
+
prev = ltab.limit;
/*
@@ -614,7 +694,7 @@ DEFUN (core_create_line_syms, (core_bfd), bfd * core_bfd)
}
DBG (AOUTDEBUG, printf ("[core_create_line_syms] %d %s 0x%lx\n",
- ltab.len, ltab.limit->name,
+ ltab.limit - ltab.base, ltab.limit->name,
ltab.limit->addr));
++ltab.limit;
}
@@ -641,8 +721,8 @@ DEFUN (core_create_line_syms, (core_bfd), bfd * core_bfd)
if (ltab.limit - ltab.base != ltab.len)
{
fprintf (stderr,
- "%s: somebody miscounted: ltab.len=%ld instead of %d\n",
- whoami, (long) (ltab.limit - ltab.base), ltab.len);
+ "%s: somebody miscounted: ltab.len=%d instead of %ld\n",
+ whoami, ltab.len, (long) (ltab.limit - ltab.base));
done (1);
}
@@ -652,21 +732,4 @@ DEFUN (core_create_line_syms, (core_bfd), bfd * core_bfd)
free (symtab.base);
symtab = ltab;
- /* now go through all core symbols and set is_static accordingly: */
-
- for (i = 0; i < core_num_syms; ++i)
- {
- if (core_sym_class (core_syms[i]) == 't')
- {
- sym = sym_lookup (&symtab, core_syms[i]->value
- + core_syms[i]->section->vma);
- do
- {
- sym++->is_static = TRUE;
- }
- while (sym->file == sym[-1].file &&
- strcmp (sym->name, sym[-1].name) == 0);
- }
- }
-
}
diff --git a/gprof/core.h b/gprof/core.h
index 81c79ad..a78b58a 100644
--- a/gprof/core.h
+++ b/gprof/core.h
@@ -9,6 +9,10 @@ extern asymbol **core_syms; /* symbol table in a.out */
extern asection *core_text_sect; /* core text section */
extern PTR core_text_space; /* text space of a.out in core */
+extern int min_insn_size; /* size of smallest instruction, in bytes */
+extern int offset_to_code; /* offset (in bytes) of code from entry
+ address of routine */
+
extern void core_init PARAMS ((const char *a_out_name));
extern void core_get_text_space PARAMS ((bfd * core_bfd));
extern void core_create_function_syms PARAMS ((bfd * core_bfd));
diff --git a/gprof/dummy.c b/gprof/dummy.c
deleted file mode 100644
index 184cec6..0000000
--- a/gprof/dummy.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include "gprof.h"
-#include "symtab.h"
-
-
-/*
- * dummy.c -- This file should be used for an unsupported processor type.
- * It does nothing, but prevents findcall() from being unresolved.
- */
-
-void
-DEFUN (find_call, (parent, p_lowpc, p_highpc),
- Sym * parent AND bfd_vma p_lowpc AND bfd_vma p_highpc)
-{
- fprintf (stderr, "%s: -c not supported on this machine architecture\n",
- whoami);
-
- /* Don't give the error more than once. */
- ignore_direct_calls = FALSE;
-}
diff --git a/gprof/dummy.h b/gprof/dummy.h
deleted file mode 100644
index 4c37c15..0000000
--- a/gprof/dummy.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*-
- * Copyright (c) 1991 The Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. 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 BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)dummy.h 5.1 (Berkeley) 4/18/91
- */
-#ifndef dummy_h
-#define dummy_h
-
-/*
- * dummy.h -- This file should be used when a processor is not yet supported.
- */
-
-/*
- * Offset (in bytes) of the code from the entry address of a routine.
- * (see hist_assign_samples()) for use and explanation.)
- */
-#define OFFSET_TO_CODE 0
-#define UNITS_TO_CODE (OFFSET_TO_CODE / sizeof(UNIT))
-
-enum opermodes
- {
- dummy
- };
-typedef enum opermodes operandenum;
-
-#endif /* dummy_h */
diff --git a/gprof/gmon.h b/gprof/gmon.h
index 019cb6c..6d0f743 100644
--- a/gprof/gmon.h
+++ b/gprof/gmon.h
@@ -37,7 +37,9 @@
struct raw_phdr
{
-#ifdef TARGET_alpha
+ /* FIXME: Checking a host compiler define means that we can't use
+ a cross gprof to the alpha. */
+#ifdef __alpha__
char low_pc[8]; /* base pc address of sample buffer */
char high_pc[8]; /* max pc address of sampled buffer */
#else
@@ -46,6 +48,8 @@ struct raw_phdr
#endif
char ncnt[4]; /* size of sample buffer (plus this header) */
+ /* FIXME: Checking host compiler defines here means that we can't
+ use a cross gprof alpha OSF. */
#if defined (__alpha__) && defined (__osf__)
/*
* DEC's OSF v3.0 uses 4 bytes of padding to bring the header to
@@ -116,7 +120,9 @@ struct tostruct
*/
struct raw_arc
{
-#ifdef TARGET_alpha
+ /* FIXME: Checking a host compiler define means that we can't use
+ a cross gprof to the alpha. */
+#ifdef __alpha__
char from_pc[8];
char self_pc[8];
char count[8];
diff --git a/gprof/gprof.c b/gprof/gprof.c
index 1af7fa1..449ab20 100644
--- a/gprof/gprof.c
+++ b/gprof/gprof.c
@@ -67,7 +67,8 @@ bfd *abfd;
*/
static char *default_excluded_list[] =
{
- "_gprof_mcount", "mcount", "_mcount", "__mcount", "__mcleanup",
+ "_gprof_mcount", "mcount", "_mcount", "__mcount", "__mcount_internal",
+ "__mcleanup",
"<locore>", "<hicore>",
0
};
diff --git a/gprof/gprof.h b/gprof/gprof.h
index 303588c..20eb108 100644
--- a/gprof/gprof.h
+++ b/gprof/gprof.h
@@ -43,27 +43,6 @@
/* AIX defines hz as a macro. */
#undef hz
-#ifdef MACHINE_H
-#include MACHINE_H
-#else
-#if vax
-#include "vax.h"
-#endif
-#if sun
-#include "sun.h"
-#endif
-#if tahoe
-#include "tahoe.h"
-#endif
-#endif
-
-#ifndef FOPEN_RB
-#define FOPEN_RB "r"
-#endif
-#ifndef FOPEN_WB
-#define FOPEN_WB "w"
-#endif
-
#ifndef PATH_MAX
#define PATH_MAX 1024
#endif
diff --git a/gprof/hertz.h b/gprof/hertz.h
index d5a23d3..2ea01ba 100644
--- a/gprof/hertz.h
+++ b/gprof/hertz.h
@@ -9,6 +9,14 @@
* Discover the tick frequency of the machine if something goes wrong,
* we return HZ_WRONG, an impossible sampling frequency.
*/
+
+/* FIXME: Checking for MACH here makes no sense when for a cross
+ gprof. */
+#ifdef MACH
+#include <machine/mach_param.h>
+#define hertz() (HZ)
+#else
extern int hertz PARAMS ((void));
+#endif
#endif /* hertz_h */
diff --git a/gprof/hist.c b/gprof/hist.c
index 2b2dceb..e87d846 100644
--- a/gprof/hist.c
+++ b/gprof/hist.c
@@ -12,6 +12,8 @@
#include "sym_ids.h"
#include "utils.h"
+#define UNITS_TO_CODE (offset_to_code / sizeof(UNIT))
+
static void scale_and_align_entries PARAMS ((void));
/* declarations of automatically generated functions to output blurbs: */
diff --git a/gprof/i386.c b/gprof/i386.c
index 01202a7..d09d34e 100644
--- a/gprof/i386.c
+++ b/gprof/i386.c
@@ -24,24 +24,23 @@
int
-DEFUN (iscall, (ip), unsigned char *ip)
+DEFUN (i386_iscall, (ip), unsigned char *ip)
{
- if (*ip == 0xeb || *ip == 0x9a)
+ if (*ip == 0xe8)
return 1;
return 0;
}
void
-find_call (parent, p_lowpc, p_highpc)
+i386_find_call (parent, p_lowpc, p_highpc)
Sym *parent;
bfd_vma p_lowpc;
bfd_vma p_highpc;
{
unsigned char *instructp;
- long length;
Sym *child;
- bfd_vma destpc;
+ bfd_vma destpc, delta;
if (core_text_space == 0)
{
@@ -57,54 +56,49 @@ find_call (parent, p_lowpc, p_highpc)
}
DBG (CALLDEBUG, printf ("[findcall] %s: 0x%lx to 0x%lx\n",
parent->name, p_lowpc, p_highpc));
- for (instructp = (unsigned char *) core_text_space + p_lowpc;
- instructp < (unsigned char *) core_text_space + p_highpc;
- instructp += length)
+
+ delta = (bfd_vma) core_text_space - core_text_sect->vma;
+
+ for (instructp = (unsigned char *) (p_lowpc + delta);
+ instructp < (unsigned char *) (p_highpc + delta);
+ instructp ++)
{
- length = 1;
- if (iscall (instructp))
+ if (i386_iscall (instructp))
{
DBG (CALLDEBUG,
- printf ("[findcall]\t0x%x:callf",
- instructp - (unsigned char *) core_text_space));
- length = 4;
+ printf ("[findcall]\t0x%x:call",
+ instructp - (unsigned char *) delta));
/*
* regular pc relative addressing
* check that this is the address of
* a function.
*/
- destpc = ((bfd_vma) instructp + 5 - (bfd_vma) core_text_space);
+
+ destpc = ((bfd_vma) bfd_get_32 (core_bfd, instructp + 1)
+ + (bfd_vma) instructp - (bfd_vma) delta + 5);
if (destpc >= s_lowpc && destpc <= s_highpc)
{
child = sym_lookup (&symtab, destpc);
- DBG (CALLDEBUG,
- printf ("[findcall]\tdestpc 0x%lx", destpc);
- printf (" child->name %s", child->name);
- printf (" child->addr 0x%lx\n", child->addr);
- );
- if (child->addr == destpc)
+ if (child && child->addr == destpc)
{
/*
* a hit
*/
+ DBG (CALLDEBUG,
+ printf ("\tdestpc 0x%lx (%s)\n", destpc, child->name));
arc_add (parent, child, (long) 0);
- length += 4; /* constant lengths */
+ instructp += 4; /* call is a 5 byte instruction */
continue;
}
- goto botched;
}
/*
* else:
- * it looked like a callf,
- * but it wasn't to anywhere.
- */
- botched:
- /*
- * something funny going on.
+ * it looked like a callf, but it:
+ * a) wasn't actually a callf, or
+ * b) didn't point to a known function in the symtab, or
+ * c) something funny is going on.
*/
- DBG (CALLDEBUG, printf ("[findcall]\tbut it's a botch\n"));
- length = 1;
- continue;
+ DBG (CALLDEBUG, printf ("\tbut it's a botch\n"));
}
}
}
diff --git a/gprof/i386.h b/gprof/i386.h
deleted file mode 100644
index f85f55c..0000000
--- a/gprof/i386.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 1983 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.
- *
- * @(#)tahoe.h 1.4 (Berkeley) 6/1/90
- */
-
-/*
- * Right now, this does very little
- */
-
- /*
- * opcode of the `callf' instruction
- */
- /*
- * offset (in bytes) of the code from the entry address of a routine.
- * (see asgnsamples for use and explanation.)
- */
-#define OFFSET_TO_CODE 0
-#define UNITS_TO_CODE (OFFSET_TO_CODE / sizeof(UNIT))
-
-#ifdef __MSDOS__
-#define FOPEN_RB "rb"
-#endif
diff --git a/gprof/ns532.c b/gprof/ns532.c
deleted file mode 100644
index c68fae4..0000000
--- a/gprof/ns532.c
+++ /dev/null
@@ -1,17 +0,0 @@
-#include "gprof.h"
-#include "symtab.h"
-
-/*
- * dummy.c -- This file should be used for an unsupported processor type.
- * It does nothing, but prevents findcall() from being unresolved.
- */
-
-void
-find_call (parent, p_lowpc, p_highpc)
- Sym *parent;
- bfd_vma p_lowpc;
- bfd_vma p_highpc;
-{
- fprintf (stderr, "%s: -c supported on this machine architecture\n",
- whoami);
-}
diff --git a/gprof/ns532.h b/gprof/ns532.h
deleted file mode 100644
index 2fa2233..0000000
--- a/gprof/ns532.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*-
- * Copyright (c) 1991 The Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. 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 BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)dummy.h 5.1 (Berkeley) 4/18/91
- */
-
-/*
- * offset (in bytes) of the code from the entry address of a routine.
- * (see asgnsamples for use and explanation.)
- */
-#ifdef MACH
-#include <machine/mach_param.h>
-#define hertz() (HZ)
-#endif
-#define OFFSET_OF_CODE 0
-#define UNITS_TO_CODE (OFFSET_OF_CODE / sizeof(UNIT))
-
-enum opermodes
- {
- dummy
- };
-typedef enum opermodes operandenum;
diff --git a/gprof/sparc.c b/gprof/sparc.c
index 6316bff..77457ac 100644
--- a/gprof/sparc.c
+++ b/gprof/sparc.c
@@ -22,9 +22,13 @@
#include "hist.h"
#include "symtab.h"
+ /*
+ * opcode of the `callf' instruction
+ */
+#define CALL (0xc0000000)
void
-find_call (parent, p_lowpc, p_highpc)
+sparc_find_call (parent, p_lowpc, p_highpc)
Sym *parent;
bfd_vma p_lowpc;
bfd_vma p_highpc;
diff --git a/gprof/sparc.h b/gprof/sparc.h
deleted file mode 100644
index 48e5d23..0000000
--- a/gprof/sparc.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (c) 1983 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.
- *
- * @(#)tahoe.h 1.4 (Berkeley) 6/1/90
- */
-
- /*
- * opcode of the `callf' instruction
- */
-#define CALL (0xc0000000)
- /*
- * offset (in bytes) of the code from the entry address of a routine.
- * (see asgnsamples for use and explanation.)
- */
-#define OFFSET_TO_CODE 0
-#define UNITS_TO_CODE (OFFSET_TO_CODE / sizeof(UNIT))
diff --git a/gprof/tahoe.c b/gprof/tahoe.c
index 967ea01..a9585df 100644
--- a/gprof/tahoe.c
+++ b/gprof/tahoe.c
@@ -17,7 +17,29 @@
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
#include "gprof.h"
-#include "time_host.h"
+#include "cg_arcs.h"
+#include "core.h"
+#include "hist.h"
+#include "symtab.h"
+
+ /*
+ * opcode of the `callf' instruction
+ */
+#define CALLF 0xfe
+
+ /*
+ * register for pc relative addressing
+ */
+#define PC 0xf
+
+enum tahoe_opermodes
+ {
+ literal, indexed, reg, regdef, autodec, autoinc, autoincdef,
+ bytedisp, bytedispdef, worddisp, worddispdef, longdisp, longdispdef,
+ immediate, absolute, byterel, bytereldef, wordrel, wordreldef,
+ longrel, longreldef
+ };
+typedef enum tahoe_opermodes tahoe_operandenum;
/*
* A symbol to be the child of indirect callf:
@@ -25,8 +47,8 @@
Sym indirectchild;
-operandenum
-operandmode (modep)
+tahoe_operandenum
+tahoe_operandmode (modep)
unsigned char *modep;
{
long usesreg = ((long) *modep) & 0xf;
@@ -64,11 +86,12 @@ operandmode (modep)
return usesreg != PC ? longdispdef : longreldef;
}
/* NOTREACHED */
+ abort ();
}
char *
-operandname (mode)
- operandenum mode;
+tahoe_operandname (mode)
+ tahoe_operandenum mode;
{
switch (mode)
@@ -117,14 +140,15 @@ operandname (mode)
return "long relative deferred";
}
/* NOTREACHED */
+ abort ();
}
long
-operandlength (modep)
+tahoe_operandlength (modep)
unsigned char *modep;
{
- switch (operandmode (modep))
+ switch (tahoe_operandmode (modep))
{
case literal:
case reg:
@@ -151,16 +175,17 @@ operandlength (modep)
case longreldef:
return 5;
case indexed:
- return 1 + operandlength (modep + 1);
+ return 1 + tahoe_operandlength (modep + 1);
}
/* NOTREACHED */
+ abort ();
}
bfd_vma
-reladdr (modep)
+tahoe_reladdr (modep)
char *modep;
{
- operandenum mode = operandmode (modep);
+ tahoe_operandenum mode = tahoe_operandmode (modep);
char *cp;
short *sp;
long *lp;
@@ -187,7 +212,8 @@ reladdr (modep)
}
}
-find_call (parent, p_lowpc, p_highpc)
+void
+tahoe_find_call (parent, p_lowpc, p_highpc)
Sym *parent;
bfd_vma p_lowpc;
bfd_vma p_highpc;
@@ -195,8 +221,8 @@ find_call (parent, p_lowpc, p_highpc)
unsigned char *instructp;
long length;
Sym *child;
- operandenum mode;
- operandenum firstmode;
+ tahoe_operandenum mode;
+ tahoe_operandenum firstmode;
bfd_vma destpc;
static bool inited = FALSE;
@@ -208,7 +234,7 @@ find_call (parent, p_lowpc, p_highpc)
indirectchild.cg.cyc.head = &indirectchild;
}
- if (textspace == 0)
+ if (core_text_space == 0)
{
return;
}
@@ -220,10 +246,10 @@ find_call (parent, p_lowpc, p_highpc)
{
p_highpc = s_highpc;
}
- DBG (CALLDEBUG, printf ("[findcall] %s: 0x%x to 0x%x\n",
+ DBG (CALLDEBUG, printf ("[findcall] %s: 0x%lx to 0x%lx\n",
parent->name, p_lowpc, p_highpc));
- for (instructp = textspace + p_lowpc;
- instructp < textspace + p_highpc;
+ for (instructp = (unsigned char *) core_text_space + p_lowpc;
+ instructp < (unsigned char *) core_text_space + p_highpc;
instructp += length)
{
length = 1;
@@ -234,8 +260,8 @@ find_call (parent, p_lowpc, p_highpc)
* skip the count of the number of arguments.
*/
DBG (CALLDEBUG, printf ("[findcall]\t0x%x:callf",
- instructp - textspace));
- firstmode = operandmode (instructp + length);
+ instructp - (unsigned char *) core_text_space));
+ firstmode = tahoe_operandmode (instructp + length);
switch (firstmode)
{
case literal:
@@ -244,11 +270,11 @@ find_call (parent, p_lowpc, p_highpc)
default:
goto botched;
}
- length += operandlength (instructp + length);
- mode = operandmode (instructp + length);
+ length += tahoe_operandlength (instructp + length);
+ mode = tahoe_operandmode (instructp + length);
DBG (CALLDEBUG,
- printf ("\tfirst operand is %s", operandname (firstmode));
- printf ("\tsecond operand is %s\n", operandname (mode));
+ printf ("\tfirst operand is %s", tahoe_operandname (firstmode));
+ printf ("\tsecond operand is %s\n", tahoe_operandname (mode));
);
switch (mode)
{
@@ -268,7 +294,7 @@ find_call (parent, p_lowpc, p_highpc)
* e.g. arrays of pointers to functions???]
*/
arc_add (parent, &indirectchild, (long) 0);
- length += operandlength (instructp + length);
+ length += tahoe_operandlength (instructp + length);
continue;
case byterel:
case wordrel:
@@ -278,15 +304,15 @@ find_call (parent, p_lowpc, p_highpc)
* check that this is the address of
* a function.
*/
- destpc = reladdr (instructp + length)
- - (bfd_vma) textspace;
+ destpc = tahoe_reladdr (instructp + length)
+ - (bfd_vma) core_text_space;
if (destpc >= s_lowpc && destpc <= s_highpc)
{
- child = sym_lookup (destpc);
+ child = sym_lookup (&symtab, destpc);
DBG (CALLDEBUG,
- printf ("[findcall]\tdestpc 0x%x", destpc);
+ printf ("[findcall]\tdestpc 0x%lx", destpc);
printf (" child->name %s", child->name);
- printf (" child->addr 0x%x\n", child->addr);
+ printf (" child->addr 0x%lx\n", child->addr);
);
if (child->addr == destpc)
{
@@ -294,7 +320,7 @@ find_call (parent, p_lowpc, p_highpc)
* a hit
*/
arc_add (parent, child, (long) 0);
- length += operandlength (instructp + length);
+ length += tahoe_operandlength (instructp + length);
continue;
}
goto botched;
diff --git a/gprof/tahoe.h b/gprof/tahoe.h
deleted file mode 100644
index 4d153a4..0000000
--- a/gprof/tahoe.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 1983 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.
- *
- * @(#)tahoe.h 1.4 (Berkeley) 6/1/90
- */
-
- /*
- * opcode of the `callf' instruction
- */
-#define CALLF 0xfe
-
- /*
- * offset (in bytes) of the code from the entry address of a routine.
- * (see asgnsamples for use and explanation.)
- */
-#define OFFSET_TO_CODE 2
-#define UNITS_TO_CODE (OFFSET_TO_CODE / sizeof(UNIT))
-
- /*
- * register for pc relative addressing
- */
-#define PC 0xf
-
-enum opermodes
- {
- literal, indexed, reg, regdef, autodec, autoinc, autoincdef,
- bytedisp, bytedispdef, worddisp, worddispdef, longdisp, longdispdef,
- immediate, absolute, byterel, bytereldef, wordrel, wordreldef,
- longrel, longreldef
- };
-typedef enum opermodes operandenum;
diff --git a/gprof/vax.c b/gprof/vax.c
index 6a1034c..020409c 100644
--- a/gprof/vax.c
+++ b/gprof/vax.c
@@ -22,6 +22,31 @@
#include "hist.h"
#include "symtab.h"
+ /*
+ * opcode of the `calls' instruction
+ */
+#define CALLS 0xfb
+
+ /*
+ * register for pc relative addressing
+ */
+#define PC 0xf
+
+enum opermodes
+ {
+ literal, indexed, reg, regdef, autodec, autoinc, autoincdef,
+ bytedisp, bytedispdef, worddisp, worddispdef, longdisp, longdispdef,
+ immediate, absolute, byterel, bytereldef, wordrel, wordreldef,
+ longrel, longreldef
+ };
+typedef enum opermodes operandenum;
+
+struct modebyte
+ {
+ unsigned int regfield:4;
+ unsigned int modefield:4;
+ };
+
/*
* A symbol to be the child of indirect calls:
*/
@@ -29,7 +54,7 @@ Sym indirectchild;
static operandenum
-operandmode (modep)
+vax_operandmode (modep)
struct modebyte *modep;
{
long usesreg = modep->regfield;
@@ -67,10 +92,11 @@ operandmode (modep)
return usesreg != PC ? longdispdef : longreldef;
}
/* NOTREACHED */
+ abort ();
}
static char *
-operandname (mode)
+vax_operandname (mode)
operandenum mode;
{
@@ -120,14 +146,15 @@ operandname (mode)
return "long relative deferred";
}
/* NOTREACHED */
+ abort ();
}
static long
-operandlength (modep)
+vax_operandlength (modep)
struct modebyte *modep;
{
- switch (operandmode (modep))
+ switch (vax_operandmode (modep))
{
case literal:
case reg:
@@ -154,16 +181,17 @@ operandlength (modep)
case longreldef:
return 5;
case indexed:
- return 1 + operandlength ((struct modebyte *) ((char *) modep) + 1);
+ return 1 + vax_operandlength ((struct modebyte *) ((char *) modep) + 1);
}
/* NOTREACHED */
+ abort ();
}
static bfd_vma
-reladdr (modep)
+vax_reladdr (modep)
struct modebyte *modep;
{
- operandenum mode = operandmode (modep);
+ operandenum mode = vax_operandmode (modep);
char *cp;
short *sp;
long *lp;
@@ -188,7 +216,7 @@ reladdr (modep)
void
-find_call (parent, p_lowpc, p_highpc)
+vax_find_call (parent, p_lowpc, p_highpc)
Sym *parent;
bfd_vma p_lowpc;
bfd_vma p_highpc;
@@ -237,7 +265,7 @@ find_call (parent, p_lowpc, p_highpc)
DBG (CALLDEBUG,
printf ("[findcall]\t0x%x:calls",
instructp - (unsigned char *) core_text_space));
- firstmode = operandmode ((struct modebyte *) (instructp + length));
+ firstmode = vax_operandmode ((struct modebyte *) (instructp + length));
switch (firstmode)
{
case literal:
@@ -246,11 +274,11 @@ find_call (parent, p_lowpc, p_highpc)
default:
goto botched;
}
- length += operandlength ((struct modebyte *) (instructp + length));
- mode = operandmode ((struct modebyte *) (instructp + length));
+ length += vax_operandlength ((struct modebyte *) (instructp + length));
+ mode = vax_operandmode ((struct modebyte *) (instructp + length));
DBG (CALLDEBUG,
- printf ("\tfirst operand is %s", operandname (firstmode));
- printf ("\tsecond operand is %s\n", operandname (mode)));
+ printf ("\tfirst operand is %s", vax_operandname (firstmode));
+ printf ("\tsecond operand is %s\n", vax_operandname (mode)));
switch (mode)
{
case regdef:
@@ -269,7 +297,7 @@ find_call (parent, p_lowpc, p_highpc)
* e.g. arrays of pointers to functions???]
*/
arc_add (parent, &indirectchild, (long) 0);
- length += operandlength (
+ length += vax_operandlength (
(struct modebyte *) (instructp + length));
continue;
case byterel:
@@ -280,7 +308,7 @@ find_call (parent, p_lowpc, p_highpc)
* check that this is the address of
* a function.
*/
- destpc = reladdr ((struct modebyte *) (instructp + length))
+ destpc = vax_reladdr ((struct modebyte *) (instructp + length))
- (bfd_vma) core_text_space;
if (destpc >= s_lowpc && destpc <= s_highpc)
{
@@ -296,8 +324,8 @@ find_call (parent, p_lowpc, p_highpc)
* a hit
*/
arc_add (parent, child, (long) 0);
- length += operandlength ((struct modebyte *)
- (instructp + length));
+ length += vax_operandlength ((struct modebyte *)
+ (instructp + length));
continue;
}
goto botched;
diff --git a/gprof/vax.h b/gprof/vax.h
deleted file mode 100644
index 69ec9c2..0000000
--- a/gprof/vax.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 1983 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.
- *
- * @(#)vax.h 5.4 (Berkeley) 6/1/90
- */
-
- /*
- * opcode of the `calls' instruction
- */
-#define CALLS 0xfb
-
- /*
- * offset (in bytes) of the code from the entry address of a routine.
- * (see asgnsamples for use and explanation.)
- */
-#define OFFSET_TO_CODE 2
-#define UNITS_TO_CODE (OFFSET_TO_CODE / sizeof(UNIT))
-
- /*
- * register for pc relative addressing
- */
-#define PC 0xf
-
-enum opermodes
- {
- literal, indexed, reg, regdef, autodec, autoinc, autoincdef,
- bytedisp, bytedispdef, worddisp, worddispdef, longdisp, longdispdef,
- immediate, absolute, byterel, bytereldef, wordrel, wordreldef,
- longrel, longreldef
- };
-typedef enum opermodes operandenum;
-
-struct modebyte
- {
- unsigned int regfield:4;
- unsigned int modefield:4;
- };