Date: Tue, 08 Jun 1999 00:57:36 +0900 From: Hidetoshi Shimokawa <simokawa@sat.t.u-tokyo.ac.jp> To: jdp@FreeBSD.org Cc: freebsd-alpha@freebsd.org Subject: Re: cvs commit: src/lib/csu/alpha crtbegin.c Message-ID: <14171.60400.466517.68187Y@ett.sat.t.u-tokyo.ac.jp> In-Reply-To: In your message of "Sun, 6 Jun 1999 08:59:09 -0700 (PDT)" <199906061559.IAA28808@freefall.freebsd.org> References: <199906061559.IAA28808@freefall.freebsd.org>
index | next in thread | previous in thread | raw e-mail
I noticed that some large dynamic linked program is slow on alpha.
For example,
1) make /usr/src/libexec/rtld-elf with DEBUG code and install it.
Index: Makefile
===================================================================
RCS file: /pub/FreeBSD-CVS/src/libexec/rtld-elf/Makefile,v
retrieving revision 1.6
diff -u -r1.6 Makefile
--- Makefile 1999/04/09 00:28:31 1.6
+++ Makefile 1999/04/17 08:44:17
@@ -6,6 +6,7 @@
reloc.c
NOMAN= true
CFLAGS+= -Wall -DFREEBSD_ELF -I${.CURDIR}/${MACHINE_ARCH} -I${.CURDIR}
+CFLAGS+= -DDEBUG
LDFLAGS+= -nostdlib -e .rtld_start
INSTALLFLAGS+= -fschg -C
Index: rtld.c
===================================================================
RCS file: /pub/FreeBSD-CVS/src/libexec/rtld-elf/rtld.c,v
retrieving revision 1.23
diff -u -r1.23 rtld.c
--- rtld.c 1999/04/22 01:54:38 1.23
+++ rtld.c 1999/04/22 13:07:27
@@ -327,6 +327,8 @@
defobj->strtab + def->st_name, basename(obj->path),
target, basename(defobj->path));
+ dbg("where (%p) %p -> %p", where, *where, target);
+
*where = (Elf_Addr) target;
return target;
}
2) run 'LD_DEBUG=yes /usr/libexec/elf/gdb'
...
...
"malloc" in "gdb" ==> 0x1602a9580 in "libc.so.3"
where (0x120187bc0) 0x1602a9580 -> 0x1602a9580
"malloc" in "gdb" ==> 0x1602a9580 in "libc.so.3"
where (0x120187bc0) 0x1602a9580 -> 0x1602a9580
"memcpy" in "gdb" ==> 0x1602a9c40 in "libc.so.3"
where (0x120187bb8) 0x1602a9c40 -> 0x1602a9c40
"malloc" in "gdb" ==> 0x1602a9580 in "libc.so.3"
where (0x120187bc0) 0x1602a9580 -> 0x1602a9580
"malloc" in "gdb" ==> 0x1602a9580 in "libc.so.3"
where (0x120187bc0) 0x1602a9580 -> 0x1602a9580
"malloc" in "gdb" ==> 0x1602a9580 in "libc.so.3"
where (0x120187bc0) 0x1602a9580 -> 0x1602a9580
"memcpy" in "gdb" ==> 0x1602a9c40 in "libc.so.3"
where (0x120187bb8) 0x1602a9c40 -> 0x1602a9c40
"malloc" in "gdb" ==> 0x1602a9580 in "libc.so.3"
...
...
I think rewriting jump slot should be once for each function.
This problem seems still exist after make world with this commit.
Do you have any idea about this?
/\ Hidetoshi Shimokawa
\/ simokawa@sat.t.u-tokyo.ac.jp
PGP public key: finger -l simokawa@sat.t.u-tokyo.ac.jp
At Sun, 6 Jun 1999 08:59:09 -0700 (PDT),
John Polstra <jdp@FreeBSD.org> wrote:
>
> jdp 1999/06/06 08:59:09 PDT
>
> Modified files:
> lib/csu/alpha crtbegin.c
> Log:
> Call do_ctors() and do_dtors() using indirect calls through function
> pointers. The calls are in different sections from the functions
> being called, and they can potentially be far away. On a very large
> program, the 21-bit displacement field of the BSR instruction
> overflowed at link time.
>
> Revision Changes Path
> 1.4 +12 -3 src/lib/csu/alpha/crtbegin.c
>
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-alpha" in the body of the message
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?14171.60400.466517.68187Y>
