Patch Name: PHCO_18638 Patch Description: s700_800 10.20 make(1) cumulative patch Creation Date: 99/05/25 Post Date: 99/05/28 Warning: 01/03/15 - This Non-Critical Warning has been issued by HP. - PHCO_18638 introduces a problem whereby, if a target is a symbolic link and the link target does not exist, the timestamp of the symbolic link is used rather than the link target to decide if the target needs to be rebuild. - HP recommends that PHCO_18638 be removed from systems and depots where it could lead to situations that expose the above described problem. - The previous patch, PHCO_16923, does not exhibit this same problem but has been recalled for another reason. PHCO_16371, does exhibit neither of these problems and will be re-released until a replacement patch is available. To ensure that as many other known issues as possible are addressed, HP recommends that PHCO_16371 be installed after PHCO_18638 and PHCO_16923 are removed. If PHCO_16371 was installed prior to PHCO_18638 or PHCO_16923, it will automatically be restored when PHCO_18638 and PHCO_16923 are removed and will not need to be re-installed. - PHCO_18638 is included in the following Support Plus General Release Patch Bundles: September 1999: XSW800GR1020_B.10.20.46 September 1999: XSW700GR1020_B.10.20.46 December 1999: XSW800GR1020_B.10.20.47 December 1999: XSW700GR1020_B.10.20.47 March 2000: XSW800GR1020_B.10.20.48 March 2000: XSW700GR1020_B.10.20.48 June 2000: XSW800GR1020_B.10.20.49.3 June 2000: XSW700GR1020_B.10.20.49.3 September 2000: XSW800GR1020_B.10.20.50.3 September 2000: XSW700GR1020_B.10.20.50.3 December 2000: XSW800GR1020_B.10.20.51.2 December 2000: XSW700GR1020_B.10.20.51.2 March 2001: XSW700GR1020_B.10.20.52.2 March 2001: XSW800GR1020_B.10.20.52.2 Hardware Platforms - OS Releases: s700: 10.20 s800: 10.20 Products: N/A Filesets: OS-Core.UX-CORE Automatic Reboot?: No Status: General Superseded With Warnings Critical: No Path Name: /hp-ux_patches/s700_800/10.X/PHCO_18638 Symptoms: PHCO_18638: 1. PHCO_16923 make(1) coredumps running non-interpreter (#!) script. 2. make uses inference rule in the presence of an explicit rule. 3. make(1) dumps core for filenames having long suffixes. PHCO_16923: Make(1) output the error message "Too many exec arguments" if the number of arguments exceeds 500 PHCO_16371: make(1) gives error "line too long" if the number of characters for exec() arguments exceeds 20478. PHCO_14612: 10.x make(1) is much slower compared to 9.x make(1). PHCO_11760: make(1) silently fails to search the list of directories to search for prerequisites if VPATH is longer than MAXPATHLEN. PHCO_10836: 1. Performance of make(1) degrades drastically for very long VPATH. 2. 10.X make is much slower than 9.X make. 3. make does not see files built for previous prerequisites. 4. make can ignore the line following an "include" in Makefile. PHCO_8893: 1. make(1) does not use the SHELL variable to run the commands always. 2. make(1) does not rebuild libraries as mentioned in the man-pages. 3. Dynamic pre-requisite variables like $${@:.o=.c} does not work as expected. 4. make(1) does not support multiple conditional macros. 5. make(1) ignores the last command line if there is no non-white characters after the '\' character. Defect Description: PHCO_18638: 1. Make(1) dumps core when executing non-interpreter shell scripts within it i.e scripts without a #! in the beginning of the line. Resolution: Make(1) was trying to access a memory location which is not malloced(i.e beyond the malloced area). The operation *--argv = (unsigned char *) "sh" is illegal, because we are assigning "sh" to an address, which is not malloced. So some memory operation(free, in this case) on this address was causing a memory fault(core dump). Having a local buffer (localargv) with correct pointer initialization solves the problem. 2. There is a bug in make's handling of symbolic links. If the ".c" file is a symbolic link to a non-existent file, then make(1) stops with the following error message: Make: Don't know how to make x.c. Stop. Ex: Have a makefile as follows: x.o : z @echo "OK" z : cc -o -c x.o y.c then to reproduce the problem, do the following ln -s junk x.c make Make: Don't know how to make x.c. Stop. Resolution: Make(1) uses stat(2) to obtain the last modification time of a file. When the file is a symbolic link and the link points to a non-existent file, then stat returns an error. So using lstat will solve the problem. The lstat function detects symbolic links and returns information(modification time) about the symbolic link, not the file referenced by the symbolic link. 3. make(1) dumps core for filenames having long suffixes. PHCO_16923: Make(1) has the value of OUTARGVMAX hardcoded to 500. Thus, if the number of argments exceeded 500, an error occurred. PHCO_16371: make(1) uses the ARG_MAX constant defined in limit.h and this value(20478) has been hardcoded in the make code, as ARG_MAX is configurable make(1) now determines the value of ARG_MAX dynamically. PHCO_14612: 10.x make(1) used to make number of pathconf(2) calls. This is due to the fix for DSDe423658. Also make(1) used to make unnecessary access(2) calls to check the existence of the file. PHCO_11760: make(1) silently fails to search the list of directories to search for prerequisites if path set in VPATH holds longer than MAXPATHLEN. PHCO_10836: 1. Performance of make(1) degrades drastically for very long VPATH. 2. 10.X make is much slower than 9.X make. 3. make does not see files built for previous prerequisites. 4. make can ignore the line following an "include" in Makefile. PHCO_8893: 1. make(1) does not use the SHELL variable to run the commands always. 2. make(1) does not rebuild libraries as mentioned in the man-pages. 3. Dynamic pre-requisite variables like $${@:.o=.c} does not work as expected. 4. make(1) does not support multiple conditional macros. 5. make(1) ignores the last command line if there is no non-white characters after the '\' character. SR: 1653302935 1653303073 1653254441 1653279174 5003395251 5003345728 4701318378 1653197533 5003338079 1653177501 5003317768 1653189845 Patch Files: /usr/lib/nls/msg/C/make.cat /usr/ccs/bin/make what(1) Output: /usr/lib/nls/msg/C/make.cat: None /usr/ccs/bin/make: $Revision: 78.1.1.16 $ PATCH_10_20: main.o doname.o misc.o files.o rules.o dosys.o gram.o dyndep.o prtmem.o nl_strchr.o filehash.o hpux_rel.o 99/05/25 cksum(1) Output: 963206234 2129 /usr/lib/nls/msg/C/make.cat 578108242 81920 /usr/ccs/bin/make Patch Conflicts: None Patch Dependencies: None Hardware Dependencies: None Other Dependencies: None Supersedes: PHCO_8893 PHCO_10836 PHCO_11760 PHCO_14612 PHCO_16371 PHCO_16923 Equivalent Patches: PHCO_18676: s700: 11.00 s800: 11.00 Patch Package Size: 140 KBytes Installation Instructions: Please review all instructions and the Hewlett-Packard SupportLine User Guide or your Hewlett-Packard support terms and conditions for precautions, scope of license, restrictions, and, limitation of liability and warranties, before installing this patch. ------------------------------------------------------------ 1. Back up your system before installing a patch. 2. Login as root. 3. Copy the patch to the /tmp directory. 4. Move to the /tmp directory and unshar the patch: cd /tmp sh PHCO_18638 5a. For a standalone system, run swinstall to install the patch: swinstall -x autoreboot=true -x match_target=true \ -s /tmp/PHCO_18638.depot 5b. For a homogeneous NFS Diskless cluster run swcluster on the server to install the patch on the server and the clients: swcluster -i -b This will invoke swcluster in the interactive mode and force all clients to be shut down. WARNING: All cluster clients must be shut down prior to the patch installation. Installing the patch while the clients are booted is unsupported and can lead to serious problems. The swcluster command will invoke an swinstall session in which you must specify: alternate root path - default is /export/shared_root/OS_700 source depot path - /tmp/PHCO_18638.depot To complete the installation, select the patch by choosing "Actions -> Match What Target Has" and then "Actions -> Install" from the Menubar. 5c. For a heterogeneous NFS Diskless cluster: - run swinstall on the server as in step 5a to install the patch on the cluster server. - run swcluster on the server as in step 5b to install the patch on the cluster clients. By default swinstall will archive the original software in /var/adm/sw/patch/PHCO_18638. If you do not wish to retain a copy of the original software, you can create an empty file named /var/adm/sw/patch/PATCH_NOSAVE. Warning: If this file exists when a patch is installed, the patch cannot be deinstalled. Please be careful when using this feature. It is recommended that you move the PHCO_18638.text file to /var/adm/sw/patch for future reference. To put this patch on a magnetic tape and install from the tape drive, use the command: dd if=/tmp/PHCO_18638.depot of=/dev/rmt/0m bs=2k Special Installation Instructions: None