summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile6
-rw-r--r--debian/config1
-rw-r--r--docs/Glibc_vs_uClibc_Differences.txt31
-rw-r--r--extra/Configs/Config.frv.default1
-rw-r--r--extra/Configs/Config.in37
-rw-r--r--include/sys/gmon.h201
-rw-r--r--include/sys/gmon_out.h80
-rw-r--r--libc/sysdeps/linux/alpha/__longjmp.S9
-rw-r--r--libc/sysdeps/linux/alpha/bits/machine-gmon.h26
-rw-r--r--libc/sysdeps/linux/alpha/brk.S6
-rw-r--r--libc/sysdeps/linux/alpha/clone.S11
-rw-r--r--libc/sysdeps/linux/alpha/divrem.h31
-rw-r--r--libc/sysdeps/linux/alpha/setjmp.S6
-rw-r--r--libc/sysdeps/linux/arm/Makefile8
-rw-r--r--libc/sysdeps/linux/arm/bits/machine-gmon.h67
-rw-r--r--libc/sysdeps/linux/arm/crt0.S7
-rw-r--r--libc/sysdeps/linux/common/Makefile3
-rw-r--r--libc/sysdeps/linux/common/bits/dlfcn.h22
-rw-r--r--libc/sysdeps/linux/common/bits/machine-gmon.h58
-rw-r--r--libc/sysdeps/linux/common/gmon-start.c58
-rw-r--r--libc/sysdeps/linux/common/gmon.c640
-rw-r--r--libc/sysdeps/linux/cris/bits/machine-gmon.h28
-rw-r--r--libc/sysdeps/linux/cris/sysdep.h24
-rw-r--r--libc/sysdeps/linux/frv/Makefile12
-rw-r--r--libc/sysdeps/linux/frv/crt0.S6
-rw-r--r--libc/sysdeps/linux/i386/Makefile11
-rw-r--r--libc/sysdeps/linux/i386/bits/machine-gmon.h41
-rw-r--r--libc/sysdeps/linux/i386/crt0.S6
-rw-r--r--libc/sysdeps/linux/i386/mcount.S54
-rw-r--r--libc/sysdeps/linux/mips/bits/dlfcn.h22
-rw-r--r--libc/sysdeps/linux/mips/bits/machine-gmon.h73
-rw-r--r--libc/sysdeps/linux/mips/clone.S6
-rw-r--r--libc/sysdeps/linux/mips/pipe.S7
-rw-r--r--libc/sysdeps/linux/powerpc/Makefile11
-rw-r--r--libc/sysdeps/linux/powerpc/bits/machine-gmon.h31
-rw-r--r--libc/sysdeps/linux/powerpc/crt0.S6
-rw-r--r--libc/sysdeps/linux/powerpc/mcount.S100
-rw-r--r--libc/sysdeps/linux/sh/Makefile8
-rw-r--r--libc/sysdeps/linux/sh/bits/machine-gmon.h83
-rw-r--r--libc/sysdeps/linux/sh/crt0.S6
40 files changed, 48 insertions, 1796 deletions
diff --git a/Makefile b/Makefile
index 670fb548d..caa01b32e 100644
--- a/Makefile
+++ b/Makefile
@@ -344,6 +344,12 @@ allyesconfig: extra/config/conf
$(RM) -r include/bits
$(INSTALL) -d include/bits
@./extra/config/conf -y extra/Configs/Config.in
+ sed -i -e "s/^DODEBUG=.*/# DODEBUG is not set/" .config
+ sed -i -e "s/^DOASSERTS=.*/# DOASSERTS is not set/" .config
+ sed -i -e "s/^SUPPORT_LD_DEBUG_EARLY=.*/# SUPPORT_LD_DEBUG_EARLY is not set/" .config
+ sed -i -e "s/^SUPPORT_LD_DEBUG=.*/# SUPPORT_LD_DEBUG is not set/" .config
+ sed -i -e "s/^UCLIBC_MJN3_ONLY=.*/# UCLIBC_MJN3_ONLY is not set/" .config
+ @./extra/config/conf -o extra/Configs/Config.in
allnoconfig: extra/config/conf
$(RM) -r include/bits
diff --git a/debian/config b/debian/config
index f7f7fcf5e..5bbd52996 100644
--- a/debian/config
+++ b/debian/config
@@ -44,7 +44,6 @@ BUILD_UCLIBC_LDSO=y
LDSO_LDD_SUPPORT=y
UCLIBC_CTOR_DTOR=y
# UCLIBC_PROPOLICE is not set
-# UCLIBC_PROFILING is not set
# HAS_NO_THREADS is not set
UCLIBC_HAS_THREADS=y
PTHREADS_DEBUG_SUPPORT=y
diff --git a/docs/Glibc_vs_uClibc_Differences.txt b/docs/Glibc_vs_uClibc_Differences.txt
index 0b78bf970..1983f45ba 100644
--- a/docs/Glibc_vs_uClibc_Differences.txt
+++ b/docs/Glibc_vs_uClibc_Differences.txt
@@ -175,3 +175,34 @@ glibc bugs that Ulrich Drepper has refused to acknowledge or comment on
and explicit UNDEFINED rules.
More to follow as I think of it...
+
+
+
+
+Profiling:
+-------------------------------------------------------------------
+
+uClibc no longer supports 'gcc -fprofile-arcs -pg' style profiling, which
+causes your application to generate a 'gmon.out' file that can then be analyzed
+by 'gprof'. Not only does this require explicit extra support in uClibc, it
+requires that you rebuild everything with profiling support. There is both a
+size and performance penalty to profiling your applications this way, as well
+as Heisenberg effects, where the act of measuring changes what is measured.
+
+These exist a number of less invasive alternatives that do not require your to
+specially instrument your application, and recompile and relink everything.
+
+Many people have had good results using the combination of Valgrind
+to generate profiling information and KCachegrind for analysis:
+ http://developer.kde.org/~sewardj/
+ http://kcachegrind.sourceforge.net/
+
+The OProfile system-wide profiler is another alternative:
+ http://oprofile.sourceforge.net/
+
+Prospect is another alternative based on OProfile:
+ http://prospect.sourceforge.net/
+
+And the Linux Trace Toolkit (LTT) is also a fine tool:
+ http://www.opersys.com/LTT/
+
diff --git a/extra/Configs/Config.frv.default b/extra/Configs/Config.frv.default
index eba75fe70..58eda348d 100644
--- a/extra/Configs/Config.frv.default
+++ b/extra/Configs/Config.frv.default
@@ -50,7 +50,6 @@ UCLIBC_PIE_SUPPORT=y
LDSO_LDD_SUPPORT=y
UCLIBC_CTOR_DTOR=y
# UCLIBC_PROPOLICE is not set
-# UCLIBC_PROFILING is not set
# HAS_NO_THREADS is not set
UCLIBC_HAS_THREADS=y
PTHREADS_DEBUG_SUPPORT=y
diff --git a/extra/Configs/Config.in b/extra/Configs/Config.in
index b1624dafd..be80a3a7d 100644
--- a/extra/Configs/Config.in
+++ b/extra/Configs/Config.in
@@ -251,43 +251,6 @@ config UCLIBC_PROPOLICE
gcc version, were __guard and __stack_smash_handler are removed from libgcc.
Most people will answer N.
-config UCLIBC_PROFILING
- bool "Support gprof profiling"
- default y
- help
- If you wish to build uClibc with support for application profiling
- using the gprof tool, then you should enable this feature. Then in
- addition to building uClibc with profiling support, you will also
- need to recompile all your shared libraries with the profiling
- enabled version of uClibc. To add profiling support to your
- applications, you must compile things using the gcc options
- "-fprofile-arcs -pg". Then when you run your applications, a
- gmon.out file will be generated which can then be analyzed by
- 'gprof'.
-
- These exist a number of less invasive alternatives that do not
- require your to specially instrument your application, and recompile
- and relink everything.
-
- Many people have had good results using the combination of Valgrind
- to generate profiling information and KCachegrind for analysis:
- http://developer.kde.org/~sewardj/
- http://kcachegrind.sourceforge.net/
-
- The OProfile system-wide profiler is another alternative:
- http://oprofile.sourceforge.net/
-
- Prospect is another alternative based on OProfile:
- http://prospect.sourceforge.net/
-
- And the Linux Trace Toolkit (LTT) is also a fine tool:
- http://www.opersys.com/LTT/
-
- If none of these tools do what you need, you can of course enable
- this option, rebuild everything, and use 'gprof'. There is both a
- size and performance penalty to profiling your applications this way,
- so most people should answer N.
-
config HAS_NO_THREADS
bool
default n
diff --git a/include/sys/gmon.h b/include/sys/gmon.h
deleted file mode 100644
index f29b410d3..000000000
--- a/include/sys/gmon.h
+++ /dev/null
@@ -1,201 +0,0 @@
-/*-
- * Copyright (c) 1982, 1986, 1992, 1993
- * 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.
- * 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.
- *
- * @(#)gmon.h 8.2 (Berkeley) 1/4/94
- */
-
-#ifndef _SYS_GMON_H
-#define _SYS_GMON_H 1
-
-#include <features.h>
-
-#include <sys/types.h>
-
-/*
- * See gmon_out.h for gmon.out format.
- */
-
-/* structure emitted by "gcc -a". This must match struct bb in
- gcc/libgcc2.c. It is OK for gcc to declare a longer structure as
- long as the members below are present. */
-struct __bb
-{
- long zero_word;
- const char *filename;
- long *counts;
- long ncounts;
- struct __bb *next;
- const unsigned long *addresses;
-};
-
-extern struct __bb *__bb_head;
-
-/*
- * histogram counters are unsigned shorts (according to the kernel).
- */
-#define HISTCOUNTER unsigned short
-
-/*
- * fraction of text space to allocate for histogram counters here, 1/2
- */
-#define HISTFRACTION 2
-
-/*
- * Fraction of text space to allocate for from hash buckets.
- * The value of HASHFRACTION is based on the minimum number of bytes
- * of separation between two subroutine call points in the object code.
- * Given MIN_SUBR_SEPARATION bytes of separation the value of
- * HASHFRACTION is calculated as:
- *
- * HASHFRACTION = MIN_SUBR_SEPARATION / (2 * sizeof(short) - 1);
- *
- * For example, on the VAX, the shortest two call sequence is:
- *
- * calls $0,(r0)
- * calls $0,(r0)
- *
- * which is separated by only three bytes, thus HASHFRACTION is
- * calculated as:
- *
- * HASHFRACTION = 3 / (2 * 2 - 1) = 1
- *
- * Note that the division above rounds down, thus if MIN_SUBR_FRACTION
- * is less than three, this algorithm will not work!
- *
- * In practice, however, call instructions are rarely at a minimal
- * distance. Hence, we will define HASHFRACTION to be 2 across all
- * architectures. This saves a reasonable amount of space for
- * profiling data structures without (in practice) sacrificing
- * any granularity.
- */
-#define HASHFRACTION 2
-
-/*
- * Percent of text space to allocate for tostructs.
- * This is a heuristic; we will fail with a warning when profiling programs
- * with a very large number of very small functions, but that's
- * normally OK.
- * 2 is probably still a good value for normal programs.
- * Profiling a test case with 64000 small functions will work if
- * you raise this value to 3 and link statically (which bloats the
- * text size, thus raising the number of arcs expected by the heuristic).
- */
-#define ARCDENSITY 3
-
-/*
- * Always allocate at least this many tostructs. This
- * hides the inadequacy of the ARCDENSITY heuristic, at least
- * for small programs.
- */
-#define MINARCS 50
-
-/*
- * The type used to represent indices into gmonparam.tos[].
- */
-#define ARCINDEX u_long
-
-/*
- * Maximum number of arcs we want to allow.
- * Used to be max representable value of ARCINDEX minus 2, but now
- * that ARCINDEX is a long, that's too large; we don't really want
- * to allow a 48 gigabyte table.
- * The old value of 1<<16 wasn't high enough in practice for large C++
- * programs; will 1<<20 be adequate for long? FIXME
- */
-#define MAXARCS (1 << 20)
-
-struct tostruct {
- u_long selfpc;
- long count;
- ARCINDEX link;
-};
-
-/*
- * a raw arc, with pointers to the calling site and
- * the called site and a count.
- */
-struct rawarc {
- u_long raw_frompc;
- u_long raw_selfpc;
- long raw_count;
-};
-
-/*
- * general rounding functions.
- */
-#define ROUNDDOWN(x,y) (((x)/(y))*(y))
-#define ROUNDUP(x,y) ((((x)+(y)-1)/(y))*(y))
-
-/*
- * The profiling data structures are housed in this structure.
- */
-struct gmonparam {
- long int state;
- u_short *kcount;
- u_long kcountsize;
- ARCINDEX *froms;
- u_long fromssize;
- struct tostruct *tos;
- u_long tossize;
- ARCINDEX tolimit;
- u_long lowpc;
- u_long highpc;
- u_long textsize;
- u_long hashfraction;
- long log_hashfraction;
-};
-
-/*
- * Possible states of profiling.
- */
-#define GMON_PROF_ON 0
-#define GMON_PROF_BUSY 1
-#define GMON_PROF_ERROR 2
-#define GMON_PROF_OFF 3
-
-/*
- * Sysctl definitions for extracting profiling information from the kernel.
- */
-#define GPROF_STATE 0 /* int: profiling enabling variable */
-#define GPROF_COUNT 1 /* struct: profile tick count buffer */
-#define GPROF_FROMS 2 /* struct: from location hash bucket */
-#define GPROF_TOS 3 /* struct: destination/count structure */
-#define GPROF_GMONPARAM 4 /* struct: profiling parameters (see above) */
-
-__BEGIN_DECLS
-
-/* Set up data structures and start profiling. */
-extern void __monstartup (u_long __lowpc, u_long __highpc) __THROW;
-extern void monstartup (u_long __lowpc, u_long __highpc) __THROW;
-
-/* Clean up profiling and write out gmon.out. */
-extern void _mcleanup (void) __THROW;
-
-__END_DECLS
-
-#endif /* sys/gmon.h */
diff --git a/include/sys/gmon_out.h b/include/sys/gmon_out.h
deleted file mode 100644
index 6fa09e864..000000000
--- a/include/sys/gmon_out.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by David Mosberger <davidm@cs.arizona.edu>.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
-
-/* This file specifies the format of gmon.out files. It should have
- as few external dependencies as possible as it is going to be included
- in many different programs. That is, minimize the number of #include's.
-
- A gmon.out file consists of a header (defined by gmon_hdr) followed by
- a sequence of records. Each record starts with a one-byte tag
- identifying the type of records, followed by records specific data. */
-
-#ifndef _SYS_GMON_OUT_H
-#define _SYS_GMON_OUT_H 1
-
-#include <features.h>
-
-#define GMON_MAGIC "gmon" /* magic cookie */
-#define GMON_VERSION 1 /* version number */
-
-/* For profiling shared object we need a new format. */
-#define GMON_SHOBJ_VERSION 0x1ffff
-
-__BEGIN_DECLS
-
-/*
- * Raw header as it appears on file (without padding). This header
- * always comes first in gmon.out and is then followed by a series
- * records defined below.
- */
-struct gmon_hdr
- {
- char cookie[4];
- char version[4];
- char spare[3 * 4];
- };
-
-/* types of records in this file: */
-typedef enum
- {
- GMON_TAG_TIME_HIST = 0,
- GMON_TAG_CG_ARC = 1,
- GMON_TAG_BB_COUNT = 2
- } GMON_Record_Tag;
-
-struct gmon_hist_hdr
- {
- char low_pc[sizeof (char *)]; /* base pc address of sample buffer */
- char high_pc[sizeof (char *)]; /* max pc address of sampled buffer */
- char hist_size[4]; /* size of sample buffer */
- char prof_rate[4]; /* profiling clock rate */
- char dimen[15]; /* phys. dim., usually "seconds" */
- char dimen_abbrev; /* usually 's' for "seconds" */
- };
-
-struct gmon_cg_arc_record
- {
- char from_pc[sizeof (char *)]; /* address within caller's body */
- char self_pc[sizeof (char *)]; /* address within callee's body */
- char count[4]; /* number of arc traversals */
- };
-
-__END_DECLS
-
-#endif /* sys/gmon_out.h */
diff --git a/libc/sysdeps/linux/alpha/__longjmp.S b/libc/sysdeps/linux/alpha/__longjmp.S
index 2db4e22e9..b78489f53 100644
--- a/libc/sysdeps/linux/alpha/__longjmp.S
+++ b/libc/sysdeps/linux/alpha/__longjmp.S
@@ -29,16 +29,7 @@
__longjmp:
.frame $30 , 0, $26
-#ifdef PROF
- ldgp gp, 0(pv)
- .set noat
- lda AT, _mcount
- jsr AT, (AT), _mcount
- .set at
- .prologue 1
-#else
.prologue 0
-#endif
mov $17, $0
ldq $9, JB_S0*8(a0)
diff --git a/libc/sysdeps/linux/alpha/bits/machine-gmon.h b/libc/sysdeps/linux/alpha/bits/machine-gmon.h
deleted file mode 100644
index 5f5522c0b..000000000
--- a/libc/sysdeps/linux/alpha/bits/machine-gmon.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Machine-specific calling sequence for `mcount' profiling function. alpha
- Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
-
-#define _MCOUNT_DECL(from, self) \
- void __mcount (u_long from, u_long self)
-
-/* Call __mcount with our the return PC for our caller, and the return
- PC our caller will return to. Empty since we use an assembly stub
- instead. */
-#define MCOUNT
diff --git a/libc/sysdeps/linux/alpha/brk.S b/libc/sysdeps/linux/alpha/brk.S
index 8c70a0ce5..4e15518d2 100644
--- a/libc/sysdeps/linux/alpha/brk.S
+++ b/libc/sysdeps/linux/alpha/brk.S
@@ -46,12 +46,6 @@ __brk:
.frame $30 , 8 , $26
ldgp $29, 0($27)
subq $30, 8, $30
-#ifdef PROF
- .set noat
- lda AT, _mcount
- jsr AT, (AT), _mcount
- .set at
-#endif
.prologue 1
/* Save the requested brk across the system call. */
diff --git a/libc/sysdeps/linux/alpha/clone.S b/libc/sysdeps/linux/alpha/clone.S
index b17a5ec68..396816184 100644
--- a/libc/sysdeps/linux/alpha/clone.S
+++ b/libc/sysdeps/linux/alpha/clone.S
@@ -44,16 +44,7 @@
__clone:
.frame $30 , 0, $26
-#ifdef PROF
- ldgp gp,0(pv)
- .set noat
- lda AT, _mcount
- jsr AT, (AT), _mcount
- .set at
- .prologue 1
-#else
.prologue 0
-#endif
/* Sanity check arguments. */
ldiq v0,EINVAL
@@ -78,10 +69,8 @@ __clone:
/* Something bad happened -- no child created */
$error:
-#ifndef PROF
br gp,1f
1: ldgp gp,0(gp)
-#endif
jmp zero,__syscall_error
.end __clone
diff --git a/libc/sysdeps/linux/alpha/divrem.h b/libc/sysdeps/linux/alpha/divrem.h
index d22759e40..ca3db4b49 100644
--- a/libc/sysdeps/linux/alpha/divrem.h
+++ b/libc/sysdeps/linux/alpha/divrem.h
@@ -130,22 +130,6 @@
UFUNC_NAME:
lda sp, -STACK(sp)
.frame sp, STACK, retaddr, 0
-#ifdef PROF
- stq ra, 0(sp)
- stq pv, 8(sp)
- stq gp, 16(sp)
-
- br AT, 1f
-1: ldgp gp, 0(AT)
-
- mov retaddr, ra
- lda AT, _mcount
- jsr AT, (AT), _mcount
-
- ldq ra, 0(sp)
- ldq pv, 8(sp)
- ldq gp, 16(sp)
-#endif
.prologue 0
$udiv:
@@ -216,21 +200,6 @@ $divbyzero:
SFUNC_NAME:
lda sp, -STACK(sp)
.frame sp, STACK, retaddr, 0
-#ifdef PROF
- stq ra, 0(sp)
- stq pv, 8(sp)
- stq gp, 16(sp)
-
- br AT, 1f
-1: ldgp gp, 0(AT)
-
- mov retaddr, ra
- jsr AT, _mcount
-
- ldq ra, 0(sp)
- ldq pv, 8(sp)
- ldq gp, 16(sp)
-#endif
.prologue 0
or arg1, arg2, AT
diff --git a/libc/sysdeps/linux/alpha/setjmp.S b/libc/sysdeps/linux/alpha/setjmp.S
index 69649eeab..105cc8292 100644
--- a/libc/sysdeps/linux/alpha/setjmp.S
+++ b/libc/sysdeps/linux/alpha/setjmp.S
@@ -34,12 +34,6 @@ $sigsetjmp_local:
.frame $26, 16, $26, 0
stq $26, 0($30)
.mask 0x04000000, -16
-#ifdef PROF
- .set noat
- lda AT, _mcount
- jsr AT, (AT), _mcount
- .set at
-#endif
.prologue 1
stq $9, JB_S0*8(a0)
diff --git a/libc/sysdeps/linux/arm/Makefile b/libc/sysdeps/linux/arm/Makefile
index f2582e1a8..6a80686a7 100644
--- a/libc/sysdeps/linux/arm/Makefile
+++ b/libc/sysdeps/linux/arm/Makefile
@@ -21,7 +21,7 @@ include $(TOPDIR)Rules.mak
ASFLAGS=$(CFLAGS)
CRT0_SRC = crt0.S
-CRT0_OBJ = crt0.o crt1.o gcrt1.o
+CRT0_OBJ = crt0.o crt1.o
CRT0_DEPS=gmon-start.S
CTOR_TARGETS=$(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o
@@ -54,12 +54,6 @@ $(COBJS): %.o : %.c
$(CC) $(CFLAGS) -c $< -o $@
$(STRIPTOOL) -x -R .note -R .comment $*.o
-ifeq ($(strip $(UCLIBC_PROFILING)),y)
-gmon-start.S: ../common/gmon-start.c
- $(CC) $(CFLAGS) -c $< -S -o $*.S
-gcrt1.o: $(CRT0_DEPS)
-endif
-
ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y)
crti.o: crti.S
$(CC) $(CFLAGS) -c crti.S -o crti.o
diff --git a/libc/sysdeps/linux/arm/bits/machine-gmon.h b/libc/sysdeps/linux/arm/bits/machine-gmon.h
deleted file mode 100644
index 039dfd951..000000000
--- a/libc/sysdeps/linux/arm/bits/machine-gmon.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* Machine-dependent definitions for profiling support. ARM version.
- Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
-
-/* GCC for the ARM cannot compile __builtin_return_address(N) for N != 0,
- so we must use an assembly stub. */
-
-#include <sysdep.h>
-#ifndef NO_UNDERSCORES
-/* The asm symbols for C functions are `_function'.
- The canonical name for the counter function is `mcount', no _. */
-void _mcount (void) asm ("mcount");
-#else
-/* The canonical name for the function is `_mcount' in both C and asm,
- but some old asm code might assume it's `mcount'. */
-void _mcount (void);
-weak_alias (_mcount, mcount)
-#endif
-
-static void mcount_internal (u_long frompc, u_long selfpc);
-
-#define _MCOUNT_DECL(frompc, selfpc) \
-static void mcount_internal (u_long frompc, u_long selfpc)
-
-/* This macro/func MUST save r0, r1 because the compiler inserts
- blind calls to _mount(), ignoring the fact that _mcount may
- clobber registers; therefore, _mcount may NOT clobber registers */
-/* if (this_fp!=0) {
- r0 = this_fp
- r1 = this_lr
- r1 = [r1-4] which is caller's lr
- if (r1!=0)
- r1 = caller's lr
- call mcount_internal(this_lr, caller's_lr)
- }
-*/
-
-#define MCOUNT \
-void _mcount (void) \
-{ \
- __asm__("stmdb sp!, {r0, r1, r2, r3};" \
- "movs fp, fp;" \
- "moveq r1, #0;" \
- "ldrne r1, [fp, $-4];" \
- "ldrne r0, [fp, $-12];" \
- "movnes r0, r0;" \
- "ldrne r0, [r0, $-4];" \
- "movs r0, r0;" \
- "blne mcount_internal;" \
- "ldmia sp!, {r0, r1, r2, r3}"); \
-}
-
diff --git a/libc/sysdeps/linux/arm/crt0.S b/libc/sysdeps/linux/arm/crt0.S
index 6704a81e2..455d35d2d 100644
--- a/libc/sysdeps/linux/arm/crt0.S
+++ b/libc/sysdeps/linux/arm/crt0.S
@@ -92,7 +92,7 @@ _start:
ldr r2,[sp, #8]
#endif
-#if (defined L_crt1 || defined L_gcrt1 ) && defined __UCLIBC_CTOR_DTOR__
+#if (defined L_crt1 ) && defined __UCLIBC_CTOR_DTOR__
/* Store the address of _init in r3 as an argument to main() */
ldr r3, =_init
@@ -123,11 +123,6 @@ _start:
.long 2,0,0
3: .align 4
-#if defined L_gcrt1 && defined __UCLIBC_PROFILING__
-# include "./gmon-start.S"
-#endif
-
-
/* Define a symbol for the first piece of initialized data. */
.data
.globl __data_start
diff --git a/libc/sysdeps/linux/common/Makefile b/libc/sysdeps/linux/common/Makefile
index 1256e2376..1930351fb 100644
--- a/libc/sysdeps/linux/common/Makefile
+++ b/libc/sysdeps/linux/common/Makefile
@@ -57,9 +57,6 @@ CSRC= __rt_sigtimedwait.c __socketcall.c __syscall_fcntl.c \
ifneq ($(strip $(EXCLUDE_BRK)),y)
CSRC+=sbrk.c
endif
-ifeq ($(strip $(UCLIBC_PROFILING)),y)
-CSRC+=gmon.c
-endif
ifeq ($(strip $(UCLIBC_PROPOLICE)),y)
CSRC+=ssp.c
endif
diff --git a/libc/sysdeps/linux/common/bits/dlfcn.h b/libc/sysdeps/linux/common/bits/dlfcn.h
index e96b5c17a..75122a98a 100644
--- a/libc/sysdeps/linux/common/bits/dlfcn.h
+++ b/libc/sysdeps/linux/common/bits/dlfcn.h
@@ -40,25 +40,3 @@
/* Do not delete object when closed. */
#define RTLD_NODELETE 0x01000
-#ifdef __USE_GNU