Implemented symbol memorizing to reduce the number of calls to lookup(),
making relocation go faster. While relocating a given shared object,
the dynamic linker maintains a memorizing vector that is directly
indexed by the symbol number in the relocation entry. The first time a
given symbol is looked up, the memorizing vector is filled in with a
pointer to the symbol table entry, and a pointer to the so_map of the
shared object in which the symbol was defined. On subsequent uses of
the same symbol, that information is retrieved directly from the
memorizing vector, without calling lookup() again.
A symbol that is referenced in a relocation entry is typically
referenced in many relocation entries, so this memorizing reduces the
number of calls to lookup() dramatically. The overall improvement in
the speed of dynamic linking is also dramatic -- as much as a factor of
three for programs that use many shared libaries.
Submitted by: jdp@polstra.com "John Polstra"
bsd.man.mk when I change the latter to use `::' instead of `:'
dependencies. (bsd.man.mk is included because NOMAN isn't defined.
The maninstall target is supposed to be private to bsd.man.mk so
bsd.man.mk doesn't bother testing if it is already defined. The
test for redefinition in Makefile.dev was too early to do anything.)
Change install target to a beforeinstall target (perhaps there should
be an `extrainstall' target so that Makefiles don't have to abuse
one of beforeinstall, install, realinstall or afterinstall). Don't
bother testing for the install target already being defined. Rewrite
the shell loop as a make loop (this reduces the time for installing
groff from 78s to 65s here).
include this in the old makefiles.
I intended to fix only the private maninstall rule but found a lot of
other bogons and bugs:
- strong resistance to installing the program anywhere other than
${DESTDIR}/usr/bin (first, ../../Makefile.inc was not included.
../Makefile/inc was redundantly included instead. Second, /usr/bin
was hard coded).
- the owner, group and permissions were hard coded.
- the man page was installed twice.
- MANDEPEND wasn't necessary.
- calculations to determine the obj directory weren't necessary.
- there were unnecessary private rules for depend, rcsfreeze and tags.
We don't support the rcsfreeze target.
- there was an extra, bogus, rule for `all'.
The final version uses suffix rules to eliminate the remaining verboseness
involving directories (${.CURDIR}) and to potentially allow multiple
shell programs in one directory.
I got tired of see ``UNIX System Managers Manual''
NOTE: There still a couple of UNIXs left in here. There deal with the
documents. We may want to change there also, even though VERY little of there
even pertain to FreeBSD.
instead of the uninitialized one $(DEVICE).
I hoped these changes would fix some of the large runtime macro processing
bugs, but they seem to only fix some small build-time macro substitution
bugs. E.g., `man ms' now tells you to invoke groff with the flags `-ms'
instead of the bogus flags `-m'; `man groff now tells you that the default
device is `ps' instead of the bogus device `'.
shared library. Formerly, the message looked like this:
ld.so: run: libjdp1.so.1.0: Undefined error: 0
The new message looks like this:
ld.so: run: Can't find shared library "libjdp1.so.1.0"
(Where "run" is the name of the program being executed.)
Submitted by: jdp@polstra.com (John Polstra)
symbols.
An easy example to see this is to develop an X program which links
against Xt, but doesn't add -lX11 to the link line. It will link fine,
but cause run-time errors by ld.so because of missing symbols used by Xt
defined in X11. This patch makes the errors more readable.
Submitted by: jdp@polstra.com (John Polstra)
in the diff. This makes it so that diffs containing files in different
subdirectories that have the same name not patch the same file. For example
a diff with patches to Makefile, des/Makefile, usr.bin/Makefile would attempt
to patch Makefile three times.
"update -jHEAD" when a file has been added on the specified tag.
It doesn't actually make cvs 'handle' it, it just stops it from dying
and leaving stray locks and other wreckage.
This was suggested by the CVS maintainers, and is in cvs-1.5.1-950901.
1: It stops invalid files being created in the cvs tree
2: It stops the import from aborting without mailing a commit message..
The first is simple, it opens the file for reading before touching the
repository, and the second catches the pieces when it hits an unreadable
file rather than just aborting mid-way through, leaving the repository in
a bit mess.
Reviewed by: rgrimes
LINK_SPEC. This solves a problem with the f77 frontend where
aproviding the -r8 option (use REAL*8) caused `cc' to ``forget'' to
pass the entry point to the linker.
Closes PR #gnu/644: f77 -r8
Reviewed by: watanabe@komadori.earth.s.kobe-u.ac.jp (Takeshi WATANABE)
texinfo-3.6 distribution to enable the use of the cursor keys.
Since there is an open problem report (gnu/289) for this it might be
of interest for (some of) you.
I (Joerg) have also added a minor hack that makes info recognizing a
window size change while it has been suspended.
Submitted by: thomas@ghpc8.ihf.rwth-aachen.de (Thomas Gellekum)
bootparam_prot.x was changed for nfsv3 but bootparamd and callbootd
kept using the old version which fortunately failed at build time.
Copying hasn't been necessary since path handling was fixed in
rpcgen/rpc_main.c some time ago.
on dlclose. Also correctly call constructors and destructors for libraries
linked with /usr/lib/c++rt0.o.
Change interpretation of dlopen manpage to call _init() rather than init()
for dlopened objects.
Change c++rt0.o to avoid using atexit to call destructors, allowing dlclose to
call destructors when an object is unloaded.
Change interface between crt0 and ld.so to allow crt0 to call a function on
exit to call destructors for shared libraries explicitly.
These changes are backwards compatible. Old binaries will work with the new
ld.so and new binaries will work with the old ld.so. A version number has
been introduced in the crt0-ld.so interface to allow for future changes.
Reviewed by: GAWollman, Craig Struble <cstruble@singularity.bevc.blacksburg.va.us>
cpio/copyout.c:
Don't output a file if the major, minor or totality of its rdev would be
truncated. Print a message about the skipped files to stderr but don't
report the error in the exit status. cpio's abysmal error handling doesn't
allow continuing after an error, and the rdev checks had to be misplaced
to avoid the problem of returning an error code from routines that return
void.
pax/pax.h:
Use the system macros for major(), minor() and makedev().
pax already checks _all_ output conversions for overflow. This has the
undesirable effect that failure to convert relatively useless fields
such as st_dev for regular files causes files not to be output. pax
doesn't report exactly which fields couldn't be converted.
tar/create.c:
Don't output a file if the major or minor its rdev would be truncated.
Print a message about the skipped files to stderr and report the error
in the exit status.
tar/tar.c:
For not immediately fatal errors, exit with status 1, not the error count
(mod 256).
All:
Minor numbers are limited to 21 bits in pax's ustar format and to 18
bits in archives created by gnu tar (gnu tar wastes 3 bits for padding).
pax's and cpio's ustar format is incompatible with gnu tar's ustar
format for other reasons (see cpio/README).
now safely add a line like
ldconfig -m ${PREFIX}/lib
in ports' Makefiles and packing lists without throwing away some
directories the user may have added.
Submitted by: Mostly by Paul Kranenburg <pk@cs.few.eur.nl>
>Number: 364
>Category: bin
>Synopsis: Interrupting man results in half-baked man page
>Description:
Interrupting man while it is waiting for the page to be formatted
results in a zero length file or a half-baked file.
>How-To-Repeat:
Inetrrupt man while it is formatting a page.
>Fix:
Pay more attention to the return value from the system command.
Submitted by: John Capo <jc@irbs.com>
like "3DBorder" and "[". (NB, the "3DBorder" problem has actually
been intention, it allowed for weird section names like "3xyzzy". We
don't have them, either.)
(Partially) Submitted by: taob@gate.sinica.edu.tw (Brian Tao)
file specifications when they've been extracted (enabling you to get a file
fast if it occurs somewhere close to the front).
Submitted by: Marc van Kempen <wmbfmk@urc.tue.nl>
> * the gdb-4.13 of current (compiled and used under 2.0R) can not attach to my
> own processes (it works only then i'm root - else i get open failed - for my
> own processes)
how embarassing ! This turns out to be a bug in infptrace.c. Below
is a patch. Could some kind soul apply it ?
Submitted by: "Gary J." <garyj@rks32.pcs.dec.com>
of the linker to enforce linking of modules in command line order it is
not possible to link gdb shared with -lcompat.
*HACK ALERT*
Removed -lcompat from LDADD and bring in the necessary functions out of
libcompat as a source module until the linker can be fixed.
underlying bugs which are caused by mixing static/shared libraries with
this change in place.
The shlib code is not capable of supporting this feature in it's present
state and will need significant modifications in order to do so.
in libc, we can get rid of the private/special copies of yp_*.c
files and rpcgen them at compile time instead. This leaves us with
just one unique source files: yppush.c
date: 1995/02/04 20:27:23; author: phk; state: Exp; lines: +1 -1
added *.info and *.db to the default "ignore" list in cvs to avoid obviously
common mistakes.
use it. :-)
It now explicitly requires the specification of a directory to import
from, either as an argument to the script, or by asking the user about
it. (Previously, it implicitly used `.', like cvs import does.)
Also implemented an option `-n', which does essentially the same like
the overall CVS option `-n': show only what would have been done,
don't do any commitment. Note that since the modules' database is
checked out in place (and not commited back), it will erroneously be
reported as to be imported, too:
cvs import: Importing /home/ncvs/ports/foobar/foo/modules
I ports/foobar/foo/modules/CVS
N ports/foobar/foo/modules/modules
This is an unwanted side-effect, but gives the user the option to see
if the `ed' magic did the right thing when editing modules/modules.
Rod, can you please check the function ``checktag'' in the script if it
will be restritctive enough?
interpret it. I've preserved the bugs that perl must be installed
to build part of perl and that it must be installed in the wrong place
(no ${DESTDIR}).
members over shared library members. This modification causes the linker
to use the first definition it sees for a symbol instead of having
priorities based on the library type. This modification should allow
gdb to compile again.
Obtained from:
Email conversation with Paul Kranenbury, but implemented completely by
me. If it doesn't work, it's my fault not his.
default switches, template functions get EXTERNAL linkage in each file
in which they occur, causing multiple definition errors during
linking. The enclosed patch (from gnu.g++.bug) appears to solve the
problem (I enclose the accompanying message as well).
This patch fixes the multiply defined template functions bug
which was introduced in 2.6.1.
Submitted by: "Justin T. Gibbs" <gibbs@estienne.cs.berkeley.edu>
Obtained from: Jason Merrill at cygnus support on G++ mailing list
one is much more intelligent, not only that it would accept multiple
man page locations, it also behaves like ``make'' in that it will only
deal with cat pages that are out of date (by default).
Wolfram also wrote a man page for it.
Submitted by: wosch@cs.tu-berlin.de (Wolfram Schneider)
- Don't define NO_IMPLICIT_EXTERN_C here. It is already the default
(defined in i386/bsd.h).
- Don't lose the fixed comment about FUNCTION_PROFILER.
- Don't lose the define of NO_PROFILE_DATA.
Replace the unused define of COMMENT_BEGIN by the less-unused define
of ASM_COMMENT_START. COMMENT_BEGIN was only defined in i386-specific
files and was not used in any part of gcc-2.6.3. ASM_COMMENT_START
is defined for several targets and is used for stuff that we don't
support (dwarf).
stuff. I'd like to have it in CVS, and i figured that this might be
the best place to go.
Someone (phk?) could install it into /usr/local/bin on freefall, for
convenience.
Suggested by: phk
basic-block profiling:
1. use a .stabs(25) symbol to link all the data structures together with.
The regular method isn't safe for the kernel.
2. add a BB before the prologue and add a BB after the epilogue, this
alows us to find the length of any counted BB. This is a cheap and somewhat
reasonable measure of actual cost.
if a signal is received.
This fixes a bug where killing the process would cause a
"No manual entry for XXX" to be printed even if the manpage
was found.
first place and we were too long in finding out. Now we know, and the
damage is hard to fix. This is part one: ld will not link gcc dynamic,
if specified as "-lgcc".
Suggested by: dyson & davidg
disables dysfunctional disinformed namei's,
needlessly negating namei cache."
These hacks cuts the number futile attempts made by cc and ccp to find
cross-compilers and other weird stuff. A make of the BOOTFLP kernel
has 20% less namei calls now, that is from 30647 down to 24563 calls.
NetBSD ld code except for local changes for dlopen() and friends and
the hashing on the minor value of the shlibs. We should be binary
compatible now with all their libraries.
Obtained from: NetBSD
the same as the changes made in the repository. This is often seen by
people with remote CVS trees that have applied their local patches to the
master site. a 'cvs update' will show bogus conflicts.
Obtained from: CVS mailing list, Stig<stig@inse.com>
In diffutils 2.6 and 2.7, diff3 -A complains about identical overlapping
changes. They're different from the ancestor but not from each other...
Why bother? The patch below fixes this nonsense and preserves [B]ackwards
compatiblity with the -B flag (also --show-bogus-conflicts).
Party on...
Stig
i reported today earlier..tested and works OK..
( To those who want to experience bug try running aub
with old version of socket.ph and with new one or just any
perl script "requiring " <sys/socket.ph> or <sys/cdefs.ph> )
This is a ported/modified version of the yppush program from the
yps-0.21 package from the NYS project. This program is used to propagate
updated NIS maps from an NIS master to an NIS slave. It's normally invoked
by /var/yp/Makefile.
This version of yppush has been modified in the following ways:
- Cleared up several Linux/BSD incompatibilities, largely involving
header files.
- converted from GDBM to DB with extreme predjudice. (well, not really...)
- removed lots of ugly debugging code that really didn't do anyone any good.
- Fixed a couple of inaccurate/badly formatted error messages.
- Renamed some functions to avoid collisions with certain YP routines
hidden inside libc.
- Small signal handling kludge: Linux has different struct sigaction
that us.
- Incorporated some functions from the yps-0.21 library that yppush was
dependent on.
Like ypxfr, this works, but could use come cleaning up.
the version installed from /usr/share. It's hard to eliminate old versions
- few Makefiles have `uninstall' targets and sup/ctm tends to blow away
old Makefiles.
This Makefile needs more work. Stuff is built at install time...
Don't initialize CLEANFILES here. Many FONTFILES are sources and required
special clean rules to avoid cleaning.
Makefile.tty:
Initialize CLEANFILES. All tty FONTFILES are objects.
misfeature caused troubles when a program attempted to access a shlib
where one with a higher minor number has been hashed. Ldconfig does
only include the highest-numbered shlib anyway, so this is in no way a
limitation of generality.
Caution: after installing the new programs, your /var/run/ld.so.hints
needs to be rebuiult; run ldconfig again as it's done from /etc/rc.
perl setuid scripts don't work in 2.1-current for the same reason they were
not working in 1.1.5.1.
Perl 5 has the same "problem" of course.
We have almost POSIX saved uids but we must undefine the following symbols
in order to get setuid perl scripts :
Submitted by: roberto@blaise.ibp.fr (Ollivier Robert)