dyninst.git
24 years ago- Modified to use PTRACE_PEEKUSER and PTRACE_POKEUSER, which are more
nash [Tue, 23 Feb 1999 22:13:40 +0000 (22:13 +0000)]
- Modified to use PTRACE_PEEKUSER and PTRACE_POKEUSER, which are more
correct names than PTRACE_PEEKUSR and PTRACE_POKEUSR
- Directly include asm/ptrace.h, for setups where sys/ptrace.h doesn't
include this

24 years ago- Fixed a missing include on some machines
nash [Mon, 22 Feb 1999 21:58:11 +0000 (21:58 +0000)]
- Fixed a missing include on some machines

24 years agoChanged make.config to compile linux dynInstAPI as a dynamic library.
nash [Tue, 16 Feb 1999 19:55:30 +0000 (19:55 +0000)]
Changed make.config to compile linux dynInstAPI as a dynamic library.

24 years agoSubstituted DebugBreak for kill(STOP) on WindowsNT
paradyn [Thu, 11 Feb 1999 16:54:26 +0000 (16:54 +0000)]
Substituted DebugBreak for kill(STOP) on WindowsNT

24 years ago- Updates for Linux-x86
nash [Mon, 8 Feb 1999 14:10:19 +0000 (14:10 +0000)]
- Updates for Linux-x86
- Fixed test2 at actuall use attach method when given -attach

24 years ago- Fixes for error/warnings in egcs 1.1
nash [Mon, 8 Feb 1999 14:08:15 +0000 (14:08 +0000)]
- Fixes for error/warnings in egcs 1.1

24 years ago- Linux-x86 support changes
nash [Mon, 8 Feb 1999 14:06:22 +0000 (14:06 +0000)]
- Linux-x86 support changes
- Changed makenan to pull from /usr/include on Linux

24 years ago- Changed hist.h to use new makenan macro
nash [Mon, 8 Feb 1999 14:05:27 +0000 (14:05 +0000)]
- Changed hist.h to use new makenan macro
- Changed makenan to use the correct constant from /usr/include on Linux

24 years ago- Major commit of Linux-x86 platform support
nash [Mon, 8 Feb 1999 14:04:05 +0000 (14:04 +0000)]
- Major commit of Linux-x86 platform support

24 years ago- Added init-linux.C
nash [Mon, 8 Feb 1999 14:03:04 +0000 (14:03 +0000)]
- Added init-linux.C
- Type fixes for egcs 1.1  bool -> bool_t, mainly

24 years ago- Type fix for egcs 1.1 bool -> bool_t
nash [Mon, 8 Feb 1999 14:01:42 +0000 (14:01 +0000)]
- Type fix for egcs 1.1   bool -> bool_t

24 years ago- Major commit of changes for Linux-x86 support.
nash [Mon, 8 Feb 1999 13:57:24 +0000 (13:57 +0000)]
- Major commit of changes for Linux-x86 support.

24 years agoAdding RTlinux.c
nash [Wed, 27 Jan 1999 20:02:57 +0000 (20:02 +0000)]
Adding RTlinux.c

24 years agoRedefined the RegValue (register content) type to "long" from "int"
wylie [Sun, 24 Jan 1999 00:13:52 +0000 (00:13 +0000)]
Redefined the RegValue (register content) type to "long" from "int"
(which should be more generally appropriate for the purpose).

24 years agoTidy
wylie [Sun, 24 Jan 1999 00:12:48 +0000 (00:12 +0000)]
Tidy

24 years agoGeneral tidy-up explicitly initializing things before they are used.
wylie [Sun, 24 Jan 1999 00:12:18 +0000 (00:12 +0000)]
General tidy-up explicitly initializing things before they are used.
The somewhat curiously named "destroy" method of mdl_var, used in the
initialization of mdl_var's was also renamed "reset" for sanity.

24 years agoStrict initializations (where they were once missing) and general tidy-up.
wylie [Thu, 21 Jan 1999 23:22:13 +0000 (23:22 +0000)]
Strict initializations (where they were once missing) and general tidy-up.

24 years agoTidy (for pedantic compiler Insure++)
wylie [Thu, 21 Jan 1999 20:57:24 +0000 (20:57 +0000)]
Tidy (for pedantic compiler Insure++)

24 years agoConditionalized unlink of traceSocketPath, which isn't used on NT
wylie [Thu, 21 Jan 1999 20:56:22 +0000 (20:56 +0000)]
Conditionalized unlink of traceSocketPath, which isn't used on NT

24 years agoTidy (mostly for pedantic compilers such as Insure++)
wylie [Thu, 21 Jan 1999 20:52:34 +0000 (20:52 +0000)]
Tidy (mostly for pedantic compilers such as Insure++)

24 years agoConditionalized delete of theStruct.savedRegs which are an array on most
wylie [Thu, 21 Jan 1999 20:51:50 +0000 (20:51 +0000)]
Conditionalized delete of theStruct.savedRegs which are an array on most
platforms but not on WindowsNT.

24 years agoTidy
wylie [Thu, 21 Jan 1999 20:50:44 +0000 (20:50 +0000)]
Tidy

24 years agoPurification
wylie [Thu, 21 Jan 1999 20:22:32 +0000 (20:22 +0000)]
Purification

24 years agoFMMs caught by Insure++ fixed (NB: missed by Purify6NT!)
wylie [Thu, 21 Jan 1999 20:20:47 +0000 (20:20 +0000)]
FMMs caught by Insure++ fixed (NB: missed by Purify6NT!)

24 years agoRemoved apparently obsolete "-DCRTAPI1=_cdecl -DCRTAPI2=_cdecl" from CXXFLAGS
paradyn [Thu, 21 Jan 1999 20:18:11 +0000 (20:18 +0000)]
Removed apparently obsolete "-DCRTAPI1=_cdecl -DCRTAPI2=_cdecl" from CXXFLAGS

24 years agoReturn value fix (void* return -1 not allowed by VC++)
paradyn [Thu, 21 Jan 1999 20:17:13 +0000 (20:17 +0000)]
Return value fix (void* return -1 not allowed by VC++)

24 years agoPatch to allow build on WindowsNT
paradyn [Thu, 21 Jan 1999 20:16:13 +0000 (20:16 +0000)]
Patch to allow build on WindowsNT

24 years agooneTime code for Alpha, and arbitrary inst. points.
hollings [Thu, 21 Jan 1999 01:26:37 +0000 (01:26 +0000)]
oneTime code for Alpha, and arbitrary inst. points.

24 years agoNew file for long loading functions that were in a .h file.
hollings [Wed, 20 Jan 1999 22:21:53 +0000 (22:21 +0000)]
New file for long loading functions that were in a .h file.

24 years agoMoved long functions to seperate .C file
hollings [Wed, 20 Jan 1999 22:21:11 +0000 (22:21 +0000)]
Moved long functions to seperate .C file

24 years agoAdded saved conservative to ensure all registers saved for arbitrary code
hollings [Wed, 20 Jan 1999 22:20:31 +0000 (22:20 +0000)]
Added saved conservative to ensure all registers saved for arbitrary code

24 years agoAdded test for oneTime code on a running process.
hollings [Wed, 20 Jan 1999 22:19:26 +0000 (22:19 +0000)]
Added test for oneTime code on a running process.

24 years agocomment correction
wylie [Sat, 26 Dec 1998 18:48:38 +0000 (18:48 +0000)]
comment correction

24 years agoone more u_int->Address
wylie [Sat, 26 Dec 1998 18:21:45 +0000 (18:21 +0000)]
one more u_int->Address

24 years agoAddress typing
wylie [Fri, 25 Dec 1998 23:33:35 +0000 (23:33 +0000)]
Address typing

24 years agoAdded PURE_BUILD support and retyped Addresses
wylie [Fri, 25 Dec 1998 23:32:50 +0000 (23:32 +0000)]
Added PURE_BUILD support and retyped Addresses

24 years agoRetyped RPC return types
wylie [Fri, 25 Dec 1998 23:32:23 +0000 (23:32 +0000)]
Retyped RPC return types

24 years agoFixed compiler warnings
wylie [Fri, 25 Dec 1998 23:30:22 +0000 (23:30 +0000)]
Fixed compiler warnings

24 years agoFixed typos.
wylie [Fri, 25 Dec 1998 23:26:39 +0000 (23:26 +0000)]
Fixed typos.

24 years agoCorrected typing of main()
wylie [Fri, 25 Dec 1998 23:24:55 +0000 (23:24 +0000)]
Corrected typing of main()

24 years agoCorrected readOnlyRegister().
wylie [Fri, 25 Dec 1998 23:23:20 +0000 (23:23 +0000)]
Corrected readOnlyRegister().

General tidy-up of Address and Register/RegValue typing (replacing the
previously ambigiously used "reg" which didn't distinguish between
register number/identifier and contents), particularly in the
replacement of the polymorphic "emit" function with a family of typed
equivalents.

24 years agoFixed the FMM (free memory mismatch) corruption in installBaseTramp()
wylie [Fri, 25 Dec 1998 23:21:58 +0000 (23:21 +0000)]
Fixed the FMM (free memory mismatch) corruption in installBaseTramp()
reported by Purify6 on WindowsNT (but also affecting x86-Solaris).

General tidy-up of Address and Register/RegValue typing (replacing the
previously ambigiously used "reg" which didn't distinguish between
register number/identifier and contents), particularly in the
replacement of the polymorphic "emit" function with a family of typed
equivalents.

24 years agoGeneral tidy-up of Address and Register/RegValue typing (replacing the
wylie [Fri, 25 Dec 1998 23:18:43 +0000 (23:18 +0000)]
General tidy-up of Address and Register/RegValue typing (replacing the
previously ambigiously used "reg" which didn't distinguish between
register number/identifier and contents), particularly in the
replacement of the polymorphic "emit" function with a family of typed
equivalents.

24 years agoAddress typing and general tidy-up.
wylie [Fri, 25 Dec 1998 22:34:51 +0000 (22:34 +0000)]
Address typing and general tidy-up.

24 years agoAddress and Register typing and general tidy-up.
wylie [Fri, 25 Dec 1998 22:34:22 +0000 (22:34 +0000)]
Address and Register typing and general tidy-up.

24 years agoconst'ing
wylie [Fri, 25 Dec 1998 22:33:48 +0000 (22:33 +0000)]
const'ing

24 years agoSize/size bugfix and Address typing
wylie [Fri, 25 Dec 1998 22:32:37 +0000 (22:32 +0000)]
Size/size bugfix and Address typing

24 years agoAddress typing
wylie [Fri, 25 Dec 1998 22:31:58 +0000 (22:31 +0000)]
Address typing

24 years agoread/writeTestSpace interface fixup (int amount -> unsigned)
wylie [Fri, 25 Dec 1998 22:30:16 +0000 (22:30 +0000)]
read/writeTestSpace interface fixup (int amount -> unsigned)

24 years agoptrace() fix-up and Address and Register typing.
wylie [Fri, 25 Dec 1998 22:29:02 +0000 (22:29 +0000)]
ptrace() fix-up and Address and Register typing.

24 years agoAdded PURE_BUILD support, Address and Register typing and general tidy-up.
wylie [Fri, 25 Dec 1998 22:26:58 +0000 (22:26 +0000)]
Added PURE_BUILD support, Address and Register typing and general tidy-up.

24 years agoAdded PURE_BUILD support, Address fixup and general tidy-up.
wylie [Fri, 25 Dec 1998 22:20:40 +0000 (22:20 +0000)]
Added PURE_BUILD support, Address fixup and general tidy-up.

24 years agoMade const R_BRK_SAVE_BYTES member of dynamic_linking class static, as
wylie [Fri, 25 Dec 1998 22:19:08 +0000 (22:19 +0000)]
Made const R_BRK_SAVE_BYTES member of dynamic_linking class static, as
required by ANSI C++ standard (and egcs-1.1) and to avoid an insidious bug
in the debug symbol generation of egcs-1.0.3 on x86-Solaris.
Address fixup.

24 years agoConsistent use of Address type.
wylie [Fri, 25 Dec 1998 22:13:18 +0000 (22:13 +0000)]
Consistent use of Address type.

24 years agoConsistent use of Address and Register types.
wylie [Fri, 25 Dec 1998 22:12:17 +0000 (22:12 +0000)]
Consistent use of Address and Register types.
Changed RPC return types to void* to support Address return.
General tidy-up.

24 years agoTidy-up
wylie [Fri, 25 Dec 1998 22:09:17 +0000 (22:09 +0000)]
Tidy-up

24 years agoConsistent use of Address and Register types.
wylie [Fri, 25 Dec 1998 22:08:18 +0000 (22:08 +0000)]
Consistent use of Address and Register types.
Tidy-up to suppress compiler warnings.

24 years agoAddress typing and suppression of compiler warnings.
wylie [Fri, 25 Dec 1998 22:06:13 +0000 (22:06 +0000)]
Address typing and suppression of compiler warnings.
Use of utillib's symbol_compare function instead of a local copy.

24 years agoAddress typing and suppression of compiler warnings
wylie [Fri, 25 Dec 1998 22:04:57 +0000 (22:04 +0000)]
Address typing and suppression of compiler warnings

24 years agoNew Address and Register templates
wylie [Fri, 25 Dec 1998 22:04:03 +0000 (22:04 +0000)]
New Address and Register templates

24 years agoAddress usage
wylie [Fri, 25 Dec 1998 22:03:17 +0000 (22:03 +0000)]
Address usage

24 years agoTidy
wylie [Fri, 25 Dec 1998 22:02:06 +0000 (22:02 +0000)]
Tidy

24 years agoSuppression of various compiler warnings.
wylie [Fri, 25 Dec 1998 21:58:03 +0000 (21:58 +0000)]
Suppression of various compiler warnings.

24 years agoChange of RPC return type to void* (to be able to return an Address).
wylie [Fri, 25 Dec 1998 21:57:27 +0000 (21:57 +0000)]
Change of RPC return type to void* (to be able to return an Address).
Address typing and suppression of various compiler warnings.

24 years agoChange of RPC return type from unsigned to void* (to be able to return
wylie [Fri, 25 Dec 1998 21:55:25 +0000 (21:55 +0000)]
Change of RPC return type from unsigned to void* (to be able to return
a 64-bit Address)

24 years agoConsistent usage of Address type.
wylie [Fri, 25 Dec 1998 21:49:43 +0000 (21:49 +0000)]
Consistent usage of Address type.
Consistent symbol_compare function/interface.
General tidy.

24 years agoConsistent usage of Address type
wylie [Fri, 25 Dec 1998 21:48:33 +0000 (21:48 +0000)]
Consistent usage of Address type

24 years agotypedef'd Address to "unsigned long int" for all platforms, with the
wylie [Fri, 25 Dec 1998 21:47:23 +0000 (21:47 +0000)]
typedef'd Address to "unsigned long int" for all platforms, with the
inherent assumption that the size of a "long" integer matches that of
an address (void*) on every supported Paradyn/DynInst system and
changes according to appropriate compiler directives on systems which
support both 32- and 64-bit builds.  (Note that while this is
apparently OK for Unix, it is not true for Windows/VC++ where longs are
always 32-bits, even when addresses are 64-bits.)

Moved/renamed the apparently ambiguous "reg" typedef (int) from various
places and defined here new Register and RegValue typedefs for register
identifiers (unsigned char, Null_Register=255) and register contents (int).
Note that RegValue is not generally capable of holding an Address.

24 years agoAdded Id
wylie [Fri, 25 Dec 1998 21:35:34 +0000 (21:35 +0000)]
Added Id

24 years agoAdded ptrace interface definition (apparently missing from <sys/ptrace.h>
wylie [Fri, 25 Dec 1998 21:35:01 +0000 (21:35 +0000)]
Added ptrace interface definition (apparently missing from <sys/ptrace.h>
on CompaqUnix platforms) and corrected usage

24 years agoAddress-typing
wylie [Fri, 25 Dec 1998 21:33:06 +0000 (21:33 +0000)]
Address-typing
Consistent symbol_compare function

24 years agoAdded Types.C
wylie [Fri, 25 Dec 1998 21:31:37 +0000 (21:31 +0000)]
Added Types.C

24 years agoAddress checking and printing functions (which should really be part of
wylie [Fri, 25 Dec 1998 21:30:57 +0000 (21:30 +0000)]
Address checking and printing functions (which should really be part of
an Address class, but at least for now Address is only a typedef)

24 years agoAdded USING_PURIFY/PURE_BUILD support
wylie [Fri, 25 Dec 1998 21:25:52 +0000 (21:25 +0000)]
Added USING_PURIFY/PURE_BUILD support

24 years agoObsolete SunOS-support components
wylie [Mon, 14 Dec 1998 22:54:18 +0000 (22:54 +0000)]
Obsolete SunOS-support components

25 years ago Commit to fix problems with paradynd on UltraSparc machines
mcheyney [Mon, 26 Oct 1998 23:02:59 +0000 (23:02 +0000)]
Commit to fix problems with paradynd on UltraSparc machines
running Solaris2.6

This is intended as a *partial* fix - it addresses *some*
(but *not* all) of the known problems with the sparc-solaris as
applied to solaris 2.6 on UltraSparc.  The idea is to allow
people to try to migrate to using the Solaris2.6 UltraSparc
machines - without trying to handle all the new UltraSparc
instructions and type migration issues.

I changed the dyninstAPI and paradynd to the point where
they come up on solaris2.6, and work for simple things in our test
applications : namely - instrumenting user code in general, and the
library functions used in the I/O and synch metrics, and those
automatically instrumented by paradyn in DYNINSTinit.  There are still
some libc functions (e.g. _malloc_unlocked) which are not instrumented
correctly.  In general, the changes *should* bring paradynd up
to the point where if you exclude libc, you should be ok.

Anyway, here is the list of known problems, both addressed
and not addressed:

ADDRESSED;
  - multiple instpoints found at the same address
    causes (newly-introduced) assertion failure
    example instance: ? (one of the standard libraries)
   fixed
 - restore with add side-effect
   fixed (see e.g. _exithandle)
 - calls designed to set O7 being marked as call sites (in non-relocated functions)
   fixed
 - unsupported return type warning (ret to call address + 16)
   fixed
 - I/O metrics broken
   fixed
 - instrumenting memory allocation breaks app
   bug # 1 - instrumenting _smalloc
    fixed (problem instrumenting _smalloc)
   bug # 2 - instrumenting _malloc_unlocked causes infinite recursion
    ???? - problem occurs in _malloc_unlocked (see below) - why????
    NOT fixed (don't try to instrument _malloc_unlocked)

NOT ADDRESSED:
 - "impdep" instructions:
 - nonoptimal "restore;retl" return
 - Type migration: 64-bit Address and Register types
 - 64-bit addressing instructions?
 - General paradyn problem that functions are identified by function_name, not
    by module_name/function_name can cause paradyn to instrument libc fork
    when libthread fork is the fork which is actually used - this can cause
    paradyn to miss calls to fork for some multi-process applications.

25 years agoAdded LocalAlteration.C & LocalAlteration-Sparc.C to srcs
mcheyney [Mon, 28 Sep 1998 18:02:16 +0000 (18:02 +0000)]
Added LocalAlteration.C & LocalAlteration-Sparc.C to srcs

25 years agoNew files describing the LocalAlteration abstarction for rewriting
mcheyney [Sat, 19 Sep 1998 21:03:36 +0000 (21:03 +0000)]
New files describing the LocalAlteration abstarction for rewriting
relocated functions.  The -Sparc versions provide a class hierarchy
for the types of patterns (old -> new code translation) currently
supported on SPARC:
 - a tail-call optimization hierarchy descibing call-restore & jmp-nop
 tail calls.
 - a NOP expansion used for opening up space inside functions - e.g.
 when inst points overlap.
 - a SetO7 used to preserve the semantics of setting the 07 register
 using a call to PC + 8.
These subclasses are used to rewrite SPARC function in the code called
under (the new version of) findNewInstPoints in inst-sparc-solaris.C.

25 years agoChanges to use the LocalAlteration abstraction to rewrite functions
mcheyney [Sat, 19 Sep 1998 20:56:03 +0000 (20:56 +0000)]
Changes to use the LocalAlteration abstraction to rewrite functions
when they are relocated, instead of doing it ad-hoc.
This committed version is the newest-version, which keeps
only minimal additionmal state for non-relocated functions,
and builds a new LocalAlteration set for a function on demand
when the function is relocated - using the original set of
inst points of the function.

25 years agoDon't delete the process object in the destructor for BPatch_thread.
buck [Fri, 18 Sep 1998 18:23:22 +0000 (18:23 +0000)]
Don't delete the process object in the destructor for BPatch_thread.

25 years agoIncremented RELEASE_NUM (for release!)
wylie [Wed, 16 Sep 1998 16:23:37 +0000 (16:23 +0000)]
Incremented RELEASE_NUM (for release!)

25 years agoChange to not include files from rtinst/h when compiling for Dyninst API.
buck [Tue, 15 Sep 1998 20:50:56 +0000 (20:50 +0000)]
Change to not include files from rtinst/h when compiling for Dyninst API.

25 years agoChange version number in makefiles.
buck [Tue, 15 Sep 1998 18:42:49 +0000 (18:42 +0000)]
Change version number in makefiles.

25 years agoMiscellaneous fixes to correct compilation errors on Visual C++.
buck [Tue, 15 Sep 1998 18:32:06 +0000 (18:32 +0000)]
Miscellaneous fixes to correct compilation errors on Visual C++.

25 years agoPut a return after the assert at the end of createInstPointAtAddr, to
buck [Tue, 15 Sep 1998 18:01:04 +0000 (18:01 +0000)]
Put a return after the assert at the end of createInstPointAtAddr, to
satisfy Visual C++ on Windows NT.

25 years agoUn-const'd modified structure
paradyn [Tue, 15 Sep 1998 13:51:49 +0000 (13:51 +0000)]
Un-const'd modified structure

25 years agoCommit of changes for Dyninst API version 1.2. Includes support for
buck [Tue, 15 Sep 1998 04:15:34 +0000 (04:15 +0000)]
Commit of changes for Dyninst API version 1.2.  Includes support for
instrumentation at arbitrary points on AIX, and the addition of various
minor API calls.

25 years agoTurn -O3 back on for DEC Alpha plaform.
buck [Tue, 15 Sep 1998 04:13:34 +0000 (04:13 +0000)]
Turn -O3 back on for DEC Alpha plaform.

25 years agoAdd alpha_dec_osf4_0 to the list of platforms that do not support attach.
buck [Wed, 9 Sep 1998 23:23:37 +0000 (23:23 +0000)]
Add alpha_dec_osf4_0 to the list of platforms that do not support attach.

25 years agoFix detecting the death on a mutatee process on Alpha.
buck [Wed, 9 Sep 1998 23:23:13 +0000 (23:23 +0000)]
Fix detecting the death on a mutatee process on Alpha.

25 years agoWe now skip test #19 on the Alpha (oneShotCode, which is not
buck [Wed, 9 Sep 1998 03:39:39 +0000 (03:39 +0000)]
We now skip test #19 on the Alpha (oneShotCode, which is not
yet implemented on that platform).

25 years agoUpdated to work with the new parameter to generateCode.
buck [Wed, 9 Sep 1998 03:38:24 +0000 (03:38 +0000)]
Updated to work with the new parameter to generateCode.

25 years agoChanged some types from "unsigned" to "Address," to fix things up for
buck [Tue, 8 Sep 1998 21:35:27 +0000 (21:35 +0000)]
Changed some types from "unsigned" to "Address," to fix things up for
64-bit architectures.

25 years agoAdditional build targets for convenience: ParadynD ParadynFE & ParadynVC
wylie [Wed, 2 Sep 1998 22:03:57 +0000 (22:03 +0000)]
Additional build targets for convenience: ParadynD ParadynFE & ParadynVC

25 years agoAdditional template instances and dummy visualizationUser functions
wylie [Wed, 2 Sep 1998 21:56:40 +0000 (21:56 +0000)]
Additional template instances and dummy visualizationUser functions
(required when building with EGCS on AIX)

25 years agoTemplate instances moved to API (where they're also needed under EGCS-AIX)
wylie [Wed, 2 Sep 1998 21:43:55 +0000 (21:43 +0000)]
Template instances moved to API (where they're also needed under EGCS-AIX)

25 years agoAdditional templates for EGCS-AIX
wylie [Wed, 2 Sep 1998 21:42:15 +0000 (21:42 +0000)]
Additional templates for EGCS-AIX

25 years agoAn additional template for EGCS-AIX
wylie [Wed, 2 Sep 1998 21:35:55 +0000 (21:35 +0000)]
An additional template for EGCS-AIX

25 years agoA few additional template instances (apparently needed by egcs on AIX)
wylie [Wed, 2 Sep 1998 21:34:56 +0000 (21:34 +0000)]
A few additional template instances (apparently needed by egcs on AIX)

25 years agoTidy and compiler pacification.
wylie [Wed, 2 Sep 1998 21:13:22 +0000 (21:13 +0000)]
Tidy and compiler pacification.