]> git.saurik.com Git - apple/objc4.git/blobdiff - runtime/objc-auto-dump.h
objc4-437.tar.gz
[apple/objc4.git] / runtime / objc-auto-dump.h
diff --git a/runtime/objc-auto-dump.h b/runtime/objc-auto-dump.h
new file mode 100644 (file)
index 0000000..9b531d2
--- /dev/null
@@ -0,0 +1,53 @@
+//
+//  objc-auto-dump.h
+//  objc
+//  The raw dump file format
+//  See objc-gdb.h for the primitive.
+//
+//  Created by Blaine Garst on 12/8/08.
+//  Copyright 2008 Apple, Inc. All rights reserved.
+//
+
+
+/*
+ *  Raw file format definitions
+ */
+// must be unique in first letter...
+// RAW FORMAT
+#define HEADER      "dumpster"
+#define THREAD      't'
+#define LOCAL       'l'
+#define NODE        'n'
+#define REGISTER    'r'
+#define ROOT        'g'
+#define WEAK        'w'
+#define CLASS       'c'
+#define END         'e'
+
+#define SixtyFour 1
+#define Little    2
+
+/*
+
+Raw format, not that anyone should really care.  Most programs should use the cooked file reader.
+
+<rawfile := <header> <arch> <middle>* <end>
+<header> :=  'd' 'u' 'm' 'p' 's' 't' 'e' 'r'                    ; the HEADER string
+<arch>   :=  SixtyFour? + Little?                               ; architecture
+<middle> := <thread> | <root> | <node> | <weak> | <class>
+<thread> := <register> <stack> <local>*                         ; the triple
+<register>      := 'r' longLength [bytes]                       ; the register bank
+<stack>         := 't' longLength [bytes]                       ; the stack
+<local>         := 'l' [long]                                   ; a thread local node
+<root>          := 'g' longAddress longValue
+<node>          := 'n' longAddress longSize intLayout longRefcount longIsa?
+<weak>          := 'w' longAddress longValue
+<class>         := 'c' longAddress <name> <strongLayout> <weakLayout>
+<name>          := intLength [bytes]                            ; no null byte
+<strongLayout>  := intLength [bytes]                            ; including 0 byte at end
+<weakLayout>    := intLength [bytes]                            ; including 0 byte at end
+<end>           := 'e'
+
+ */
+