The following is a pseudo-BNF description of the LCF syntax.
LCF-FILE ::= HEADER-LINE
PROGRAM-INFO
[PROGRAM-INFO]...
HEADER_LINE ::= '+++PARALLEL TOOLS CONSORTIUM LIGHTWEIGHT
COREFILE FORMAT version 1.0' [ignored] '\n'
PROGRAM-INFO ::= '+++LCB' [date-time-info] [ignored] '\n'
[SECTION] ...
'---LCB' [ignored] '\n'
SECTION ::= '+++ID' node/process/thread_id_string '\n'
[FAULT-INFO]
STACK-INFO
'---ID' [ignored] '\n'
FAULT-INFO ::= '***FAULT' msg_string '\n'
STACK-INFO ::= '+++STACK' '\n'
[STACK-LINE]...
'---STACK' '\n'
::= '***STACK' [STACK-ENTRY] '\n'
STACK-LINE ::= STACK-ENTRY [ignored] '\n'
::= '\n'
STACK-ENTRY ::= routine-name ':' line-num
Notes:
(a) Comment lines (those with '#' in the first column) may
appear anywhere and will be ignored.
(b) There will be a SECTION for every node, process, and/or
thread for which execution data is available. A
'*** STACK' line with no STACK-ENTRY data signifies
that the entire stack is inaccessible or corrupted;
an empty STACK-LINE is used when the remainder of the
(partially available) stack is corrupted.
(c) If file is the result of a program failure, at least one
section will include a FAULT-INFO line.
(d) To improve readability, the section identifier (string
following ID on first line in SECTION) may be repeated
on the matching trailer line.
An example of a standard-format LCF file follows.
+++PARALLEL TOOLS CONSORTIUM LIGHTWEIGHT COREFILE FORMAT version 1.0 +++LCB 1.0 14:32.40 EXAMPLE FILE - INFO FROM ONE POINT IN EXECUTION # Node 0 info +++ID Node 0 Process 12710 +++STACK RANDS9:47 ROTVEC:28 RANDS7:38 SCALARPRO:48 ZVECT:59 MAIN_CG2:4 ---STACK ---ID +++ID Node 1 Process 11460 +++STACK # Note use of optional whitespace RANDS9 : 32 ROTVEC : 28 RANDS7 : 38 SCALARPRO : 48 ZVECT : 59 MAIN_CG2 : 4 ---STACK ---ID # Node 2 was the failing node +++ID Node 2 Process 11622 ***FAULT "Bus error (core dumped)" +++STACK ROTVEC:31 RANDS7:38 SCALARPRO:48 ZVECT:59 MAIN_CG2:4 ---STACK ---ID Node 2 Process 11622 ---LCB