HP UX Fortran Software manual Illegal instruction exception, Segmentation violation exception

Page 79

See the HPFortran Programmer’s Reference, for detailed information about the +FPand +fp_exceptionoptions. Also, the HP-UX Floating-Point Guide has a useful discussion of both options and includes detailed information on floating-point exceptions and how to handle them.

Illegal instruction exception

An illegal instruction exception occurs when a program attempts to execute a bit pattern that is not an op-code. A common cause of this exception is an overwritten stack. If a program overwrites the part of the stack that holds the return address, the new (and bad) address may cause execution control to jump to a memory location that contains data or some other nonexecutable bit pattern. The attempt to execute this location will result in an illegal instruction exception.

This exception can also occur if your program is linked to a bad library, especially if the library contains code that was written in assembler or if it was corrupted during a file transfer.

This exception may indicate a compiler error. If you cannot find the cause of this exception in your code, contact your HP support representative.

Segmentation violation exception

Before a program starts to execute, it is allocated a memory segment, which defines the area of memory that it can use. If the program attempts to access a memory location outside its segment, the operating system will raise the SIGSEGVsignal, indicating a segmentation violation or memory fault.

Any program that can generate address references outside its segment—for example, by indexing beyond the declared boundary of an array—may cause a segmentation violation. In C programs, bad pointers often result in this exception. The standard Fortran90 pointer is more self-protective than the C pointer, but it too can be misused and lead to the state of mind memorialized in the lyric (known only to Cooper Redwine1): “I’ve got those segmentation violation, core dumped blues.” The Cray-style pointer extension is more like the C pointer and is therefore more susceptible to the abuse that results in segmentation violations.

Programs that cause a stack overflow (for example, by attempting to allocate more local variables on the stack than the kernel can handle or by infinite recursion) can also cause a segmentation violation. If your program needs a bigger stack, run the System Administrator Manager (SAM) and increase the maxssiz parameter. Also, see the HP-UX System Administration Tasks manual for information about reconfiguring the kernel.

Segmentation violations are especially common when calling C functions from Fortran program units. If the number, type, or calling conventions of the arguments being passed do not match, the call is likely to result in an exception. For example, if you use the built-in function %VAL to declare an argument as passed by value, but the C function is expecting a pointer, a segmentation violation may occur. (%VAL and %REF are HPFortran extensions; for information about using them when calling a C routine from Fortran, see “Argument-passing conventions” (page 113).)

In most cases, debugging requires locating the code that caused the segmentation violation and rewriting it. If your program aborts with this error, recompile it with the +fp_exceptionoption. A program compiled with this option will display a procedure traceback when it aborts. The procedure traceback lists procedure names and offset addresses of the code that caused the exception.

If you suspect that an out-of-bounds array reference is causing the segmentation violation, you can use the +check=alloption instead of the +fp_exceptionoption. When compiled with the +check=all option, a program that attempts to reference an array element that is outside the declared array boundary will abort with an error message that gives the line number of where the reference was detected.

The +check=allalso performs runtime checks for out-of-bounds substrings and for integer overflow; see “Calling a trap procedure” (page 84). The +check option is fully described in the HPFortran Programmer’s Reference.

Handling runtime exceptions 79

Image 79
Contents Abstract HP Fortran Programmer GuidePage Contents Performance and optimization Using the on statementControlling data storage DebuggingMigrating to HP Fortran 131 Using Fortran directives 123Writing HP-UX applications 107 Calling C routines from HP Fortran 110Porting to HP Fortran 141 Fortran 2003 Features 151Documentation Feedback 153 Glossary 154 Index 159 HP secure development lifecycle HP Fortran compiler environment An overview of HP FortranAn overview of HP Fortran +preinclude= file DriverOptions for controlling the f90 driver +dryrunOptions for controlling the C preprocessor PreprocessorOptions for controlling the front end Front-end+moddir=directory Options for controlling optimization Back-end+DAmodel Options for controlling code generation+Onooptimization OptimizationOptions for controlling the Linker LinkerLdirectory +FPflagsOoutfile HP-UX operating system ToolsWl ,options $ f90 hello.f90 Compiling with the f90 commandF90 command syntax Compiling and linkingExample 2 hello.f90 Command-line optionsF90 command syntax Command-line options+save Command-line options by categoryCommonly-used options Commonly-used optionsOptions listed by category Option descriptionsDo I+1, N Example 3 Example+allowunaligned Boption Data type sizes and +autodbl414164 +autodbl +autodbl4+nocfc +cpp=default+charlit77 +check=boundsDatamodelare Name=def+DAmodel +DDdatamodelNative BlendedItanium Itanium2Values for the +FP option Gformat77 Signals recognized by the +fpexception option+hugecommon Example 4 % f90 +hugecommon=results pcvals.f90 +initheapinteger=ival /usr/include directory +noimplicitnone+indirectcommonlist=file +initheapcomplex=rvalival+nolibs +io77Ipo +nocheckuf+noobjdebug Levels of optimizationRequires concurrent use of the +Oprofile=use option With different values of optlevel+pa1 +realconstant=single +demandload option. The default is +nodemandload+nodemandload the default +r8End.o Tx,pathTp,/usr/ccs/lbin/cpp F90comWx,arg1,arg2,...,argN Bhidden =symbol ,symbol Symbol binding optionsBdefault=symbol,symbol Bextern =symbol ,symbolReviewing general optimization options Using optimization optionsF90 +O3 +Osize myprog.f90 +Oautopar and omit +Oparallel +Oconservative+Onoall +OnoautoparF90 +O3 +Onomoveflops +Ofltacc myprog.f90 Fine-tuning optimization options+Onocxlimitedrange Default is +OnocxlimitedrangeDefault is +Odataprefetch +Ocachepadcommon option+Onofailsafe +Onofenvaccess+Onofastaccess +OnoentryschedOptimizations performed by +Onofltacc +Onoinline=function1,function2 +Oinlinebudget=n +Oinlinebudget enables+Onoinline +OnoinlinefilenameMillicode versions of intrinsic functions Values for the +Oinlinebudget option+Onoloopunrolljam +inlinelevel num+Onoloopunroll=factor +Oloopunroll=4+Onopipeline Default is+Onoparmsoverlap+Oparallelintrinsics +OnoparmsoverlapFor +Oprofile=collectarc,stride Default is +Onopromoteindirectcalls+Onorecovery Default is +Oshortdata=8Filenames recognized by f90 FilenamesLinking with f90 vs. ld Linking HP Fortran programs$ f90 -c hello.f90 # compile Libraries linked by default on PA-RISCLibraries linked by default on Itanium Linking to librariesLinking HP Fortran 90 routines Linking to nondefault librariesLinking to shared libraries Additional HP Fortran librariesOpt/fortran90/lib/pa2064/ -lF90 -lisamstub $ f90 -Wl,-a,archive prog.f90 -lm Special-purpose compilationsCompiling programs with modules Library search rulesSpecial-purpose compilations Example 7 Example 2-3 code.f90 ExamplesExample Example 6 Example 2-2 main.f90$ dostats Compiling with makeExample 8 Example 2-4 data.f90 $ f90 -o dostats data.f90 code.f90 main.f90$ make Compiling for different PA-RISC machinesManaging .mod files Example 9 Example 2-5 makefileCompiling with +pic Creating shared librariesLinking with -b Using the C preprocessor$ f90 +cpp=yes -D Debug cppdirect.f90 Using the C preprocessorProcessing cpp directives Example 13 Example 2-9 cppdirect.f90Creating shared executables Creating demand-loadable executablesSaving the cpp output file HP Fortran environment variables Compiling in 64-bit modeUsing environment variables $ f90 +noshared prog.f90$ f90 +list hello.f90 F90ROOT environment variableSTF90COM64 environment variable HPF90OPTS environment variableMpnumberofthreads environment variable Floating installationFloating installation Lpath environment variableAlternate-path/opt/fortran90.3.6.1 Setting up floating installationDisabling implicit typing Controlling data storageDisabling implicit typing Automatic and static variablesControlling data storage ContainsIncreasing the precision of constants Increasing default data sizes Increasing default data sizesIncreasing default data sizes Usr/lib/libpthread.sl Sharing data among programsWhich creates multiple threads Sharing data among programs $ gotosleep$ wakeup Modules vs. common blocksIm up Modules vs. common blocks Debugging Using the HP WDB debuggerStripping debugging information Floating-point exceptions Signals recognized by +fpexceptionSignal Handling runtime exceptionsFloating-point exceptions Bus error exception= 1.0/0.0 Segmentation violation exception Illegal instruction exceptionBad argument exception Using debugging linesExceptions handled by the on statement Using the on statementExceptions handled by the on statement On REAL8 DIV 0 Call divzerotrapOn Double Precision DIV 0 Call divzerotrap Actions specified by onExceptions handled by the on statement Example 15 Example5-2 ignore.f90 Ignoring errorsTerminating program execution Example 14 Example5-1 abort.f90On Double Precision Overflow Call trap Calling a trap procedureTrapping floating-point exceptions Trapping integer overflow exceptionsAllowing core dumps Trapping +Ctrl-C trap interruptsExample 17 Example5-4 callitrap.f90 On Real Overflow Ignore Example 18 Example 5-5 allowcore.f90HP Caliper Using profilersUsing profilers Performance and optimizationProgramprogramarguments Comparing Program PerformanceOpt/ansic/bin/cc -Aa +O3 -o program +Oprofile=collect Program.c$ gprof prog gprof.out Using Options to Control Data CollectionGprof Specifying PBO file names and locations$ f90 +O4 file.f90 Using options to control optimizationUsing +O to set optimization levels Prof+O4 Using the optimization options+O2, -O +O3Packaged optimization options Fine-tuning optimization options$ f90 +02 +Oaggressive +Osize prog.f90 $ f90 +O4 +Oaggressive +Ofltacc prog.f90+Ofltacc=relaxed Is +Onofastaccess at+Ofastaccess at level +O2Fast +Ofltacc=relaxed . This+Onoinitcheck +Onoloopunroll=n +Oinlinelevel num+Onolibcalls +Olibcalls+Opipeline +Onoparminit+Orecovery +Ovectorize option on +Oregreassoc+Onoreturn +Oshortdata=8+Onowholeprogrammode Conservative vs. aggressive optimization+Owholeprogrammode F90 +O3 +Oparallel -c x.f90 y.f90 F90 +O3 -c z.f90 Conservative, aggressive, and default optimizationsParallelizing HP Fortran programs Compiling for parallel executionCalling routines with side effects parallellization Performance and parallelizationProfiling parallelized programs Conditions inhibiting loop parallelizationData dependences Indeterminate iteration countsVector routines called by +Ovectorize Using the +Ovectorize optionVectorization F90 +O3 +Ovectorize prog.f90Vecdmultadd Controlling vectorization locallySaxpy SdotIndustry-wide standard Vectorization Calling Blas library routinesExample 19 Example 6-1 axpy.f90 REAL, External sdotControlling code generation for performance Example 20 Example 7-1 getargs.f90 Accessing command-line argumentsWriting HP-UX applications $ fprog arg1 another argCalling HP-UX system and library routines Using HP-UX file I/OStream I/O using Fstream Performing I/O using HP-UX system callsObtaining an HP-UX file descriptor Using HP-UX file I/OData types Calling C routines from HP FortranData type correspondence for HP Fortran and C Size differences after compiling with +autodbl Unsigned integersLogicals Size differences between HP Fortran and C data typesComplex sqrcomplexCOMPLEX cmxval Complex numbersExample 21 Example 8-1 passcomplex.f90 Example 22 Example 8-2 sqrcomplex.c Argument-passing conventionsDerived types PointersCall foo%REFptr, %REFiarray, %VALi Integer ptr INTEGER, DIMENSION100 iarrayCase sensitivity Void fooint *ptr, int iarray100, intCase sensitivity Example 23 Example 8-3 sortem.c$HP$ Alias bubblesort = BubbleSort%REF,%VAL Example 24 Example 8-4 testsort.f90Int Memory layout of a two-dimensional array in Fortran and CREAL, DIMENSION2,3,4 ArraysExample 26 Example 8-6 getarray.c Example 25 Example 8-5 passarray.f90Passing a string StringsNull-terminated string Fortran hidden length argumentStrings Following are example C and Fortran programsExample 27 Example 8-7 passchars.f90 File handlingExample 28 Example 8-8 getstring.c File handling Example 29 Example 8-9 fnumtest.f90Extern int globals100 Sharing dataInt somedata Extern int somedataHP Fortran directives Using Fortran directivesUsing HP Fortran directives Directive syntaxName SyntaxDescription and restrictions $HP$ Alias name = external-name arg-pass-mode-listCase sensitivity Local and global usageArgument-passing conventions Example 32 Example 9-2 passstr.f90 StringsFor more information Example 31 Example 9-1 prstr.cListing file Disables the inclusion of source lines in the listing fileSpecified on the command line Example 33 ExampleVendor Directive Cray Compatibility directivesControlling vectorization Compatibility directives recognized by HP FortranCompatibility directives Controlling parallelizationControlling dependence checks Controlling checks for side effectsUsing Fortran directives Compiler limits Command-line options not supportedMigrating to HP Fortran Incompatibilities with HP FortranDouble Precision x = Format field widthsFloating-point constants Intrinsic functionsData types and constants Procedure calls and definitionsKEY= Input/outputDirectives Foo**REALbar, 8 ! foo**barMiscellaneous Migration issuesSource code issues Migration issuesHP Fortran 77 directives supported by f90 options DirectivesF77 options supported by f90 Command-line option issuesIntrinsic functions Conflicting intrinsics and libU77 routine namesData file issues Object code issuesHP-supplied migration tools Approaches to migration$ fid +800 file.f $ fid +es program.f END structure definition Porting to HP FortranCompatibility extensions Compatibility statements+Oparallel or Compiler directivesCompatibility directives Pointer Cray-style+Oparallel or +Ovectorize Intrinsic proceduresNonstandard intrinsic procedures in HP Fortran Directive prefixes recognized by HP FortranUninitialized variables Using porting options$ f90 testloop.f90 Using porting optionsLarge word size One-trip do loopsExample 34 Example 11-1 clash.f90 Name conflictsExternal int1 Source formats Names with appended underscoresEscape sequences Porting from Tru64 to HP Fortran+cfc Porting from Tru64 to HP Fortran EnhancementsNew options Nof66alternate for +noonetrip+nopadsrc Altparam Check noboundsoptions for example, -nocheckboundsMiscellaneous enhancements Fortran 2003 FeaturesInteroperability with C Input/output enhancementsFortran 2003 Features Object orientation featuresData enhancements 153 Documentation FeedbackGlossary Glossary155 So on. See also row-major orderAlso filename extension 157 Memory faultSee ttv Index Symbols159