dyninst.git
23 years agoStopped using obsolete -v option to paradynd
ssuen [Sun, 1 Mar 1998 03:24:43 +0000 (03:24 +0000)]
Stopped using obsolete -v option to paradynd

23 years agogcc on AIX complained about this being missing.
ssuen [Sun, 1 Mar 1998 02:56:03 +0000 (02:56 +0000)]
gcc on AIX complained about this being missing.

  template class vector<dictionary_hash<string, string>::entry>;

23 years ago*** empty log message ***
mcheyney [Sun, 1 Mar 1998 01:27:42 +0000 (01:27 +0000)]
*** empty log message ***

23 years agoSmall style changes....
mcheyney [Fri, 27 Feb 1998 20:38:02 +0000 (20:38 +0000)]
Small style changes....

23 years agoAdded templates for dictionary_hash<string, string>, and
mcheyney [Fri, 27 Feb 1998 20:36:25 +0000 (20:36 +0000)]
Added templates for dictionary_hash<string, string>, and
vector<FERNode>.

23 years agoFirst version.
mcheyney [Fri, 27 Feb 1998 20:35:30 +0000 (20:35 +0000)]
First version.

23 years ago Changed interface to relocateFunction for 2-pass relocator
mcheyney [Fri, 27 Feb 1998 20:34:24 +0000 (20:34 +0000)]
Changed interface to relocateFunction for 2-pass relocator
code.  Also added some helper functions dealing with Function
Expansion Records.

23 years ago Changed module_is_excluded and function_is_excluded to
mcheyney [Fri, 27 Feb 1998 20:33:59 +0000 (20:33 +0000)]
Changed module_is_excluded and function_is_excluded to
avoid linear lists searches (replaced w/ hash lookup).  The
linear search slowed down paradynd a lot when a pcl file had
a large number "exclude" directives.

23 years ago Expanded NEW_INSTR_ARRAY_LEN (size of array allocated in
mcheyney [Fri, 27 Feb 1998 20:33:23 +0000 (20:33 +0000)]
Expanded NEW_INSTR_ARRAY_LEN (size of array allocated in
paradynd to temporarally hold instructions while functions are
relocated) to deal with some large functions in libc which
have tail-call optimization.

23 years ago Changes having to due with my new 2-pass function relocator code.
mcheyney [Fri, 27 Feb 1998 20:32:56 +0000 (20:32 +0000)]
Changes having to due with my new 2-pass function relocator code.
    First, allocation and usage of a FunctionExpansionRecord for
every function relocation.
    Second, changes dealing with size of relocated functions :
2 pass relocator code calculates the total size change for a
relocated function - this allows us to allocate exactly that much
space.  Previously, code allocated extra space equal to the number
of extra bytes which could be introduced by unwinding tail-call
optimization.  This doesn't work for functions with 2 tail-call
optimizations, or with a tail-call optimizating and something else
which os expanded when the function is relocated, such as a call
in the 2nd instruction.

23 years ago Put in wrappers for 2-pass relocation. We probably need 2-pass
mcheyney [Fri, 27 Feb 1998 20:32:14 +0000 (20:32 +0000)]
Put in wrappers for 2-pass relocation.  We probably need 2-pass
relocation in both sunos and solaris, but not bothering to uodate
the sunos code now.  However, we do put some wrappers in to
allow the code to compile with inst-sparc mods....

23 years ago 2 major changes :
mcheyney [Fri, 27 Feb 1998 20:31:41 +0000 (20:31 +0000)]
  2 major changes :
  a. made function relocation code 2-pass.
  This is necessary to patch jump targets when we move code
around inside a function when we relocate it - for example
when patching tail-call optimization which doesn't occur
at the end of the function, or when we add some extra nops
at the beginning of a function so that the entry point doesnt
overlap with some other features, like a CALL site or part of
a loop.
  b. changed the way we unwind tail-call optimization.
  The origional scheme made the (incorrect) assumption that all
functions called from tail-acll optimization are leaf functions.
I found a counterexample in libc which was breaking under the old
tail-call unwinding scheme.

23 years agoChaning version number to 2.1 - naim
naim [Fri, 27 Feb 1998 19:02:08 +0000 (19:02 +0000)]
Chaning version number to 2.1 - naim

23 years agoReversion to previously working version (which handled sigTRAP correctly on
wylie [Wed, 25 Feb 1998 19:44:45 +0000 (19:44 +0000)]
Reversion to previously working version (which handled sigTRAP correctly on
Solaris/X86), with the incorporation of Oscar's previous timer change.

23 years agoImplementation of CPU time using gethrvtime in order to improve performance -
naim [Wed, 25 Feb 1998 19:08:42 +0000 (19:08 +0000)]
Implementation of CPU time using gethrvtime in order to improve performance -
naim

23 years agoStripped out obsolete "-v"/pvm_first code, substituting a warning message
wylie [Tue, 24 Feb 1998 23:37:39 +0000 (23:37 +0000)]
Stripped out obsolete "-v"/pvm_first code, substituting a warning message
should "-v" still be used as a command line argument for paradynd.
(Corresponding code in paradyn should not generate "-v" args for paradynd.)

23 years agoFixed unhelpful coredump when parsing (invalid) command-line arguments,
wylie [Tue, 24 Feb 1998 23:18:00 +0000 (23:18 +0000)]
Fixed unhelpful coredump when parsing (invalid) command-line arguments,
before printing usage information and exiting.
Also fixed a couple of (fairly innocuous) compiler warnings, while here.

23 years agoRemoved (unnecessary) link dependency on libhist from LIBS.
wylie [Tue, 24 Feb 1998 21:47:29 +0000 (21:47 +0000)]
Removed (unnecessary) link dependency on libhist from LIBS.

23 years agoReverse of my previous commit. Library calls are once again considered
ssuen [Fri, 20 Feb 1998 19:49:57 +0000 (19:49 +0000)]
Reverse of my previous commit.  Library calls are once again considered
callsites (or not callsites) depending on the metric.

23 years agoLibrary calls are not call sites.
ssuen [Wed, 18 Feb 1998 02:37:17 +0000 (02:37 +0000)]
Library calls are not call sites.

23 years agoFixing problem with pending system call during inferiorRPC when the application
naim [Thu, 12 Feb 1998 18:48:26 +0000 (18:48 +0000)]
Fixing problem with pending system call during inferiorRPC when the application
is paused - naim

23 years agoCommented out debugging message
ssuen [Sat, 7 Feb 1998 20:40:41 +0000 (20:40 +0000)]
Commented out debugging message

23 years agoAdded ability to handle more than one daemon per machine
ssuen [Sat, 7 Feb 1998 20:39:18 +0000 (20:39 +0000)]
Added ability to handle more than one daemon per machine

23 years agoRemoved the rule for "metTester", which was used for building a stand-alone
czhang [Thu, 5 Feb 1998 22:19:00 +0000 (22:19 +0000)]
Removed the rule for "metTester", which was used for building a stand-alone
test for the MDL scanner and parser.  Two of the source files for the test
"metTester.C" and "metTemplates.C" were removed because they were obsolete.

23 years agoFiles "metTemplates.C", "metTester.C" were for stand-alone testing of the
czhang [Thu, 5 Feb 1998 22:12:59 +0000 (22:12 +0000)]
Files "metTemplates.C", "metTester.C" were for stand-alone testing of the
scanner and parser.  Removed because they are obsolete.

23 years agoAdded support for the BPatch::attachProcess function to the AIX version
buck [Wed, 4 Feb 1998 19:42:34 +0000 (19:42 +0000)]
Added support for the BPatch::attachProcess function to the AIX version
of the Dyninst API library.

23 years agoConditional use of NT-specific WSAETIMEDOUT instead of ETIMEDOUT timeout error.
wylie [Mon, 2 Feb 1998 23:12:07 +0000 (23:12 +0000)]
Conditional use of NT-specific WSAETIMEDOUT instead of ETIMEDOUT timeout error.

23 years agoFix extended lines/comments
wylie [Mon, 2 Feb 1998 22:11:29 +0000 (22:11 +0000)]
Fix extended lines/comments

23 years agoIn mdl_v_expr::apply, MDL_EXPR_VAR processing, "switch (get_drn.type())"
czhang [Fri, 30 Jan 1998 21:14:08 +0000 (21:14 +0000)]
In mdl_v_expr::apply, MDL_EXPR_VAR processing, "switch (get_drn.type())"
missed two cases: MDL_T_PROC_TIMER and MDL_T_WALL_TIMER.  Added them.

23 years agoTemporary fix of setting MaxActiveExperiments higher to allow Performance
ssuen [Fri, 30 Jan 1998 19:31:22 +0000 (19:31 +0000)]
Temporary fix of setting MaxActiveExperiments higher to allow Performance
Consultant to search "deeper" in program runs with lots of resources.

23 years agoDetach debugging message now tells which machine process is on.
ssuen [Fri, 30 Jan 1998 19:30:08 +0000 (19:30 +0000)]
Detach debugging message now tells which machine process is on.

23 years agoFixed front-end memory leak. Paradynds retry if connection with front-end
ssuen [Fri, 30 Jan 1998 18:29:56 +0000 (18:29 +0000)]
Fixed front-end memory leak.  Paradynds retry if connection with front-end
fails.

23 years agoFix for perfStream delete assert failure
ssuen [Fri, 30 Jan 1998 17:09:37 +0000 (17:09 +0000)]
Fix for perfStream delete assert failure

23 years agoCommented out debug messages
ssuen [Fri, 30 Jan 1998 16:11:30 +0000 (16:11 +0000)]
Commented out debug messages

23 years agoCheck for obsolete words "setCounter", "subCounter", "addCounter",
czhang [Wed, 28 Jan 1998 16:31:50 +0000 (16:31 +0000)]
Check for obsolete words "setCounter", "subCounter", "addCounter",
"functionCall".  If there's any, bail out and warn user.  Fixed a bug about
the inaccuracy of the line number reporting.

23 years agoIn line 1378 (this will certainly change in the future), a wrong variable
czhang [Wed, 21 Jan 1998 15:00:56 +0000 (15:00 +0000)]
In line 1378 (this will certainly change in the future), a wrong variable
was used.  Changed "if (!left_val.get(v1))" to "if (!left_val.get(i1))".

23 years ago"Const"-ing as necessary for VC++
wylie [Mon, 19 Jan 1998 22:05:44 +0000 (22:05 +0000)]
"Const"-ing as necessary for VC++

23 years agoMassive changes for MDL expression.
czhang [Mon, 19 Jan 1998 21:05:47 +0000 (21:05 +0000)]
Massive changes for MDL expression.
Changes to tokens are in metScanner.l.  This includes adding of new
operators.  Some obsolete keywords are removed.
Changes to the mdl expression are in metParser.y.  Rules associated with
the instrumentation expression (obsolete) are removed and the mdl expression
is expanded.
Other files, mdl.C, mdl.h, metParse.h contain changes due to the grammer,
this includes support for new mdl expression types, etc.

23 years agoChanges due to MDL expression. Removed instr_rand and instr_req.
czhang [Mon, 19 Jan 1998 20:59:37 +0000 (20:59 +0000)]
Changes due to MDL expression.  Removed instr_rand and instr_req.

23 years agoChanges due to MDL expression. Things touched are mdl_expr, mdl_v_expr,
czhang [Mon, 19 Jan 1998 20:58:12 +0000 (20:58 +0000)]
Changes due to MDL expression.  Things touched are mdl_expr, mdl_v_expr,
mdl_icode.  instr_req and instr_rand are removed.

23 years agoMassive MDL changes on mdl_expr, and cleanups. Eliminated instr_req's and
czhang [Mon, 19 Jan 1998 20:54:21 +0000 (20:54 +0000)]
Massive MDL changes on mdl_expr, and cleanups.   Eliminated instr_req's and
instr_rand's.  More powerful MDL expressions.  For the new MDL expression
syntaxes, see core/paradyn/src/met/metParser.y.

23 years agopatch to fix exclude whole module
mcheyney [Thu, 15 Jan 1998 02:41:30 +0000 (02:41 +0000)]
patch to fix exclude whole module

23 years agoChange to NT-specific names
wylie [Fri, 9 Jan 1998 16:30:41 +0000 (16:30 +0000)]
Change to NT-specific names

23 years agoDictionaryLite -> Dictionary
wylie [Fri, 9 Jan 1998 16:23:41 +0000 (16:23 +0000)]
DictionaryLite -> Dictionary

23 years agoStandard ignores
wylie [Fri, 9 Jan 1998 16:17:53 +0000 (16:17 +0000)]
Standard ignores

23 years agoTidied header
wylie [Thu, 8 Jan 1998 20:00:59 +0000 (20:00 +0000)]
Tidied header

23 years agoIncorporation of dynInstAPI within NT build
wylie [Tue, 23 Dec 1997 19:18:33 +0000 (19:18 +0000)]
Incorporation of dynInstAPI within NT build

23 years agoIterator update (for NT/VC++)
wylie [Tue, 23 Dec 1997 19:00:28 +0000 (19:00 +0000)]
Iterator update (for NT/VC++)

23 years agoUn-"const"-ing of occasionally modified disItem in isFreeOK(), and source tidy
wylie [Tue, 23 Dec 1997 17:13:29 +0000 (17:13 +0000)]
Un-"const"-ing of occasionally modified disItem in isFreeOK(), and source tidy

23 years agoIncorporation of dynInstAPI in make "world" for nightly build
wylie [Mon, 22 Dec 1997 23:27:51 +0000 (23:27 +0000)]
Incorporation of dynInstAPI in make "world" for nightly build
(at least while make "nightly" target is not being used)

23 years agofix to my previous commit
newhall [Thu, 18 Dec 1997 22:25:46 +0000 (22:25 +0000)]
fix to my previous commit

23 years agoadd trace perfStreamHandle to disableDataCollection calls
newhall [Thu, 18 Dec 1997 17:08:02 +0000 (17:08 +0000)]
add trace perfStreamHandle to disableDataCollection calls

23 years agoadd trace perfStreamHandle to disableData calls
newhall [Thu, 18 Dec 1997 17:07:38 +0000 (17:07 +0000)]
add trace perfStreamHandle to disableData calls

23 years agoadded a perfStreamHandle argument to disableData so that trace data users that
newhall [Thu, 18 Dec 1997 17:06:40 +0000 (17:06 +0000)]
added a perfStreamHandle argument to disableData so that trace data users that
are added to a list using pt_handle on enable are removed from list also
using pt_handle on disable (the wrong handle was used previously)

23 years agoBug fix to assert failure that sometimes occured with the trace data stuff
newhall [Thu, 18 Dec 1997 17:06:38 +0000 (17:06 +0000)]
Bug fix to assert failure that sometimes occured with the trace data stuff
when data was disabled.  The problem was that trace users were being added
to list using one id, and removed using another, and code that incremented
a count in addTraceUser was commmented out, but corresponding code in
removeTraceUser that decremented a count was not.

23 years agoSource tidy-up of continued (multi-line) comments, etc.
wylie [Wed, 17 Dec 1997 23:20:24 +0000 (23:20 +0000)]
Source tidy-up of continued (multi-line) comments, etc.

23 years agoBrought Dyninst API up to date with latest changes in Paradyn.
buck [Wed, 17 Dec 1997 20:18:44 +0000 (20:18 +0000)]
Brought Dyninst API up to date with latest changes in Paradyn.

23 years agoStandard file
wylie [Tue, 16 Dec 1997 21:25:38 +0000 (21:25 +0000)]
Standard file

23 years agoStandard file (for NT-specific *.lib)
wylie [Tue, 16 Dec 1997 20:41:56 +0000 (20:41 +0000)]
Standard file (for NT-specific *.lib)

23 years agoConsistent "const"-ing of function parameters (to keep VC++ content),
wylie [Thu, 11 Dec 1997 21:11:45 +0000 (21:11 +0000)]
Consistent "const"-ing of function parameters (to keep VC++ content),
and a SymbolIter iterator update (for NT).

23 years agoConsistent "const"-ing of function parameters (to keep VC++ content)
wylie [Thu, 11 Dec 1997 21:01:25 +0000 (21:01 +0000)]
Consistent "const"-ing of function parameters (to keep VC++ content)

23 years agoFix the symbol reading error on Linux/X86
tung [Thu, 4 Dec 1997 23:48:23 +0000 (23:48 +0000)]
Fix the symbol reading error on Linux/X86

23 years agoFix the symbols reading problem on Linux/X86 platform
tung [Thu, 4 Dec 1997 23:46:49 +0000 (23:46 +0000)]
Fix the symbols reading problem on Linux/X86 platform

23 years agoAdded functions to differentiate between 'true' call instructions
mcheyney [Thu, 4 Dec 1997 18:49:36 +0000 (18:49 +0000)]
Added functions to differentiate between 'true' call instructions
(CALL - Opcode 01), and 'jmpl' call instructions (show up under
gdb disass as call, but really jmpl instructions, opcode != 01)....

23 years agoFixed problem Oscar found with instrumenting tail-call optimized
mcheyney [Thu, 4 Dec 1997 18:41:47 +0000 (18:41 +0000)]
Fixed problem Oscar found with instrumenting tail-call optimized
functions where the tail call optimization had form:

CALL (not JMPL, shows up in gdb disass as Call ABS_ADDR)
restore

Instead of form
JMPL (really JMPL instr, shows up in gdb disass as CALL %REGISTER)
restore.

23 years agobug fix to navigate menu
tamches [Thu, 4 Dec 1997 18:28:59 +0000 (18:28 +0000)]
bug fix to navigate menu

23 years agoFixed problem bwylie found with mdl.C for fully optimized code.
mcheyney [Wed, 3 Dec 1997 20:38:27 +0000 (20:38 +0000)]
Fixed problem bwylie found with mdl.C for fully optimized code.

23 years agoremoved log within file, which wasn't being updated anyway.
tamches [Tue, 2 Dec 1997 19:53:01 +0000 (19:53 +0000)]
removed log within file, which wasn't being updated anyway.

23 years agoload_object() changed: roundup4() used for sntext and sndata file offsets;
tamches [Tue, 2 Dec 1997 19:35:31 +0000 (19:35 +0000)]
load_object() changed: roundup4() used for sntext and sndata file offsets;
functions are associated with modules better now (repeated modules don't
freak the code out and cause a spurious error message telling the user
to recompile with -bnoobjreorder).  Note that -bnoobjreorder is still needed,
though now just for a single reason: to ensure that STARTCODE and ENDCODE
modules don't get moved around by the linker.

23 years agodisItemPoints no longer constant
tamches [Tue, 2 Dec 1997 19:33:14 +0000 (19:33 +0000)]
disItemPoints no longer constant

23 years agoadded copy-constructors
tamches [Tue, 2 Dec 1997 19:32:42 +0000 (19:32 +0000)]
added copy-constructors

23 years agofirst real version (being used by make.module.tmpl now)
tamches [Tue, 2 Dec 1997 19:32:00 +0000 (19:32 +0000)]
first real version (being used by make.module.tmpl now)

23 years agobeefed up comments
tamches [Tue, 2 Dec 1997 19:31:34 +0000 (19:31 +0000)]
beefed up comments

23 years agoremoved spinMutex code (wasn't being used)
tamches [Tue, 2 Dec 1997 19:31:05 +0000 (19:31 +0000)]
removed spinMutex code (wasn't being used)

23 years agoremoved this obsolete file
tamches [Tue, 2 Dec 1997 19:30:30 +0000 (19:30 +0000)]
removed this obsolete file

23 years agoadded setAddr() method (aix needs it)
tamches [Tue, 2 Dec 1997 19:30:09 +0000 (19:30 +0000)]
added setAddr() method (aix needs it)

23 years agoadded some comments. Made first and last members const.
tamches [Tue, 2 Dec 1997 19:29:51 +0000 (19:29 +0000)]
added some comments.  Made first and last members const.

23 years agoadded templates.C
tamches [Tue, 2 Dec 1997 19:29:24 +0000 (19:29 +0000)]
added templates.C

23 years ago*** empty log message ***
tung [Mon, 1 Dec 1997 02:32:33 +0000 (02:32 +0000)]
*** empty log message ***

23 years agoFor Linux/X86 port
tung [Mon, 1 Dec 1997 02:29:09 +0000 (02:29 +0000)]
For Linux/X86 port

23 years agoFor Linux/X86 Platform
tung [Mon, 1 Dec 1997 02:28:38 +0000 (02:28 +0000)]
For Linux/X86 Platform

23 years agoFor Linux/X86 platform
tung [Mon, 1 Dec 1997 02:27:52 +0000 (02:27 +0000)]
For Linux/X86 platform

23 years agoeliminate warnings
tung [Mon, 1 Dec 1997 02:23:40 +0000 (02:23 +0000)]
eliminate warnings

23 years agomodified for Linux/X86 Platform
tung [Mon, 1 Dec 1997 02:14:56 +0000 (02:14 +0000)]
modified for Linux/X86 Platform

23 years agoNew template stub required for NT pending Mike's commits
wylie [Fri, 28 Nov 1997 21:25:27 +0000 (21:25 +0000)]
New template stub required for NT pending Mike's commits

23 years agoInstallation copies continue through failures
wylie [Fri, 28 Nov 1997 21:17:38 +0000 (21:17 +0000)]
Installation copies continue through failures

23 years agoExtra debugging information in main.C
mcheyney [Wed, 26 Nov 1997 21:50:18 +0000 (21:50 +0000)]
Extra debugging information in main.C
Changed exclude syntax in mdl:
Old:
  exclude "module";  or
  exclude "module/function";

New:
  exclude "/Code/module"; or
  exclude "/Code/module/function";

Also added some better error messages for identifying cases where
 underlying process falls over.

23 years agoChanged syntax of exclude statement:
mcheyney [Wed, 26 Nov 1997 21:47:47 +0000 (21:47 +0000)]
Changed syntax of exclude statement:
Old:
  exclude "function"  or
  exclude "module/function"
New:
  exclude "/Code/module" or
  exclude "/Code/module/function"
Also some small mdl changes to make syntax a bit more transparent in
 a few places & get rid of a few warnings.

23 years ago*** empty log message ***
mcheyney [Wed, 26 Nov 1997 21:44:36 +0000 (21:44 +0000)]
*** empty log message ***

23 years agoOn ELF, can now compile w/o dyninstSTART and dyninstEND.
mcheyney [Wed, 26 Nov 1997 21:42:26 +0000 (21:42 +0000)]
On ELF, can now compile w/o dyninstSTART and dyninstEND.
Made exclude work for functions + modules in a.out (in addition
 to shared libs).
Unified symbol parsing code between dynamic and statically linked
 executables and code sections.
Merged many repeated code blocks into single functions.

23 years ago*** empty log message ***
tung [Wed, 26 Nov 1997 20:12:18 +0000 (20:12 +0000)]
*** empty log message ***

23 years agoModified for Linux/X86 platform - to fix the symbol reading error
tung [Wed, 26 Nov 1997 19:56:59 +0000 (19:56 +0000)]
Modified for Linux/X86 platform - to fix the symbol reading error

23 years agoFor Linux/X86 platform
tung [Wed, 26 Nov 1997 19:55:55 +0000 (19:55 +0000)]
For Linux/X86 platform

23 years agoAdded TR_SYNC to eliminate a race condition between checkProcStatus and
zhichen [Wed, 19 Nov 1997 20:27:45 +0000 (20:27 +0000)]
Added TR_SYNC to eliminate a race condition between checkProcStatus and
a select in paradynd main loop.

23 years agoAdded TR_SYNC to eliminate a race condition.
zhichen [Wed, 19 Nov 1997 20:26:02 +0000 (20:26 +0000)]
Added TR_SYNC to eliminate a race condition.

23 years agoAdded TR_SYNC, which is sent by DYNINSTbreakPoint right after call
zhichen [Wed, 19 Nov 1997 20:25:25 +0000 (20:25 +0000)]
Added TR_SYNC, which is sent by DYNINSTbreakPoint right after call
kill. This eliminates a race condition between select and
checkProcStatus

23 years agoRemoved (apparently unnecessary) separate compilation of templates-nt.C
wylie [Wed, 5 Nov 1997 02:33:42 +0000 (02:33 +0000)]
Removed (apparently unnecessary) separate compilation of templates-nt.C

23 years agoCosmetic correction/update
wylie [Wed, 5 Nov 1997 02:32:43 +0000 (02:32 +0000)]
Cosmetic correction/update

23 years agoAdded #include "paradyn/src/met/mdl.h" needed when compiling dyninstAPI.lib
wylie [Wed, 5 Nov 1997 02:30:57 +0000 (02:30 +0000)]
Added #include "paradyn/src/met/mdl.h" needed when compiling dyninstAPI.lib

23 years agoPartial undoing of Ari's modernization to declare and use uniquely named
wylie [Wed, 5 Nov 1997 01:19:11 +0000 (01:19 +0000)]
Partial undoing of Ari's modernization to declare and use uniquely named
iterators for "for" blocks within the same function, due to an
unfortunate bug in the VC++ v5.0 compiler (though since it's nicely
documented in the manual, presumably it's considered a feature)