Line 22: |
Line 22: |
| == Functionality == | | == Functionality == |
| | | |
− | === Convert images to human-readable and back === | + | === Convert images to JSON and back === |
| This is the replacement for (rather nasty) criu show code. Also this is the way to edit the images before restoring from them. | | This is the replacement for (rather nasty) criu show code. Also this is the way to edit the images before restoring from them. |
| | | |
Line 47: |
Line 47: |
| </pre> | | </pre> |
| | | |
− | So, here is how core file will look like with --format nice:
| |
− | <pre>
| |
− | #CORE
| |
− | #0 core_entry
| |
− | mtype: X86_64
| |
− | thread_info {
| |
− | clear_tid_addr: 0
| |
− | gpregs {
| |
− | r15: 0
| |
− | r14: 19884608
| |
− | r13: 1
| |
− | r12: 0
| |
− | bp: 19879232
| |
− | bx: 0
| |
− | r11: 582
| |
− | r10: 0
| |
− | r9: 0
| |
− | r8: 19879232
| |
− | ax: 61
| |
− | cx: 18446744073709551615
| |
− | dx: 0
| |
− | si: 140733241187376
| |
− | di: 18446744073709551615
| |
− | orig_ax: 61
| |
− | ip: 213251769082
| |
− | cs: 51
| |
− | flags: 582
| |
− | sp: 140733241187336
| |
− | ss: 43
| |
− | fs_base: 140140334651200
| |
− | gs_base: 0
| |
− | ds: 0
| |
− | es: 0
| |
− | fs: 0
| |
− | gs: 0
| |
− | }
| |
− | fpregs {
| |
− | cwd: 895
| |
− | swd: 0
| |
− | twd: 0
| |
− | fop: 0
| |
− | rip: 0
| |
− | rdp: 0
| |
− | mxcsr: 8064
| |
− | mxcsr_mask: 65535
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | st_space: 0
| |
− | xmm_space: 0
| |
− | xmm_space: 0
| |
− | xmm_space: 4294967295
| |
− | xmm_space: 4294967295
| |
− | xmm_space: 16777215
| |
− | xmm_space: 16843009
| |
− | xmm_space: 16843009
| |
− | xmm_space: 16843009
| |
− | xmm_space: 4478800
| |
− | xmm_space: 661857632
| |
− | xmm_space: 1869488186
| |
− | xmm_space: 543236212
| |
− | xmm_space: 1970037624
| |
− | xmm_space: 1680696676
| |
− | xmm_space: 775778921
| |
− | xmm_space: 544500071
| |
− | xmm_space: 2019896621
| |
− | xmm_space: 1685417059
| |
− | xmm_space: 1768172901
| |
− | xmm_space: 1747860850
| |
− | xmm_space: 809328999
| |
− | xmm_space: 909327153
| |
− | xmm_space: 1932405306
| |
− | xmm_space: 809334896
| |
− | xmm_space: 909327153
| |
− | xmm_space: 2016291386
| |
− | xmm_space: 1030123635
| |
− | xmm_space: 859517232
| |
− | xmm_space: 14902
| |
− | xmm_space: 0
| |
− | xmm_space: 65
| |
− | xmm_space: 0
| |
− | xmm_space: 0
| |
− | xmm_space: 0
| |
− | xmm_space: 0
| |
− | xmm_space: 0
| |
− | xmm_space: 0
| |
− | xmm_space: 0
| |
− | xmm_space: 4294967295
| |
− | xmm_space: 4294967295
| |
− | xmm_space: 4294967295
| |
− | xmm_space: 4294967295
| |
− | xmm_space: 4294967040
| |
− | xmm_space: 4294967295
| |
− | xmm_space: 0
| |
− | xmm_space: 0
| |
− | xmm_space: 0
| |
− | xmm_space: 0
| |
− | xmm_space: 0
| |
− | xmm_space: 0
| |
− | xmm_space: 0
| |
− | xmm_space: 0
| |
− | xmm_space: 0
| |
− | xmm_space: 0
| |
− | xmm_space: 0
| |
− | xmm_space: 0
| |
− | xmm_space: 0
| |
− | xmm_space: 0
| |
− | xmm_space: 0
| |
− | xmm_space: 0
| |
− | xmm_space: 0
| |
− | xmm_space: 0
| |
− | xmm_space: 0
| |
− | xmm_space: 0
| |
− | }
| |
− | }
| |
− | tc {
| |
− | task_state: 1
| |
− | exit_code: 0
| |
− | personality: 0
| |
− | flags: 1077960704
| |
− | blk_sigset: 65536
| |
− | comm: "loop.sh"
| |
− | timers {
| |
− | real {
| |
− | isec: 0
| |
− | iusec: 0
| |
− | vsec: 0
| |
− | vusec: 0
| |
− | }
| |
− | virt {
| |
− | isec: 0
| |
− | iusec: 0
| |
− | vsec: 0
| |
− | vusec: 0
| |
− | }
| |
− | prof {
| |
− | isec: 0
| |
− | iusec: 0
| |
− | vsec: 0
| |
− | vusec: 0
| |
− | }
| |
− | }
| |
− | rlimits {
| |
− | rlimits {
| |
− | cur: 18446744073709551615
| |
− | max: 18446744073709551615
| |
− | }
| |
− | rlimits {
| |
− | cur: 18446744073709551615
| |
− | max: 18446744073709551615
| |
− | }
| |
− | rlimits {
| |
− | cur: 18446744073709551615
| |
− | max: 18446744073709551615
| |
− | }
| |
− | rlimits {
| |
− | cur: 8388608
| |
− | max: 18446744073709551615
| |
− | }
| |
− | rlimits {
| |
− | cur: 0
| |
− | max: 18446744073709551615
| |
− | }
| |
− | rlimits {
| |
− | cur: 18446744073709551615
| |
− | max: 18446744073709551615
| |
− | }
| |
− | rlimits {
| |
− | cur: 3898
| |
− | max: 3898
| |
− | }
| |
− | rlimits {
| |
− | cur: 1024
| |
− | max: 4096
| |
− | }
| |
− | rlimits {
| |
− | cur: 65536
| |
− | max: 65536
| |
− | }
| |
− | rlimits {
| |
− | cur: 18446744073709551615
| |
− | max: 18446744073709551615
| |
− | }
| |
− | rlimits {
| |
− | cur: 18446744073709551615
| |
− | max: 18446744073709551615
| |
− | }
| |
− | rlimits {
| |
− | cur: 3898
| |
− | max: 3898
| |
− | }
| |
− | rlimits {
| |
− | cur: 819200
| |
− | max: 819200
| |
− | }
| |
− | rlimits {
| |
− | cur: 0
| |
− | max: 0
| |
− | }
| |
− | rlimits {
| |
− | cur: 0
| |
− | max: 0
| |
− | }
| |
− | rlimits {
| |
− | cur: 18446744073709551615
| |
− | max: 18446744073709551615
| |
− | }
| |
− | }
| |
− | cg_set: 1
| |
− | signals_s {
| |
− | }
| |
− | }
| |
− | thread_core {
| |
− | futex_rla: 0
| |
− | futex_rla_len: 24
| |
− | sched_nice: 0
| |
− | sched_policy: 0
| |
− | sas {
| |
− | ss_sp: 0
| |
− | ss_size: 0
| |
− | ss_flags: 2
| |
− | }
| |
− | signals_p {
| |
− | }
| |
− | }
| |
− | </pre>
| |
− |
| |
− | === Convert to json (and back) ===
| |
− |
| |
− | Same as before, but the human-readable format is JSON
| |
− |
| |
− | '''Status: Ready'''<br>
| |
− | For now, it does it in a dumb way, by just wrapping text_format in brackets and adding commas where needed.
| |
− | Example:
| |
− | <pre>
| |
− | {
| |
− | "magic": "CORE",
| |
− | "0": {
| |
− | "mtype": "X86_64",
| |
− | "thread_core": {
| |
− | "futex_rla_len": "24",
| |
− | "sched_policy": "0",
| |
− | "sched_nice": "0",
| |
− | "futex_rla": "0",
| |
− | "signals_p": {},
| |
− | "sas": {
| |
− | "ss_size": "0",
| |
− | "ss_sp": "0",
| |
− | "ss_flags": "2"
| |
− | }
| |
− | },
| |
− | "pbtype": "core_entry",
| |
− | "thread_info": {
| |
− | "fpregs": {
| |
− | "st_space": [
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0"
| |
− | ],
| |
− | "fop": "0",
| |
− | "rdp": "0",
| |
− | "twd": "0",
| |
− | "mxcsr": "8064",
| |
− | "swd": "0",
| |
− | "rip": "0",
| |
− | "xmm_space": [
| |
− | "0",
| |
− | "0",
| |
− | "4294967295",
| |
− | "4294967295",
| |
− | "16777215",
| |
− | "16843009",
| |
− | "16843009",
| |
− | "16843009",
| |
− | "4478800",
| |
− | "661857632",
| |
− | "1869488186",
| |
− | "543236212",
| |
− | "1970037624",
| |
− | "1680696676",
| |
− | "775778921",
| |
− | "544500071",
| |
− | "2019896621",
| |
− | "1685417059",
| |
− | "1768172901",
| |
− | "1747860850",
| |
− | "809328999",
| |
− | "909327153",
| |
− | "1932405306",
| |
− | "809334896",
| |
− | "909327153",
| |
− | "2016291386",
| |
− | "1030123635",
| |
− | "859517232",
| |
− | "14902",
| |
− | "0",
| |
− | "65",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "4294967295",
| |
− | "4294967295",
| |
− | "4294967295",
| |
− | "4294967295",
| |
− | "4294967040",
| |
− | "4294967295",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0",
| |
− | "0"
| |
− | ],
| |
− | "cwd": "895",
| |
− | "mxcsr_mask": "65535"
| |
− | },
| |
− | "clear_tid_addr": "0",
| |
− | "gpregs": {
| |
− | "gs": "0",
| |
− | "ip": "213251769082",
| |
− | "cx": "18446744073709551615",
| |
− | "cs": "51",
| |
− | "ax": "61",
| |
− | "orig_ax": "61",
| |
− | "di": "18446744073709551615",
| |
− | "es": "0",
| |
− | "gs_base": "0",
| |
− | "r14": "19884608",
| |
− | "r15": "0",
| |
− | "r12": "0",
| |
− | "r13": "1",
| |
− | "r10": "0",
| |
− | "r11": "582",
| |
− | "fs_base": "140140334651200",
| |
− | "bp": "19879232",
| |
− | "dx": "0",
| |
− | "bx": "0",
| |
− | "ds": "0",
| |
− | "ss": "43",
| |
− | "sp": "140733241187336",
| |
− | "r8": "19879232",
| |
− | "r9": "0",
| |
− | "fs": "0",
| |
− | "si": "140733241187376",
| |
− | "flags": "582"
| |
− | }
| |
− | },
| |
− | "tc": {
| |
− | "timers": {
| |
− | "real": {
| |
− | "isec": "0",
| |
− | "vusec": "0",
| |
− | "iusec": "0",
| |
− | "vsec": "0"
| |
− | },
| |
− | "virt": {
| |
− | "isec": "0",
| |
− | "vusec": "0",
| |
− | "iusec": "0",
| |
− | "vsec": "0"
| |
− | },
| |
− | "prof": {
| |
− | "isec": "0",
| |
− | "vusec": "0",
| |
− | "iusec": "0",
| |
− | "vsec": "0"
| |
− | }
| |
− | },
| |
− | "cg_set": "1",
| |
− | "signals_s": {},
| |
− | "blk_sigset": "65536",
| |
− | "exit_code": "0",
| |
− | "rlimits": {
| |
− | "rlimits": [
| |
− | {
| |
− | "max": "18446744073709551615",
| |
− | "cur": "18446744073709551615"
| |
− | },
| |
− | {
| |
− | "max": "18446744073709551615",
| |
− | "cur": "18446744073709551615"
| |
− | },
| |
− | {
| |
− | "max": "18446744073709551615",
| |
− | "cur": "18446744073709551615"
| |
− | },
| |
− | {
| |
− | "max": "18446744073709551615",
| |
− | "cur": "8388608"
| |
− | },
| |
− | {
| |
− | "max": "18446744073709551615",
| |
− | "cur": "0"
| |
− | },
| |
− | {
| |
− | "max": "18446744073709551615",
| |
− | "cur": "18446744073709551615"
| |
− | },
| |
− | {
| |
− | "max": "3898",
| |
− | "cur": "3898"
| |
− | },
| |
− | {
| |
− | "max": "4096",
| |
− | "cur": "1024"
| |
− | },
| |
− | {
| |
− | "max": "65536",
| |
− | "cur": "65536"
| |
− | },
| |
− | {
| |
− | "max": "18446744073709551615",
| |
− | "cur": "18446744073709551615"
| |
− | },
| |
− | {
| |
− | "max": "18446744073709551615",
| |
− | "cur": "18446744073709551615"
| |
− | },
| |
− | {
| |
− | "max": "3898",
| |
− | "cur": "3898"
| |
− | },
| |
− | {
| |
− | "max": "819200",
| |
− | "cur": "819200"
| |
− | },
| |
− | {
| |
− | "max": "0",
| |
− | "cur": "0"
| |
− | },
| |
− | {
| |
− | "max": "0",
| |
− | "cur": "0"
| |
− | },
| |
− | {
| |
− | "max": "18446744073709551615",
| |
− | "cur": "18446744073709551615"
| |
− | }
| |
− | ]
| |
− | },
| |
− | "comm": "\"loop.sh\"",
| |
− | "flags": "1077960704",
| |
− | "task_state": "1",
| |
− | "personality": "0"
| |
− | }
| |
− | }
| |
− | }
| |
− | </pre>
| |
| === Generate core files out of task images === | | === Generate core files out of task images === |
| | | |