* elf/dl-reloc.c [PROF] (_dl_relocate_object): Define

consider_profiling always to zero.  Don't count of compiler to
	remove unreached if block.
	* sysdeps/x86_64/dl-trampoline.S [PROF] (_dl_runtime_profile):
	Don't compile.
	* sysdeps/i386/dl-trampoline.S [PROF] (_dl_runtime_profile): Likewise.
	* sysdeps/ia64/dl-trampoline.S [PROF] (_dl_runtime_profile): Likewise.
	* sysdeps/s390/s390-64/dl-trampoline.S [PROF] (_dl_runtime_profile):
	Likewise.
	* sysdeps/s390/s390-32/dl-trampoline.S [PROF] (_dl_runtime_profile):
	Likewise.
	* sysdeps/powerpc/powerpc64/dl-trampoline.S [PROF]
	(_dl_profile_resolve): Likewise.
	* sysdeps/powerpc/powerpc32/dl-trampoline.S [PROF]
	(_dl_profile_resolve): Likewise.
	* gmon/Makefile: Add rules to build and run tst-profile-static.
	* gmon/tst-profile-static.c: New file.
	* Makeconfig (+link-static): Allow passing program-specific flags.
This commit is contained in:
Ulrich Drepper 2005-07-07 02:39:45 +00:00
parent 016c70ea61
commit 9f0d7b6df9
12 changed files with 84 additions and 29 deletions

View File

@ -1,3 +1,24 @@
2005-07-06 Ulrich Drepper <drepper@redhat.com>
* elf/dl-reloc.c [PROF] (_dl_relocate_object): Define
consider_profiling always to zero. Don't count of compiler to
remove unreached if block.
* sysdeps/x86_64/dl-trampoline.S [PROF] (_dl_runtime_profile):
Don't compile.
* sysdeps/i386/dl-trampoline.S [PROF] (_dl_runtime_profile): Likewise.
* sysdeps/ia64/dl-trampoline.S [PROF] (_dl_runtime_profile): Likewise.
* sysdeps/s390/s390-64/dl-trampoline.S [PROF] (_dl_runtime_profile):
Likewise.
* sysdeps/s390/s390-32/dl-trampoline.S [PROF] (_dl_runtime_profile):
Likewise.
* sysdeps/powerpc/powerpc64/dl-trampoline.S [PROF]
(_dl_profile_resolve): Likewise.
* sysdeps/powerpc/powerpc32/dl-trampoline.S [PROF]
(_dl_profile_resolve): Likewise.
* gmon/Makefile: Add rules to build and run tst-profile-static.
* gmon/tst-profile-static.c: New file.
* Makeconfig (+link-static): Allow passing program-specific flags.
2005-07-05 Thorsten Kukuk <kukuk@suse.de> 2005-07-05 Thorsten Kukuk <kukuk@suse.de>
* nis/nss_compat/compat-grp.c (internal_getgrgid_r): Check if NSS * nis/nss_compat/compat-grp.c (internal_getgrgid_r): Check if NSS

View File

@ -415,7 +415,7 @@ endif
# Command for statically linking programs with the C library. # Command for statically linking programs with the C library.
ifndef +link-static ifndef +link-static
+link-static = $(CC) -nostdlib -nostartfiles -static -o $@ \ +link-static = $(CC) -nostdlib -nostartfiles -static -o $@ \
$(sysdep-LDFLAGS) $(LDFLAGS) \ $(sysdep-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
$(addprefix $(csu-objpfx),$(static-start-installed-name)) \ $(addprefix $(csu-objpfx),$(static-start-installed-name)) \
$(+preinit) $(+prector) \ $(+preinit) $(+prector) \
$(filter-out $(addprefix $(csu-objpfx),start.o \ $(filter-out $(addprefix $(csu-objpfx),start.o \

View File

@ -153,6 +153,9 @@ _dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[],
#ifdef SHARED #ifdef SHARED
/* If we are auditing, install the same handlers we need for profiling. */ /* If we are auditing, install the same handlers we need for profiling. */
consider_profiling |= GLRO(dl_audit) != NULL; consider_profiling |= GLRO(dl_audit) != NULL;
#elif defined PROF
/* Never use dynamic linker profiling for gprof profiling code. */
# define consider_profiling 0
#endif #endif
if (l->l_relocated) if (l->l_relocated)
@ -264,6 +267,7 @@ _dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[],
ELF_DYNAMIC_RELOCATE (l, lazy, consider_profiling); ELF_DYNAMIC_RELOCATE (l, lazy, consider_profiling);
#ifndef PROF
if (__builtin_expect (consider_profiling, 0)) if (__builtin_expect (consider_profiling, 0))
{ {
/* Allocate the array which will contain the already found /* Allocate the array which will contain the already found
@ -288,6 +292,7 @@ _dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[],
goto fatal; goto fatal;
} }
} }
#endif
} }
/* Mark the object so we know this work has been done. */ /* Mark the object so we know this work has been done. */

View File

@ -1,4 +1,4 @@
# Copyright (C) 1995, 1996, 1997, 2001, 2002 Free Software Foundation, Inc. # Copyright (C) 1995,1996,1997,2001,2002,2005 Free Software Foundation, Inc.
# This file is part of the GNU C Library. # This file is part of the GNU C Library.
# The GNU C Library is free software; you can redistribute it and/or # The GNU C Library is free software; you can redistribute it and/or
@ -27,7 +27,15 @@ routines := gmon mcount profil sprofil bb_init_func bb_exit_func prof-freq
elide-routines.os = bb_init_func bb_exit_func elide-routines.os = bb_init_func bb_exit_func
tests := tst-sprofil include ../Makeconfig
tests = tst-sprofil
ifeq ($(build-profile),yes)
tests += tst-profile-static
tests-static += tst-profile-static
LDFLAGS-tst-profile-static = -profile
endif
# The mcount code won't work without a frame pointer. # The mcount code won't work without a frame pointer.
CFLAGS-mcount.c := -fno-omit-frame-pointer CFLAGS-mcount.c := -fno-omit-frame-pointer

10
gmon/tst-profile-static.c Normal file
View File

@ -0,0 +1,10 @@
#include <stdio.h>
static int
do_test (void)
{
puts ("Hello world");
return 0;
}
#define TEST_FUNCTION do_test ()
#include "../test-skeleton.c"

View File

@ -45,6 +45,7 @@ _dl_runtime_resolve:
.size _dl_runtime_resolve, .-_dl_runtime_resolve .size _dl_runtime_resolve, .-_dl_runtime_resolve
#ifndef PROF
.globl _dl_runtime_profile .globl _dl_runtime_profile
.type _dl_runtime_profile, @function .type _dl_runtime_profile, @function
cfi_startproc cfi_startproc
@ -180,3 +181,4 @@ _dl_runtime_profile:
ret ret
cfi_endproc cfi_endproc
.size _dl_runtime_profile, .-_dl_runtime_profile .size _dl_runtime_profile, .-_dl_runtime_profile
#endif

View File

@ -175,7 +175,7 @@ END(_dl_runtime_resolve)
16byte f13 16byte f13
16byte f14 16byte f14
16byte f15 16byte f15
Since stack has to be 16 byte aligned, the stack allocation is in Since stack has to be 16 byte aligned, the stack allocation is in
16byte increment. Before calling _dl_profile_fixup, the stack will 16byte increment. Before calling _dl_profile_fixup, the stack will
look like look like
@ -189,6 +189,7 @@ END(_dl_runtime_resolve)
#define PLTENTER_FRAME_SIZE (4*8 + 8*8 + 8*16 + 2*8 + 16) #define PLTENTER_FRAME_SIZE (4*8 + 8*8 + 8*16 + 2*8 + 16)
#define PLTEXIT_FRAME_SIZE (PLTENTER_FRAME_SIZE + 4*8 + 8*16) #define PLTEXIT_FRAME_SIZE (PLTENTER_FRAME_SIZE + 4*8 + 8*16)
#ifndef PROF
ENTRY(_dl_runtime_profile) ENTRY(_dl_runtime_profile)
{ .mii { .mii
.prologue .prologue
@ -535,3 +536,4 @@ ENTRY(_dl_runtime_profile)
;; ;;
} }
END(_dl_runtime_profile) END(_dl_runtime_profile)
#endif

View File

@ -66,6 +66,7 @@ _dl_runtime_resolve:
bctr bctr
.size _dl_runtime_resolve,.-_dl_runtime_resolve .size _dl_runtime_resolve,.-_dl_runtime_resolve
#ifndef PROF
.align 2 .align 2
.globl _dl_prof_resolve .globl _dl_prof_resolve
.type _dl_prof_resolve,@function .type _dl_prof_resolve,@function
@ -172,3 +173,4 @@ _dl_prof_resolve:
addi r1,r1,320 addi r1,r1,320
bctr bctr
.size _dl_prof_resolve,.-_dl_prof_resolve .size _dl_prof_resolve,.-_dl_prof_resolve
#endif

View File

@ -26,7 +26,7 @@
and r11 contains the link_map (from PLT0+16). The link_map becomes and r11 contains the link_map (from PLT0+16). The link_map becomes
parm1 (r3) and the index (r0) need to be converted to an offset parm1 (r3) and the index (r0) need to be converted to an offset
(index * 24) in parm2 (r4). */ (index * 24) in parm2 (r4). */
EALIGN(_dl_runtime_resolve, 4, 0) EALIGN(_dl_runtime_resolve, 4, 0)
/* We need to save the registers used to pass parameters, ie. r3 thru /* We need to save the registers used to pass parameters, ie. r3 thru
r10; the registers are saved in a stack frame. */ r10; the registers are saved in a stack frame. */
@ -139,8 +139,8 @@ END(_dl_runtime_resolve)
* Parameter save area, Allocated by the call, at least 8 double words * Parameter save area, Allocated by the call, at least 8 double words
+40 TOC save area +40 TOC save area
+32 Reserved for linker +32 Reserved for linker
+24 Reserved for compiler +24 Reserved for compiler
+16 LR save area +16 LR save area
+8 CR save area +8 CR save area
r1+0 stack back chain r1+0 stack back chain
*/ */
@ -169,7 +169,7 @@ END(_dl_runtime_resolve)
and r11 contains the link_map (from PLT0+16). The link_map becomes and r11 contains the link_map (from PLT0+16). The link_map becomes
parm1 (r3) and the index (r0) needs to be converted to an offset parm1 (r3) and the index (r0) needs to be converted to an offset
(index * 24) in parm2 (r4). */ (index * 24) in parm2 (r4). */
#ifndef PROF
EALIGN(_dl_profile_resolve, 4, 0) EALIGN(_dl_profile_resolve, 4, 0)
/* Spill r30, r31 to preserve the link_map* and reloc_addr, in case we /* Spill r30, r31 to preserve the link_map* and reloc_addr, in case we
need to call _dl_call_pltexit. */ need to call _dl_call_pltexit. */
@ -215,23 +215,23 @@ EALIGN(_dl_profile_resolve, 4, 0)
li r12,64 li r12,64
stvx v2,0,r10 stvx v2,0,r10
stvx v3,0,r9 stvx v3,0,r9
stvx v4,r11,r10 stvx v4,r11,r10
stvx v5,r11,r9 stvx v5,r11,r9
addi r11,r11,64 addi r11,r11,64
stvx v6,r12,r10 stvx v6,r12,r10
stvx v7,r12,r9 stvx v7,r12,r9
addi r12,r12,64 addi r12,r12,64
stvx v8,r11,r10 stvx v8,r11,r10
stvx v9,r11,r9 stvx v9,r11,r9
addi r11,r11,64 addi r11,r11,64
stvx v10,r12,r10 stvx v10,r12,r10
stvx v11,r12,r9 stvx v11,r12,r9
mfspr r0,VRSAVE mfspr r0,VRSAVE
stvx v12,r11,r10 stvx v12,r11,r10
stvx v13,r11,r9 stvx v13,r11,r9
L(saveFP): L(saveFP):
@ -262,7 +262,7 @@ L(saveFP):
nop nop
/* Test *framesizep > 0 to see if need to do pltexit processing. */ /* Test *framesizep > 0 to see if need to do pltexit processing. */
ld r0,STACK_FRAME(r1) ld r0,STACK_FRAME(r1)
/* Put the registers back. */ /* Put the registers back. */
lwz r12,VR_VRSAVE(r1) lwz r12,VR_VRSAVE(r1)
cmpdi cr1,r0,0 cmpdi cr1,r0,0
cmpdi cr0,r12,0 cmpdi cr0,r12,0
@ -275,22 +275,22 @@ L(saveFP):
li r12,64 li r12,64
lvx v2,0,r10 lvx v2,0,r10
lvx v3,0,r9 lvx v3,0,r9
lvx v4,r11,r10 lvx v4,r11,r10
lvx v5,r11,r9 lvx v5,r11,r9
addi r11,r11,64 addi r11,r11,64
lvx v6,r12,r10 lvx v6,r12,r10
lvx v7,r12,r9 lvx v7,r12,r9
addi r12,r12,64 addi r12,r12,64
lvx v8,r11,r10 lvx v8,r11,r10
lvx v9,r11,r9 lvx v9,r11,r9
addi r11,r11,64 addi r11,r11,64
lvx v10,r12,r10 lvx v10,r12,r10
lvx v11,r12,r9 lvx v11,r12,r9
lvx v12,r11,r10 lvx v12,r11,r10
lvx v13,r11,r9 lvx v13,r11,r9
L(restoreFXR): L(restoreFXR):
@ -339,22 +339,22 @@ L(do_pltexit):
li r12,64 li r12,64
lvx v2,0,r10 lvx v2,0,r10
lvx v3,0,r9 lvx v3,0,r9
lvx v4,r11,r10 lvx v4,r11,r10
lvx v5,r11,r9 lvx v5,r11,r9
addi r11,r11,64 addi r11,r11,64
lvx v6,r12,r10 lvx v6,r12,r10
lvx v7,r12,r9 lvx v7,r12,r9
addi r12,r12,64 addi r12,r12,64
lvx v8,r11,r10 lvx v8,r11,r10
lvx v9,r11,r9 lvx v9,r11,r9
addi r11,r11,64 addi r11,r11,64
lvx v10,r12,r10 lvx v10,r12,r10
lvx v11,r12,r9 lvx v11,r12,r9
lvx v12,r11,r10 lvx v12,r11,r10
lvx v13,r11,r9 lvx v13,r11,r9
L(restoreFXR2): L(restoreFXR2):
@ -393,7 +393,7 @@ L(restoreFXR2):
lfd fp13,FPR_PARMS+96(r1) lfd fp13,FPR_PARMS+96(r1)
/* Call the target function. */ /* Call the target function. */
bctrl bctrl
ld r2,40(r1) ld r2,40(r1)
lwz r12,VR_VRSAVE(r1) lwz r12,VR_VRSAVE(r1)
/* But return here and store the return values. */ /* But return here and store the return values. */
std r3,INT_RTN(r1) std r3,INT_RTN(r1)
@ -413,7 +413,7 @@ L(callpltexit):
addi r6,r1,INT_RTN addi r6,r1,INT_RTN
bl JUMPTARGET(_dl_call_pltexit) bl JUMPTARGET(_dl_call_pltexit)
nop nop
/* Restore the return values from target function. */ /* Restore the return values from target function. */
lwz r12,VR_VRSAVE(r1) lwz r12,VR_VRSAVE(r1)
ld r3,INT_RTN(r1) ld r3,INT_RTN(r1)
ld r4,INT_RTN+8(r1) ld r4,INT_RTN+8(r1)
@ -433,3 +433,4 @@ L(pltexitreturn):
ld r1,0(r1) ld r1,0(r1)
blr blr
END(_dl_profile_resolve) END(_dl_profile_resolve)
#endif

View File

@ -64,6 +64,7 @@ _dl_runtime_resolve:
.size _dl_runtime_resolve, .-_dl_runtime_resolve .size _dl_runtime_resolve, .-_dl_runtime_resolve
#ifndef PROF
.globl _dl_runtime_profile .globl _dl_runtime_profile
.type _dl_runtime_profile, @function .type _dl_runtime_profile, @function
cfi_startproc cfi_startproc
@ -124,10 +125,10 @@ _dl_runtime_profile:
5: l %r14,7f-5b(%r1) 5: l %r14,7f-5b(%r1)
la %r4,32(%r12) # pointer to struct La_s390_32_regs la %r4,32(%r12) # pointer to struct La_s390_32_regs
la %r5,72(%r12) # pointer to struct La_s390_32_retval la %r5,72(%r12) # pointer to struct La_s390_32_retval
basr %r14,%r1 # call _dl_call_pltexit basr %r14,%r1 # call _dl_call_pltexit
j 1b j 1b
6: .long _dl_profile_fixup - 0b 6: .long _dl_profile_fixup - 0b
7: .long _dl_call_pltexit - 5b 7: .long _dl_call_pltexit - 5b
cfi_endproc cfi_endproc
.size _dl_runtime_profile, .-_dl_runtime_profile .size _dl_runtime_profile, .-_dl_runtime_profile
#endif

View File

@ -58,6 +58,7 @@ _dl_runtime_resolve:
.size _dl_runtime_resolve, .-_dl_runtime_resolve .size _dl_runtime_resolve, .-_dl_runtime_resolve
#ifndef PROF
.globl _dl_runtime_profile .globl _dl_runtime_profile
.type _dl_runtime_profile, @function .type _dl_runtime_profile, @function
cfi_startproc cfi_startproc
@ -124,3 +125,4 @@ _dl_runtime_profile:
j 0b j 0b
cfi_endproc cfi_endproc
.size _dl_runtime_profile, .-_dl_runtime_profile .size _dl_runtime_profile, .-_dl_runtime_profile
#endif

View File

@ -56,7 +56,7 @@ _dl_runtime_resolve:
.size _dl_runtime_resolve, .-_dl_runtime_resolve .size _dl_runtime_resolve, .-_dl_runtime_resolve
#ifndef PROF
.globl _dl_runtime_profile .globl _dl_runtime_profile
.type _dl_runtime_profile, @function .type _dl_runtime_profile, @function
.align 16 .align 16
@ -186,3 +186,4 @@ _dl_runtime_profile:
retq retq
cfi_endproc cfi_endproc
.size _dl_runtime_profile, .-_dl_runtime_profile .size _dl_runtime_profile, .-_dl_runtime_profile
#endif