Chapter 3
Open Problem Summary

This chapter describes open problems for this release of DYNIX/ptx. The problem reports are separated into the following categories:


Utilities Problem Reports

dump Is Restricted to Blocks No Larger Than 32 KB When Backing Up 1 GB or Larger Filesystems (17880)

When backing up filesystems that are 1 GB or larger, the dump(1M) command will not work with a blocking factor of more than 32 KB.

Workaround: Use a blocking factor of 32 KB.

fmli Can Fail if Run When the Filesystem Is Out of Space (17625)

If you run fmli when the filesystem is out of space, the program may create a file called.ott, whose length is zero. When you run fmli again, it may detect that this file exists, not create a new file, and then fail with a message such as the following:

Could not access object Menu.dbadmin

The problem occurs because the .ott file was not created correctly.

Workaround: Delete the .ott file.

fsck and mountall Fail When Only Primary Swap Is Available (213544)

fsck (and subsequently mountall) can fail if sufficient swap space is not available when the system is rebooted after a crash.

Workaround: Increase the size of the primary swap partition. To temporarily work around the problem, add secondary swap space while in single-user mode and then rerun fsck. Be sure not to swap on top of a crash dump that still needs to be saved by savecore.

fwdl Utility Cannot Read EFS Files (20145)

The stand-alone fwdl utility cannot read files from an EFS filesystem.

Workaround: Install the files to be downloaded on a UFS filesystem.

getty Pops Streams Modules and Breaks rtelnet (236068)

Because of a security fix in V4.4.2, getty now pops off streams modules, breaking the Annex® rtelnet code that carefully sets up a pseudoterminal and calls getty.

Workaround: Until this behavior is corrected, change the Annex code (and any other code that calls getty on a pseudoterminal) to use uugetty instead.

infodev Requires That the Tape Drive Contain a Tape (229072)

When the infodev command specifies a tape drive, the command fails if there is not a tape in the drive.

Workaround: Insert a tape into the tape drive before running the command.

lp: Changing Print Job Priority Does Not Change Position in Job Queue (17734)

When you change the priority of a print job, its position in the print queue should change to reflect the new priority. The priority shows that it has changed, but the position of the print job does not change.

Workaround: Move the job to the head of the print queue by using the lp -H option. For example:

lp -i testlp1-45812 -H immediate

lp Standard Interface Does Not Emit Form Feed at the End (16799)

If a printer is configured with the standard interface (from /usr/spool/lp/model) and the user specifies the nofilebreak option to lp, the option is interpreted incorrectly. The nofilebreak option should prevent a form feed from being inserted between files; however, lp inserts the form feed.

Workaround: The standard interface is a shell script that can be edited. Locate the following lines near the end of the script.

if [ -n "${FF}" -a "yes" = "${nofilebreak}" ]
then     echo "${CR}${FF}c"
fi
Change the value yes to no.

lpsched Operates in the Directory Where It Is Started (35414)

The lpsched command starts running in the current directory rather than in root or /usr/spool. This means that you cannot unmount the filesystem until lp is killed.

Workaround: The administrator should start lp in a directory that will not need unmounting. If lp is started in a directory that needs unmounting, the administrator will need to kill lpsched to unmount the filesystem.

mailx Will Not Accept Login Names with 8th-Bit Set Characters (46790)

The mailx command does not accept login names that contain characters with the eighth bit set. For compatibility reasons across systems on a network, login names should be restricted to characters that do not set the eighth bit. For example, use only U.S. ASCII characters.

Workaround: None.

nawk Variable Names Cannot Include Chars with the 8th Bit Set (46847)

Characters with the eighth bit set (for example ISO 8859-1 characters 0x80 - 0xff), cannot be used in nawk variable names. If 8-bit characters are used, nawk flags the variable with an illegal statement error message.

Workaround: None. Use only U.S. ASCII characters in variable names.

nroff Does Not Check for Some Errors (42781)

The nroff command does not print an error message or exit with an error status when it encounters a macro that is not defined. This can make it difficult to find errors in nroff source files.

Workaround: None.

pkgmk May Not Utilize Search Path from Prototype File (205387)

If a package's prototype file specifies a search path, pkgmk(1) must be invoked with the -b basedir option. If this option is omitted, pkgmk will make the intended package only if the object files reside in the current directory.

Workaround: Specify the -b basedir option when executing pkgmk.

privctl(1M) and passmgmt(1M) Need Clarifications (221530)

The following information needs to be added or modified in the privctl(1M) and passmgmt(1M) man pages:

Workaround: None.

sh Will Not Allow Variable Names with 8-Bit Characters (46843)

The Bourne shell (/bin/sh) does not allow variable names to contain characters with the most significant bit set (for example, ISO 8859-1 characters between 0x80 - 0xff).

Workaround: None. Do not use 8-bit characters in variable names.

Stand-alone Copy Program May Print an Invalid Message When Copying Miniroot (250903)

On a Symmetry system, when the stand-alone copy program is used to copy the miniroot filesystem from the miniroot tape to a disk partition, the message Output device <name> is full may appear. The copy operation may also take longer than expected to complete.

Workaround: If you are sure that the disk partition is large enough for the miniroot filesystem, ignore the message. The miniroot filesystem will be copied successfully to the disk partition and can be booted from there.

System Cannot Boot If /var Is a Filesystem (217289)

/var cannot be a filesystem because it is needed during the early stages of the boot process as well as during system shutdown.

Workaround: None.

tic terminfo Compiler Has Problems with 8-Bit Characters (46794)

The tic terminfo compiler will fail to compile a tic source file if the first character on the first line of a terminfo entry has the most significant bit set. This problem affects only the first character in the alias1 name; 8-bit characters can be used in the names for alias2, alias3, and so on. Refer to terminfo(4) for more information.

Workaround: Use only U.S. ASCII characters for the first character in alias1. You can use any 8-bit characters in alias2, alias3, and so on.

vi Exits with an Error If All Lines Are Deleted (231368)

If the vi screen editor's dG command is used to delete all lines in a file and additional lines are then entered, vi will exit with an error when the file is closed.

Workaround: Although the exit status is incorrect, the vi session will have completed successfully. If it is necessary to have the correct error status, add the new entries to the file before deleting the old entries.


ptx/ADMIN Problem Reports

ptx/ADMIN Does Not Allow Removal of Multiple Swap Devices (40860)

The menu system does not allow the removal of multiple swap devices.

Workaround: Remove the swap devices one at a time.

ptx/ADMIN Does Not Support the -v Bootflag (45002)

The menu system does not support the -v bootflag.

Workaround: To set the -v flag, edit the /etc/rc2.d/bootflags file by hand.

ptx/ADMIN Dumps Core on Terminals with 8th Bit Set (46562)

ptx/ADMIN dumps core when executed on terminals using 8-bit control sequences. For example, on a vt200 with 8-bit control, CS1 is \\233 instead of \\E[.

Workaround: Set up the terminal for use with 7-bit control sequences and use a terminfo file with 7-bit control sequences.


Kernel Problem Reports

Cannot Boot with Root or Primary Swap on a Raw Disk (230322)

The operating system cannot boot if either the root filesystem or the primary swap partition is on a raw disk.

Workaround: Ensure that there is a VTOC on the disks containing the root filesystem and the primary swap partition.

Cannot Take System Off Line if It Is Running a CPU-Bound Process (45086)

If a system is running a CPU-bound process, the kernel may not allow the system to be taken off line. This affects the tmp_ctl system call and the offline command.

Workaround: Send a SIGSTOP to the process running on the system, take the system off line, and then send a SIGCONT to the process that you stopped.

ftruncate Checks Current File Permissions (31237)

Once a file has been successfully opened for writing, the kernel does not allow the ftruncate() system call to succeed, regardless of the current file permissions (like the write() system call). The ftruncate call fails and issues the message permission denied.

Workaround: None.

init Scenario Causes Confusing Console Behavior (232137)

When the system is attempting to transition from single-user to multiuser mode, a specific sequence of events can cause multiple shells to access the system console simultaneously, resulting in confusing behavior.

An example of this behavior is that if you were to cd to a new directory and then type ls multiple times, you might see different output from the different invocations of ls. This occurs because the two shells have different working directories, and therefore, the output from ls will be different, depending on which shell gets the console input that tells it to run ls.

The sequence of events causing this condition is as follows:

  1. While the system is in single-user mode, the user starts a new job control shell (either ksh or csh.)

  2. While still in this shell, the user attempts to go to multiuser mode with the init 2 command.

  3. The system fails to go to multiuser mode because of a failure in one of the /etc/rc2.d startup scripts and returns to single-user mode.

At this point, the job control shell that was started manually before the init 2 command is still there. In addition, init has spawned a new single-user shell. Both of these shells have read/write access to the system console, causing the confusing behavior.

Workaround: To get out of this state, use kill -9 pid to kill the older shell. To determine which shell to kill, type ps with no arguments. This will display only the new shell--do not kill this shell. Note the PID of this shell and then type ps -ef to display all of the processes in the system. In the output, find the ksh or csh shell having a different PID and then use kill -9 to kill it.

Overflow Exception Handling Is Different on FPA Emulation (44183)

When the FPA emulation facility is used on a Model D processor, the default exception action of an overflow condition is different than it would be without the emulator. In particular, some overflows under the emulator will cause a SIGFPE, whereas the real hardware would not deliver the signal.

Workaround: The best course is to recompile for i387TM instructions. These perform better than the emulation and do not have the problem. If this is not possible, guard your code against overflow values or leave a signal handler to deal with the exception.

printf() Does Not Handle Recursions Automatically (223453)

If a kernel printf() is interrupted while it is formatting into the kernel log buffer and another printf() is attempted, the buffer structure will be compromised.

Workaround: None.

VTOC Cannot Be Created on a Shared Disk (231905)

In previous releases, a new VTOC could be written to a device that already had a VTOC in place as long as none of the busy partitions were affected. In V4.4, this operation will fail for disks that are shared by ptx/CLUSTERS. An error message such as the following will be displayed:

Unable to open any disk which matches this name

Workaround: Run the devdestroy command to remove the VTOC driver from the disk. You must run this command from each node in the cluster. Next, from a single node, use mkvtoc to install the new VTOC on the disk. Then run devbuild on each node in the cluster to make the new partitions available.


I/O Device Problem Reports

8mm Rewind Can Fail with a Time-Out Error (207304)

When doing an mt offline or mt rewind command on an 8mm tape drive (tx), the following time-out error may appear on the console. Whether the error occurs depends on how far the drive has to rewind the cartridge.

04: WARNING: scsitape:5::tx0: SSI Hard Error on SCSI Start/Stop or 
Load/Unload Unit.
04: scsitape:6::tx0: SCSI target timed out (HBA Error=0x5 SCSI Error=0x0)

The mt command might also exit with an error status. If the command is being executed from a shell script, the error status may cause the script to fail.

Workaround: To increase the time-out period, increase the value of sct_space_timeout in scsitape_space.c and recompile the kernel.

Console Baud-Rate Change Garbles Output at Boot Time (41093)

If the console baud rate is changed through the firmware from 9600, the output from the DYNIX/ptx multiuser or single-user bootup shell scripts will be garbled.

Workaround: Leave the console baud rate at 9600 at boot time.

Console Terminal Modes Can Be Inherited from Previous Login (43908)

The /etc/gettydefs file sets terminals to SANE, giving them a default set of stty modes on a login. This does not appear to work on the console, such that any stty settings from the previous user remain in effect for the next login.

Workaround: Log in on the console as any user (root preferred). If the user can reset the terminal modes using stty(1), then do so. If the user cannot, then do not log out. Log in from another terminal and reset the modes on the console from that terminal, by executing stty sane < /dev/console.

I/O Time-Outs Can Cause Some Applications to Fail (218373)

Some I/O requests that time out (because of a device or cable failure) will take three minutes or more to fail the write request. In some extreme cases, applications such as databases that use timers to validate write operations will time out and fail before the operating-system timer expires. This problem has been seen only on Oracle® versions earlier than 7.3.2.

Workaround: None.

Panic Output May Stall Temporarily (226344)

When you force a system panic, there may be a delay before the output from the panic begins to display on the console. The delay is temporary and no output messages will be lost.

Workaround: None.

scsitapeopen() May Sleep Before Returning EBUSY (230468)

Multiple opens of a tape device should fail with the error EBUSY as soon as possible; however, the scsitapeopen() routine may sleep for a long time before it returns EBUSY.

Workaround: Enable and use the device allocation commands to avoid this situation. See allocate(1M) and the DYNIX/ptx System Administration Guide.


Library Routine Problem Reports

FORTRAN Problems with Microsecond Clock (32492)

The FORTRAN library contains routines GETUSCLK and USCLK_INIT that may conflict with user-defined names. If routines SECNDS or GETUSCLK are used, the microsecond clock is initialized by the FORTRAN runtime library and should not be initialized by the user program.

Workaround: Use these names only for function calls. A FORTRAN user should not initialize the microsecond clock with usclk_init(), because the FORTRAN runtime library will have already initialized it.

libcurses Does Not Check for EINTR (41495)

The read routines used in libcurses do not check for EINTR when EOF is read. Applications that use libcurses may see an EOF returned when a program has been continued after a suspend.

Workaround: The workaround used is dependent on the application. If input is in raw mode, when the user types a Ctrl-D, a Ctrl-D character will be seen rather than an EOF.

utmp Problem Prevents Users from Logging In (234704)

When a large number of users attempt to log into the system simultaneously, the system can run out of file locks, which are used to control access to the utmp databases. The code managing the utmp databases does not handle this situation correctly and prevents new logins from occurring. The following error message will appear:

Error: getut.c: FCNTL of utmp file fails, errno=46

Workaround: Increase the value of the NFILCK kernel parameter to be at least as large as the number of users expected to log in simultaneously. This parameter controls the number of file locks available on the system and can be modified with the ptx/ADMIN Kernel Configuration option. See the DYNIX/ptx System Configuration Guide for more information about this parameter.

libcurses Functions May Not Support 32-Bit Wide Characters (32240)

The wide-character interface functions in libcurses (such as waddch()) currently handle only 16-bit wide characters. These functions assume the wide character is in the lower 16 bits of the argument.

Workaround: If a code set uses 32-bit wide characters, the libc function wctomb() can be used to translate the wide character to a multibyte character. Then the standard libcurses function (for example, addch()) can be called.

wctype, wconv, and wchrtbl Expect 16-Bit Wide Characters (32401)

The wchrtbl(1M) command generates an LC_CTYPE definition file in 16-bit format, assuming that the input consisted of 16-bit wide characters. Correspondingly, the wctype() and wconv() functions expect the wide characters passed in as arguments to be in 16-bit wide character format. Currently, code sets of width greater than 2 cannot be fully supported.

Workaround: None.


C Compiler and Programming Tools Problem Reports

An Undefined Weak Reference May Produce an Invalid Relocation Type (250460)

Because of a linker problem, a weak reference to a symbol that is undefined at link time may produce an invalid entry in the relocation table. For example, if the symbol "initialize" in the following code remains undefined at link time, the linker will correctly resolve its value as zero, but the program's relocation table may contain an invalid entry.

#pragma weak initialize
extern void initialize();

if (&initialize) initialize();

In some cases, this problem may result in incorrect program behavior or in the following fatal error when the program is executed.

rtld: program_name: invalid relocation type

Workaround: Avoid weak references to undefined symbols.

Debuggers Print Incorrect Values for Unprototyped float (39465)

Debuggers print incorrect values for function arguments that have been declared as float, but which the compiler passes as double because they have not been prototyped.

Workaround: Step the program until the argument is used within the function. At that point the value will be correct because the compiler will have converted it back to float. Or use prototyping for functions with float arguments.

Long Double Implementation Differs from SVR4 and ABI (209684)

In DYNIX/ptx V4.x, the C compiler stores long double variables in the same manner as double variables; each variable requires 8 memory bytes. SVR4.0 also stores the variables in the same manner as 8-byte double variables, but each variable requires 12 memory bytes. ABI and SVR4.2 store the variables as true 10-byte, extended-precision, floating-point values; each variable requires 12 memory bytes.

Programs using long double variables are not compatible with SVR4 or other ABI systems, including DYNIX/ptx V4.x. Recompilation will be required when moving programs with long double variables to or from DYNIX/ptx V4.x.

Workaround: None.

Position-Dependent asm Statements May Not Work (39449)

An asm statement that occurs both outside of a function and after the first function in a C program may not work as expected. In the following example, var may be placed in .text space instead of .data space:

asm("     .data");
asm("var: .long 1");

Workaround: Put all of the asm statements in any source file (except those residing within functions) at the beginning of the file and before the first function in the file.


debug Problem Reports

debug Conjunction Event Triggering Can Be Anomalous (200427)

The triggering of events that are comprised of multiprocess conjunctions may be anomalous. Two situations can cause this. The first occurs when one or more of the stop condition expressions involves a process executing within a function as illustrated by the following command.

stop p1@send && p2@receive

The anomaly can occur because the debugger evaluates p1@send as true from the time p1 enters send through the time p1 executes the instruction immediately after the call to send. So if p1@send is true and p2 enters receive just when p1 returns from send, the conjunction becomes true and the stop event is triggered. The anomaly is that p1 is no longer in send. Its program counter no longer lies within the range of send.

The second anomaly is similar to the first but involves program data items in multiple processes. Consider the following debugger command:

stop p1@ideal==1 && p2@reality==0

This command causes watchpoints to be set on p1@ideal and p2@reality. When p1 assigns 1 to p1@ideal, the debugger evaluates p1@ideal==1 as true until p1 assigns it some other value. So if p1@ideal is true and p2 assigns 0 to p2@reality, the conjunction becomes true and the stop event is triggered. The anomaly can occur because p1 is still executing while the conjunction is being evaluated. p1 may change p1@ideal after the evaluation, but before the triggering. When the triggering occurs, p1@ideal==1 is no longer true. This is essentially a race condition between expression evaluation and triggering.

Workaround: Be aware that these anomalies can occur in conjunctive event expressions.

debug May Appear to Hang When Calling a Function in a Process That Is Sleeping in a System Call (221986)

If a debugged process is sleeping in a system call such as wait() and you halt the process and then attempt to call a function in the process from the debugger, the process will continue to sleep in the system call instead of executing the called function.

Workaround: Avoid calling functions from the debugger when the process is not stopped in user-level code.

debug> !echo 'Quoted String'
Q


edb Problem Reports

edb Cannot Break at a Member Function of a Nested Class (240610) [3154]

edb cannot set a breakpoint at a member function of a nested class unless the member functions of that nested class are in the first object file linked into the executable.

Workaround: Change the order of the object files specified to the linker.

show X Shows Nested Class Instead of Outer Class (241807) [3272]

When there is both a class at the file scope and a nested class with the same name, edb gives information about the nested class for show X instead of using information about the class at the file scope.

Workaround: None.

Global Data Symbols Are Not Visible From Shared Object Used with dlopen() (244256) [3505]

edb cannot access global data from a shared object that was used with dlopen().

Workaround: None.

edb Does Not Recognize ABI long doubles (244904) [3581]

The ptx/C++ compiler supports two forms of long double. The default is eight bytes, the same as double, and matches the long double data type supported by the ptx/C compiler and by libc functions. An alternate form is 12 bytes, as required by the System V ABI for Intel processors. This form is specified by the c++ option -abilngdbl. edb cannot distinguish between the two forms and supports only the eight-byte form. Printing a long double value will show only eight bytes, and using the exec command to assign a new value will store only 8 bytes.

Workaround: None. We do not expect edb to ever support 12-byte long doubles.

edb Reports Argument List Incorrectly for struct Return Value (247479) [3913]

edb handles the argument list for a function with a struct return value incorrectly when the function has been compiled with the ptx/C++ compiler.

Workaround: None.

edb Does Not Debug Process After exec (248385) [4090]

After a process being debugged by edb has exec'd, edb continues to use the debug information from the original executable, so it is not possible to set breakpoints in the new executable.

Workaround: None.

step over for Specific Process Does Not Always Work (248809) [4155]

edb fails intermittently when step over is specified for a particular process.

Workaround: Change the current job and then use step over for that new default job.

edb Issues Confusing Message (249156) [4211]

When debugging a multi-threaded program that uses dlopen(), edb issues the following message for each thread termination.

warning: HandleDyn: cannot read _r_debug

Workaround: Ignore the message.

edb Does Not Correctly Parse Expressions in Machine Mode (249218) [4216]

When in machine mode, edb still parses expressions with C syntax, although the documentation says that it handles assembly syntax.

Workaround: Use C syntax for expressions, even in machine mode.

An Unrecoverable Error Occurs When Printing Registers For a Core File (249336) [4234]

edb fails when printing registers for a core file (using the print command when in machine mode).

Workaround: Print individual registers. A patch will be available to fix this problem.

edb Crashes When Opening a Core File with Graphics (249734) [4264]

The edb GUI crashes intermittently.

Workaround: A patch will be available to fix this problem.