==========================================================================
The checksum's (found through sum -r) of the files that you have received
(other than this README) are as follows:

56034   1699 patchSG0003910.compiler_eoe_sw64
31952      2 patchSG0003910.compiler_dev_hdr
59138     77 patchSG0003910.compiler_eoe_man
31952      2 patchSG0003910.compiler_eoe_hdr
64970      7 patchSG0003910.idb
39094     19 patchSG0003910
07685   3626 patchSG0003910.compiler_eoe_sw
==========================================================================



				  - 1 -



       1.  Patch_SG0003910_Release_Note

       This release note describes patch SG0003910 to IRIX 6.2,
       IRIX 6.3, IRIX 6.4, IRIX	6.5-SE,	IRIX 6.5 and IRIX 6.5.x.

       1.1  Supported_Hardware_Platforms

       This patch contains bug fixes for all hardware platforms
       running IRIX6.2,	IRIX6.3, IRIX6.4, IRIX 6.5-SE, IRIX 6.5	and
       IRIX 6.5.x.


       1.2  Supported_Software_Platforms

       This patch contains bug fixes to	rld and	rld.debug (all 3
       ABIs) on	a system running IRIX 6.2, IRIX	6.3, IRIX 6.4, IRIX
       6.5-SE, IRIX 6.5	or IRIX	6.5.x.	It also	contains bug fixes
       to rqs, rqsall and related utilities. The patch is
       appropriate for systems with compiler_eoe from MIPSpro7.2.1
       or earlier installed (on	any of the applicable IRIX
       versions).

       This patch replaces patches SG0001266, SG0001270, SG0001336,
       SG0001384, SG0001584, SG0001681,	SG0001932, SG0002044,
       SG0002261, SG0002458, SG0002715,	SG0003054, SG0003135,
       SG0003247, SG0003378, and SG0003458.

       This patch is incompatible with patches SG0002226 and
       SG0002562.

       The software cannot be installed	on other configurations.

       Please Note that	when installing	patch SG0003910	on IRIX
       6.5.1m the compiler_eoe.sw64.unix subsystem may be displayed
       as a Downgrade (Bug #631053):

	DA patchSG0003910.compiler_eoe_sw64.unix [p]  1632+  ....

       To install this subsystem on IRIX 6.5.1m	use the	following
       commands	under inst:

       Inst> i D
       Inst> set neweroverride on
       Inst> go
       Inst> quit

















				  - 2 -



       1.3  Bugs_Fixed_by_Patch_SG0003910

       This patch contains fixes for the following bugs	in IRIX
       6.2, IRIX 6.3, IRIX 6.4,	IRIX 6.5-SE, IRIX 6.5 and IRIX
       6.5.x.  Bug numbers from	Silicon	Graphics bug tracking
       system are included for reference.

	  o rld	was broken for purify on pthread applications, and
	    the	purified pthreaded app could coredump.	(Bug
	    #778798)

	  o rqs/rqs32/rqs64 did	not process the	multigot dynamic
	    section extensions of multigot executables or DSOs
	    correctly (see man ld, man dso).  The error	was
	    harmless but could be distressing on a multigot
	    executable (rqs could coredump processing netscape
	    4.72, for example, but the coredump	would NOT harm
	    netscape).	If rqs did not core dump on a  multigot
	    shared library (DSO) it processed, rqs could corrupt
	    the	 DSO (if and only if rqs was attempting	to 'move'
	    the	DSO to a new address and terminated normally:  if
	    rqs	coredumped  then the DSO it was	processing is
	    safe).  There are very few multigot	DSOs:
	    /usr/lib64/libInventor.so.3	is one such.  Once damaged,
	    a DSO is not repairable, but must be reinstalled.  [If
	    "elfdump -L	myfile | grep AUX_DYN" shows a line or more
	    of output then <myfile> is multigot.]  (Bug	#783179)


       The following bug fixes were originally provided	in one or
       more of the patches replaced by this patch.

	  o If an application did an sgidladd()	or
	    dlopen(...RTLD_GLOBAL), followed by	a
	    dlopen(...RTLD_LOCAL), (and	the call to
	    sgidladd/dlopen(...RTLD_GLOBAL) was	itself done from a
	    dlopened/dladded DSO) name lookups by rld might not
	    find names made global by the sgidladd() or
	    dlopen(...RTLD_GLOBAL).  This was a	bug introduced in
	    patch 3378.	 (Bug #644389)

	  o If a DSO or	executable had more than 4096 conflict
	    symbols, rqs could core dump.  Now hash table is
	    defined allowing up	to 262,000+ conflict symbols (the
	    max	size allowed: if a smaller will	work a smaller is
	    used).  (Bug #638915)

	  o If a lazy-text-resolution call involved floating point
	    argument registers and if a	call in	the -init code in
	    the	DSO loaded involved floating point registers the
	    lazy-text call fp argument registers would be destroyed











				  - 3 -



	    by the -init arguments.  Due to details of argument
	    register passing this bug is seen most readily with	the
	    n32/64 ABIs, though	it can be reproduced in	any of the
	    ABIs (this bug has existed since IRIX5.0 but apparently
	    no one had encountered it before!).	 (Bug #649041)

	  o On delay-loads of DSO's, versions have been	ignored	for
	    almost all earlier releases	of rld.	 Now rld checks	the
	    version number on delay-loads too.	The new	_RLD_ARGS
	    option -idv	turns off DSO version checking for delay-
	    loads in rld and rld.debug,	restoring the old, broken
	    behavior.  (Bug #651001)

	  o Debugger stack traces through rld would sometimes stop
	    in rld due to mistakes in some hand-written	assembly
	    code in rld.  Now the the stack traces show	the callers
	    back to main() as appropriate.  (Bug #630359)

	  o ssrun(1) could interact with rld, causing some -init
	    functions to not run correctly. This fix corrects the
	    rld	part in	this.  [Note: it is erroneous for a signal
	    handler to call dlopen(), dlclose()	sgidladd(),
	    sgidlopen_version(), dlsym(), or dlerror().	 And no
	    function call in a signal handler is allowed to cause a
	    delay-load of a DSO	(this is an implicit dlopen so is
	    not	correct).  In fact very	few functions are legally
	    callable from a signal handler. the	dl* functions are
	    not	so callable.  It is up to  applications	to ensure
	    such does not happen.  ] (Bug #648641)

	  o By default rld no longer re-evaluates name bindings	on
	    dlclose() (The _RLD_ARGS -f	argument is accepted as
	    also meaning use this new default behavior).  This
	    makes dlclose() fast and eliminates	many lazy-text-
	    resolves.  It will also affect the operation of
	    programs that rely on names	being rebound to a
	    different function/data item after a dlclose().  Such
	    programs are erroneous. If _RLD_ARGS has the -s option
	    present, the old slow method of dlclose is used (this
	    is provided	so erroneous programs depending	on the old
	    method can be made to work).  [Details:  Each name
	    _should_ only be bound once	by rld,	but in complicated
	    circumstances names	can be rebound.	 If the	result of
	    application	actions	(like dlclose()) is that the
	    rebinding finds a different	external definition the
	    result can be application problems or an application
	    crash (rld does not	realize	this has happened and will
	    not	give a warning).  (In addition,	having a weak name
	    defined in one DSO and a strong version in a DSO loaded
	    later leads	to 'undefined name bindings' and
	    potentially	inconsistent application behavior.  This











				  - 4 -



	    has	always been true but not mentioned earlier.).]
	    (Bug #426852)

	  o Now	rld obeys the general rule that	processing is
	    breadth-first (loading of DSOs from	liblists and
	    dlsym() name resolution are	examples).  [Details: In
	    the	past it	did almost-breadth-first ordering.  Because
	    seeing an error in ordering	required having	duplicate
	    symbol definitions at least	4 levels deep in DSO nested
	    liblists, it is unlikely this bug affected any
	    application.  But the ABIs have always been	clear and
	    now	rld obeys the ABIs.]  (Bug #629117)

	  o In the case	of a dlclose(),	all -fini execution is done
	    for	a set of DSOs (where this is the dlclose of the
	    last reference) before any are unmapped.  (Bug #629128)

	  o Nested dlopen/sgidladd/delay-load  (meaning	invoking
	    dlopen/sgidladd/delay-load from within the -init or
	    -fini code of a dlopen/sgidladd/delay-load)	now works
	    even in the	pthreads and sproc threads cases.  Nested
	    dlopen/sgidladd/delay-load was always problematical
	    (though if no pthreads or sproc threads were in use	it
	    might have appeared	to work	as long	as none	of the
	    nested dlopen/etc failed).	Use nested dlopen/sgidladd
	    only when absolutely required.  Use	-init only when
	    absolutely required, as the	nested dependencies make
	    static prediction of the ordering in which the -init
	    code is to be run difficult.  C++ global constructors
	    ordering across compilation	units has always been
	    unspecified	by the C++ definition. Adding delay-load to
	    the	set of DSOs with mutual	constructor calls makes	the
	    ordering even less predictable.  Using/setting
	    sigprocmask(2) in -init or -fini code is not a good
	    idea as the	set of masks seen as ON	is affected by rld.
	    The	precise	behavior of sigprocmask(2) in -init or
	    -fini code depends on which	of 1) pthreads,	2) sproc
	    threads, or	3) neither is in use (and the details are
	    not	specified in these release notes: best to avoid
	    setting/resetting the sigprocmask()	in -init or -fini
	    code). In addition,	it is still difficult to debug
	    -init code in the application startup.  (Bug #629707)

	  o If the filesystem of a DSO had no XFS attributes, rqs
	    could fail (refuse to update a DSO to allow	quickstart)
	    and	fail to	print the proper reason	message.  (The
	    system would operate properly in spite of this rqs
	    error.)  Now rqs understands that ENOATTR is not really
	    a failure, allowing	the DSO	to be requickstarted and
	    uses strerror() to properly	print all errno	values when
	    there is an	error .	 (Bug #634151)











				  - 5 -



	  o rld	got delay load DSO visibility slightly wrong in
	    MIPSpro7.2.1.  Too restrictive in symbol visibility.
	    (Bug #547873)

	  o rld	could (with rld.debug and messages turned on in	an
	    sproc family with signals happening) attribute a signal
	    mask to the	wrong sproc.  Now has locking on the signal
	    mask.  (Has	no meaningful effect if	not using
	    rld.debug) (Bug #549912)

	  o Made messages rejecting a DSO more explicit	as to
	    reason.  (Bug #554703)

	  o rld	was doing an incorrect empty version check.  (Not
	    known to have visible effect in practice).	(Bug
	    #558948)

	  o Improved message in	case mapping in	DSO fails:
	    explicitly list the	DSO pathname (and reason).  (Bug
	    558951).

	  o Added DSO pathname on various rld warnings.	 (Bug
	    #589044)

	  o rqsall got stuck in	an infinite loop on a circular set
	    of l: lt: entries.	(Bug #568510).

	  o rld.debug was taking far too much stack space for
	    certain debugging info.  This lead to problems with
	    small stacks (such as with pthreads	apps).	(BYG
	    #583695)

	  o rqs	and rld	incorrectly handled the	0th global entry of
	    .got_2 thru	the last .got_*	section. This caused some
	    multigot apps or DSOs to not function correctly (and
	    possibly coredump).	 (Bug #608753)

	  o Significantly reduce stack space use by rld.debug.
	    (Bug #600777)

	  o rqsall allowed one to leave	off the	'ifile'	filename
	    argument, which was	not good, since	that could leave
	    one	with an	empty /var/inst/.rqsfiles.  Now	'ifile'	is
	    required.  Never made sense	to leave off the input file
	    name.  (Bug	#604402).

	  o rld	was not	honoring RHF_NO_LIBRARY_REPLACE	on
	    LD_LIBRARY*_PATH.  (Bug #608501)

	  o The	LL_REQUIRE_MINOR flag (ld(1) -require_minor option)
	    was	ignored	by MIPSpro7.2 and later	rld.  Now it is











				  - 6 -



	    honored again.  (Bug #613651)

	  o rld	smaller	by 20KBytes or so.  (Bug #615089) (Bug
	    #614133)

	  o Rld	made faster: small quickstarted	apps are about 3%
	    faster (as measured	by /bin/time).	(Bug #615441)

	  o Rld	is now faster: sped up dlopen, sgidladd,
	    sgidlopen_version functions.  (Bug #620471)

	  o Erroneous calls to sgidlopen_version() with	version
	    argument such as "sgi2.0:sgi2.1" (instead of the
	    correct "sgi2.0" or	perhaps	"sgi2.1" for example) were
	    briefly not	accepted by rld.  The erroneous
	    "sgi2.0:sgi2.1" is again accepted and treated like
	    "sgi2.0" (though if	LL_REQUIRE_MINOR is set	in the
	    flags argument to the sgidlopen_version call (with
	    version string  argument "sgi2.0:sgi2.1") rld will
	    still fail to match	any DSO	version, as in previous
	    releases).	(Bug #625960)

	  o major 6.5-only security bug	in rld.	(Bug #601823)

	  o Rld	could place an invalid address (0xffffffff) into
	    the	GOT for	symbols	listed on a DSO's conflict list	and
	    all	of whose definitions were contained in delay-load
	    libraries which had	not yet	been loaded.  (Bug #586353)

	  o Rld	failed to dlclose dlopened DSOs	at program exit.
	    Rld	also ran fini code in an arbitrary order, rather
	    than the reverse of	the order that the corresponding
	    init code was processed. (Bug #575110 and Bug #578951)

	  o Rld	could fail to correctly	resolve	conflict symbols
	    during lazy	text resolution.  This was most	frequently
	    observed in	quickstarted programs which provide their
	    own	implementation of the malloc family of functions
	    and	reference the overridden malloc	from dlopened DSOs.
	    (Bug #565027)

	  o Rld	performed unnecessary writes to	copy-on-write
	    memory pages.  This	caused the memory footprint of
	    incompletely quickstarted programs to be larger than
	    necessary.	(Bug #564479)

	  o Any	program	using -clearstack (including all 64bit mips
	    abi	programs) would	get a bus error	in rld_newmain.s
	    because it used a 32-bit subtract on a 64bit stack
	    pointer, accidentally trashing it (Bug #549580)












				  - 7 -



	  o This patch provides	rld and	rqs binaries which are
	    required to	run code compiled with the 7.2.1 linker
	    multigot feature (Bug #546958).  This patch	should be
	    installed if patch SG0002715 or one	of its successor
	    patches is present.

	  o Rld	fails to handle	multigot shared	objects	that are
	    relocated (Bug #534245)

	  o Rqs	fails to handle	multigot shared	objects	that are
	    relocated.	This is	the same as bug	number 534245 in
	    rld	(Bug #536186).

	  o Rld	could hang when	outputting error messages or
	    warnings in	multithreaded programs.	 Whether a hang
	    actually occurred would depend upon	the timing of
	    events and rld processing requirements (Bug	#520846).

	  o Cosmoplayer	(the VRML display software) was	unable to
	    load most worlds due to incorrect symbol preemption	in
	    DSOs containing symlib tables.  The	problem	could
	    affect other applications as well (Bug #523673).

	  o Rld	could, under some circumstances, unnecessarily
	    reprocess conflict symbols.	 This conflict resolution
	    could be time-consuming for	apps dlopening libraries
	    containing many conflict symbols at	startup	(Bug
	    #554894)

	  o Sgidlopen_version failed to	return handles for
	    versioned DSOs when	version	lookup required	searching
	    for	DSOs whose filenames had been suffixed with the
	    major version number (e.g.,	libfoo.so.2)  This was a
	    regression from the	rld in the 7.1 compiler	release
	    (Bug #560586).

	  o At runtime,	rld uses the timestamp of a dso	as the key
	    to determine if this is the	actual dso against which we
	    originally linked.	It depends upon	timestamps of dso's
	    to be unique.  It assumes there can	never be two
	    different dso's with the same soname and same
	    timestamp.	Rqsall (and rqs) run so	fast that it is
	    possible for two libraries with the	same soname to get
	    the	same timestamp.	 [ex. rqs'ing mips3/libm.so and
	    mips4/libm.so] Rqsall now assigns unique timestamps	to
	    libraries with the same soname.  (Bug #538535)

	  o Rqsall has been updated to do a better job of assigning
	    load addresses to DSOs.  It	now honors reasonable
	    values of $start_address in	the so_locations files (Bug
	    #556199), computes library sizes accurately	(Bug











				  - 8 -



	    #561583), uses appropriate upper and lower address
	    bounds for laying out o32, n32 and n64 libraries (Bug
	    #566180).  The -move option	now provides a mechanism
	    for	forcing	a full requickstart of the installed DSOs.
	    New	load addresses are assigned to each DSO, packing
	    them as tightly as possible.  (Bug #555509)

	  o A multigot DSO that	moves at run time could	coredump
	    the	application due	to incorrect handling of
	    relocations.  (Bug #534245)

	  o This patch has a correction	for a bug in
	    LD_LIBRARY_PATH handling introduced	in patch SG0002261
	    (SG0002261 was withdrawn and is not	available because
	    of the bug).  (Bug #530749)

	  o If a circular DSO liblist dependency exists	the
	    dlopen() reference counting	was wrong resulting in an
	    extra reference being counted. This	could mean that	on
	    dlclose() that the reference count did not decrement to
	    0 (ever) and that any -fini	code would not be run on
	    the	affected DSO.  Circular	liblist	dependencies (even
	    indirect) are a bad	thing and the order of execution of
	    -init and -fini code is undefined. But at least now	the
	    reference count is correct.	 (Bug #527001)

	  o Delay-loading DSOs could be	slow if	there were a lot of
	    DSOs. Now in many cases delay-loading is faster.  (Bug
	    #506076)

	  o The	static size of rld's text is now significantly
	    smaller than previous versions.  (Bug #506166).

	  o Confusing messages about OEX flags (rarely seen) are
	    now	easier to understand.  (Bug #507206)

	  o A completely useless warning about a DSO not being the
	    right ABI (useless because rld simply keeps	looking	for
	    the	right DSO anyway) is now suppressed unless the
	    environment	variable _RLD_ARGS has the -v option.  (Bug
	    503926)

	  o Previous patches fixing the	problems noted below (such
	    as 2044) could fail	to replace a *.sw32 subsystem: that
	    subsystem no longer	exists (it did in patch	SG0001584
	    for	example) so leaving it behind was a mistake in
	    patch SG0002044.  The rld set here is identical to the
	    rld	set in patch SG0002044,	but the	installation
	    'replaces' rules have been adjusted	to clean up the
	    installation database on any IRIX 6.2 6.3 or 6.4 system
	    this patch is installed on (the parts of that











				  - 9 -



	    installation database that relate to rld).

	  o When running a setuid/setgid program rld could be
	    tricked into creating a security hole.  Now	rld ignores
	    the	-log option of the _RLD_ARGS environment variable
	    for	setuid/setgid programs unless the real user is root
	    (in	addition, rld continues	to ignore some environment
	    variables when handling setuid/setgid programs run by
	    non-root users to avoid security holes).  (Bug #482870)

	  o When running a multigot DSO	(a very	very very unusual
	    DSO) rld could coredump if the DSO was moved when
	    loaded.  (Bug #483964)

	  o rld	could hang a pthreads process if one or	more
	    threads called fork(2) or if there were multiple
	    threads on a single	sproc process-id or if a thread
	    moved from one process-id to another (in an	sproc
	    group).  Whether a hang occurred depended on the timing
	    of events and how the events happened to relate to rld
	    processing.	 In addition, an annoying message about
	    "GUARANTEE INIT" could be emitted by rld when the
	    message was	inappropriate (with certain
	    processes/libraries	using pthreads). (Bug #412725)

	  o rld	could coredump if it thought it	had allocated an
	    internal table (the	msym table) but	in reality the
	    compilation	system had built it: writing to	the
	    compiler-system-built table	is an error (it	is in
	    read-only memory) and unnecessary.	(Bug #449282)

	  o If a program did a series of dlclose(3)s and sproc(2)s
	    quickly enough and the timing was just right rld would
	    hang, hanging the program.	The program was	killable,
	    but	the sproc-thread could not be continued	and the
	    program run	was normally useless as	a result of the
	    hang.  (Bug	#433288)

	  o The	runtime	linker corrupts	the user's data	segment
	    when long LD_LIBRARY_PATH is specified.  It	usually
	    results in segmentation fault while	running	the user
	    application. (Bug #337982)

	  o The	runtime	linker does not	fix-up binaries	with
	    prefetch instructions correctly when the binaries are
	    run	on r8000 machines. This	fix is only effective if
	    one	of the kernel rollup patches in	the series
	    beginning with patch SG0001722 is also installed (as of
	    the	writing	of these release notes the latest kernel
	    rollup patch is patch SG0002187, but be sure to check
	    with with your patch provider about	kernel rollup











				  - 10 -



	    patches). The runtime linker may emit a message like
	    "Cannot open <executable> to fix up	prefetches" on
	    attempting to run a	binary with prefetches (such as	a
	    binary compiled for	the R10000) on an R8000	CPU if one
	    of the kernel patches is not installed.  (Bug #352206)

	  o The	runtime	linker would core dump on pixified binaries
	    if those binaries contain prefetch instructions. (Bug
	    #383655)

	  o The	runtime	linker loops when 2 delay-loaded libraries
	    are	linked into the	same executable	and the	2 libraries
	    are	inter-dependent	on each	other.	Also, the
	    performance	of the libdl routines are not acceptable in
	    big	applications when hundreds of libraries	are loaded
	    using dlopen calls.	 (Bug #361758)

	  o Specifing LD_LIBRARY_PATH with more	than approximately
	    500	characters causes rld to dump core. (Bug #337982)

	  o The	runtime	linker loops in	dlsym call. (Bug #364118)

	  o The	runtime	linker loops when dlopen'ing libraries that
	    have inter-dependencies. (Bug #290198)

	  o Initialized	COMMON block variables have incorrect
	    values.  (Bug #387407)

	  o Dlopen(...,RTLD_NOW) does not report undefined symbols.
	    (Bug #428927)

	  o rqs	will sometimes write an	incorrect value	to the
	    zero-th entry of the global-offset-table(GOT) of a C++
	    shared object or executable.

	    This resulted in segmentation fault	when the executable
	    or shared object containing	the bad	value is used. (Bug
	    #366990).

       1.4  Subsystems_Included_in_Patch_SG0003910


       This patch release includes these subsystems:


	  o patchSG0003910.compiler_eoe_sw.unix

	  o patchSG0003910.compiler_eoe_sw64.unix

	  o patchSG0003910.compiler_eoe_man.dso












				  - 11 -



	  o patchSG0003910.compiler_eoe_man.unix

	  o patchSG0003910.compiler_eoe.hdr.lib

	  o patchSG0003910.compiler_dev.hdr.lib


       1.5  Installation_Instructions

       Because you want	to install only	the patches for	problems
       you have	encountered, patch software is not installed by
       default.	 After reading the descriptions	of the bugs fixed
       in this patch (see Section 1.3),	determine the patches that
       meet your specific needs.

       If, after reading Sections 1.1 and 1.2 of these release
       notes, you are unsure whether your hardware and software
       meet the	requirements for installing a particular patch,	run
       inst.  The inst program does not	allow you to install
       patches that are	incompatible with your hardware	or
       software.

       Patch software is installed like	any other Silicon Graphics
       software	product.  Follow the instructions in your Software
       Installation Administrator's Guide to bring up the miniroot
       form of the software installation tools.

       Follow these steps to select a patch for	installation:

	 1.  At	the Inst> prompt, type

	     install patchSGxxxxxxx

	     where xxxxxxx is the patch	number.

	 2.  Initiate the installation sequence. Type

	     Inst> go

	 3.  You may find that two patches have	been marked as
	     incompatible.  (The installation tools reject an
	     installation request if an	incompatibility	is
	     detected.)	 If this occurs, you must deselect one of
	     the patches.

	     Inst> keep	patchSGxxxxxxx

	     where xxxxxxx is the patch	number.

	 4.  After completing the installation process,	exit the
	     inst program by typing











				  - 12 -



	     Inst> quit



       1.6  Patch_Removal_Instructions

       To remove a patch, use the versions remove command as you
       would for any other software subsystem.	The removal process
       reinstates the original version of software unless you have
       specifically removed the	patch history from your	system.

       versions	remove patchSGxxxxxxx

       where xxxxxxx is	the patch number.

       To keep a patch but increase your disk space, use the
       versions	removehist command to remove the patch history.

       versions	removehist patchSGxxxxxxx

       where xxxxxxx is	the patch number.

       1.7  Known_Problems




































