HP OpenVMS Systems

ask the wizard
Content starts here

device driver system crashes?

» close window

The Question is:

 
I'm developing the driver.
When I compile the driver, should I use "/NOOPT" option not to optimize the
code?
 
I compiled the driver with DECC V5.7-006 on AlphaServer2100,copied the
driver
object file to the target system (Personal Workstation 433au),linked,and
installed.
When the driver start,I met the system crash for access violation at address
 
of PC (Program Counter). When I compiled with no-optimize, the driver works
fine.
 
Thank you very much in advance.
 
 


The Answer is :

 
  There are many opportunities for code to fail when compiled with one set
  of compiler options, but not with other options.
 
  With device drivers, use the SDA program (ANALYZE/CRASH) to determine the
  exact cause of the failure.  This will typically mean analyzing exact data
  contents of various registers and memory cells from the viewpoint of the
  device driver and the Alpha instruction set.  Information on the steps
  necessary to debug a device driver is included in the Digital Press book
  _Writing OpenVMS Alpha Device Drivers in C_, by Sherlock and Szubowicz.
 
  Examples of common problems include register corruptions, stack stompers,
  and asynchronous code resynchronization flaws -- code optimizers and code
  schedulers are notorious for changing the behaviour of latent source code
  errors, and latent errors can be either masked or unmasked by these tools.
 
  Although it is theoretically possible for a compiler bug to cause this
  sort of problem, it is most often caused by a coding error in the driver.
 
  Speculating about the cause does not help, since in either case the proper
  course of action is to analyze the machine code for the crash and determine
  exactly what went wrong.  If you should find a case where the compiler
  seems to generate faulty code then a _specific_ trouble report through
  official support channels is in order, indicating exactly which machine
  instructions generated by the compiler are considered faulty and which
  C construct(s) and associated C code caused the compiler to generate the
  problematic executable code.
 
 

answer written or last revised on ( 19-OCT-1998 )

» close window