ftmemsim-valgrind/drd/docs/drd-xml-output.xsd
Bart Van Assche 7ee7cc8779 drd, XML: add xsd schema description and a script to verify the DRD XML output against the xsd
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12147
2011-10-13 18:16:29 +00:00

183 lines
6.1 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- Header printed by Valgrind tool as multiple lines of text -->
<xs:complexType name="vgPreamble">
<xs:sequence>
<xs:element name="line" type="xs:string"
minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<!-- Executable path and arguments -->
<xs:complexType name="vgExeAndArgs">
<xs:sequence>
<xs:element name="exe" type="xs:string"/>
<xs:element name="arg" type="xs:string"
minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<!-- Valgrind tool and client executable path and arguments -->
<xs:complexType name="vgArgs">
<xs:sequence>
<xs:element name="vargv" type="vgExeAndArgs"/>
<xs:element name="argv" type="vgExeAndArgs"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="vgSchedState">
<xs:restriction base="xs:string">
<xs:enumeration value="RUNNING"/>
<xs:enumeration value="FINISHED"/>
</xs:restriction>
</xs:simpleType>
<!-- Valgrind scheduler state and time at which a state has been reached -->
<xs:complexType name="vgSchedulerStatus">
<xs:sequence>
<xs:element name="state" type="vgSchedState"/>
<xs:element name="time" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<!-- Client call stack -->
<xs:complexType name="vgStack">
<xs:sequence>
<xs:element name="frame" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="ip" type="xs:string"/>
<xs:element name="obj" type="xs:string" minOccurs="0"/>
<xs:element name="fn" type="xs:string" minOccurs="0"/>
<xs:element name="dir" type="xs:string" minOccurs="0"/>
<xs:element name="file" type="xs:string" minOccurs="0"/>
<xs:element name="line" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="vgErrorCount">
<xs:sequence>
<xs:element name="pair" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="count" type="xs:integer"/>
<xs:element name="unique" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="vgSuppCount">
<xs:sequence>
<xs:element name="pair" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="count" type="xs:integer"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="drdErrorKind">
<xs:restriction base="xs:string">
<xs:enumeration value="ConflictingAccess"/>
<xs:enumeration value="MutexErr"/>
<xs:enumeration value="CondErr"/>
<xs:enumeration value="CondDestrErr"/>
<xs:enumeration value="CondRaceErr"/>
<xs:enumeration value="CondWaitErr"/>
<xs:enumeration value="SemaphoreErr"/>
<xs:enumeration value="BarrierErr"/>
<xs:enumeration value="RwlockErr"/>
<xs:enumeration value="HoldtimeErr"/>
<xs:enumeration value="GenericErr"/>
<xs:enumeration value="InvalidThreadId"/>
<xs:enumeration value="UnimpHgClReq"/>
<xs:enumeration value="UnimpDrdClReq"/>
</xs:restriction>
</xs:simpleType>
<!-- Single line of trace information with an optional call stack -->
<xs:complexType name="drdTrace">
<xs:sequence>
<xs:element name="text" type="xs:string"/>
<xs:element name="stack" type="vgStack" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<!-- Context information about a DRD error -->
<xs:complexType name="drdContext">
<xs:sequence>
<xs:element name="what" type="xs:string" minOccurs="0"/>
<xs:element name="address" type="xs:string" minOccurs="0"/>
<xs:element name="stack" type="vgStack"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="drdError">
<xs:sequence>
<xs:element name="unique" type="xs:string"/>
<xs:element name="tid" type="xs:integer"/>
<xs:element name="kind" type="drdErrorKind"/>
<xs:element name="acquired_at" type="drdContext" minOccurs="0"/>
<xs:element name="what" type="xs:string"/>
<xs:element name="stack" type="vgStack"/>
<xs:element name="auxwhat" type="xs:string" minOccurs="0"/>
<xs:element name="allocation_context" minOccurs="0"/>
<xs:element name="confl_wait_call" type="drdContext"
minOccurs="0"/>
<xs:element name="first_observed_at" type="drdContext"
minOccurs="0" maxOccurs="3"/>
<xs:element name="xauxwhat" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="text" type="xs:string"/>
<xs:element name="file" type="xs:string"/>
<xs:element name="line" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="other_segment_start" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="stack" type="vgStack" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="other_segment_end" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="stack" type="vgStack" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:element name="valgrindoutput">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="protocolversion" type="xs:string"/>
<xs:element name="protocoltool" type="xs:string"/>
<xs:element name="preamble" type="vgPreamble"/>
<xs:element name="pid" type="xs:string"/>
<xs:element name="ppid" type="xs:string"/>
<xs:element name="tool" type="xs:string"/>
<xs:element name="args" type="vgArgs"/>
<xs:element name="trace" type="drdTrace"/>
<xs:element name="error" type="drdError"
minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="status" type="vgSchedulerStatus"/>
<xs:element name="errorcounts" type="vgErrorCount"/>
<xs:element name="suppcounts" type="vgSuppCount" minOccurs="0"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>