|
15 | 15 |
|
16 | 16 | struct arch_enum_entry {
|
17 | 17 | const char *name;
|
18 |
| - enum frame_architecture val; |
| 18 | + enum frame_architecture arch; |
| 19 | + size_t machine; |
19 | 20 | };
|
20 | 21 |
|
21 | 22 | static struct arch_enum_entry arch_map[] = {
|
22 |
| - {.name = "unknown", .val = frame_arch_unknown}, |
23 |
| - {.name = "obscure", .val = frame_arch_obscure}, |
24 |
| - {.name = "m68k", .val = frame_arch_m68k}, |
25 |
| - {.name = "vax", .val = frame_arch_vax}, |
26 |
| - {.name = "i960", .val = frame_arch_i960}, |
27 |
| - {.name = "or32", .val = frame_arch_or32}, |
28 |
| - {.name = "sparc", .val = frame_arch_sparc}, |
29 |
| - {.name = "spu", .val = frame_arch_spu}, |
30 |
| - {.name = "mips", .val = frame_arch_mips}, |
31 |
| - {.name = "i386", .val = frame_arch_i386}, |
32 |
| - {.name = "l1om", .val = frame_arch_l1om}, |
33 |
| - {.name = "we32k", .val = frame_arch_we32k}, |
34 |
| - {.name = "tahoe", .val = frame_arch_tahoe}, |
35 |
| - {.name = "i860", .val = frame_arch_i860}, |
36 |
| - {.name = "i370", .val = frame_arch_i370}, |
37 |
| - {.name = "romp", .val = frame_arch_romp}, |
38 |
| - {.name = "convex", .val = frame_arch_convex}, |
39 |
| - {.name = "m88k", .val = frame_arch_m88k}, |
40 |
| - {.name = "m98k", .val = frame_arch_m98k}, |
41 |
| - {.name = "pyramid", .val = frame_arch_pyramid}, |
42 |
| - {.name = "h8300", .val = frame_arch_h8300}, |
43 |
| - {.name = "pdp11", .val = frame_arch_pdp11}, |
44 |
| - {.name = "plugin", .val = frame_arch_plugin}, |
45 |
| - {.name = "powerpc", .val = frame_arch_powerpc}, |
46 |
| - {.name = "rs6000", .val = frame_arch_rs6000}, |
47 |
| - {.name = "hppa", .val = frame_arch_hppa}, |
48 |
| - {.name = "d10v", .val = frame_arch_d10v}, |
49 |
| - {.name = "d30v", .val = frame_arch_d30v}, |
50 |
| - {.name = "dlx", .val = frame_arch_dlx}, |
51 |
| - {.name = "m68hc11", .val = frame_arch_m68hc11}, |
52 |
| - {.name = "m68hc12", .val = frame_arch_m68hc12}, |
53 |
| - {.name = "z8k", .val = frame_arch_z8k}, |
54 |
| - {.name = "h8500", .val = frame_arch_h8500}, |
55 |
| - {.name = "sh", .val = frame_arch_sh}, |
56 |
| - {.name = "alpha", .val = frame_arch_alpha}, |
57 |
| - {.name = "arm", .val = frame_arch_arm}, |
58 |
| - {.name = "ns32k", .val = frame_arch_ns32k}, |
59 |
| - {.name = "w65", .val = frame_arch_w65}, |
60 |
| - {.name = "tic30", .val = frame_arch_tic30}, |
61 |
| - {.name = "tic4x", .val = frame_arch_tic4x}, |
62 |
| - {.name = "tic54x", .val = frame_arch_tic54x}, |
63 |
| - {.name = "tic6x", .val = frame_arch_tic6x}, |
64 |
| - {.name = "tic80", .val = frame_arch_tic80}, |
65 |
| - {.name = "v850", .val = frame_arch_v850}, |
66 |
| - {.name = "arc", .val = frame_arch_arc}, |
67 |
| - {.name = "m32c", .val = frame_arch_m32c}, |
68 |
| - {.name = "m32r", .val = frame_arch_m32r}, |
69 |
| - {.name = "mn10200", .val = frame_arch_mn10200}, |
70 |
| - {.name = "mn10300", .val = frame_arch_mn10300}, |
71 |
| - {.name = "fr30", .val = frame_arch_fr30}, |
72 |
| - {.name = "frv", .val = frame_arch_frv}, |
73 |
| - {.name = "moxie", .val = frame_arch_moxie}, |
74 |
| - {.name = "mcore", .val = frame_arch_mcore}, |
75 |
| - {.name = "mep", .val = frame_arch_mep}, |
76 |
| - {.name = "ia64", .val = frame_arch_ia64}, |
77 |
| - {.name = "ip2k", .val = frame_arch_ip2k}, |
78 |
| - {.name = "iq2000", .val = frame_arch_iq2000}, |
79 |
| - {.name = "mt", .val = frame_arch_mt}, |
80 |
| - {.name = "pj", .val = frame_arch_pj}, |
81 |
| - {.name = "avr", .val = frame_arch_avr}, |
82 |
| - {.name = "bfin", .val = frame_arch_bfin}, |
83 |
| - {.name = "cr16", .val = frame_arch_cr16}, |
84 |
| - {.name = "cr16c", .val = frame_arch_cr16c}, |
85 |
| - {.name = "crx", .val = frame_arch_crx}, |
86 |
| - {.name = "cris", .val = frame_arch_cris}, |
87 |
| - {.name = "rx", .val = frame_arch_rx}, |
88 |
| - {.name = "s390", .val = frame_arch_s390}, |
89 |
| - {.name = "score", .val = frame_arch_score}, |
90 |
| - {.name = "openrisc", .val = frame_arch_openrisc}, |
91 |
| - {.name = "mmix", .val = frame_arch_mmix}, |
92 |
| - {.name = "xstormy16", .val = frame_arch_xstormy16}, |
93 |
| - {.name = "msp430", .val = frame_arch_msp430}, |
94 |
| - {.name = "xc16x", .val = frame_arch_xc16x}, |
95 |
| - {.name = "xtensa", .val = frame_arch_xtensa}, |
96 |
| - {.name = "z80", .val = frame_arch_z80}, |
97 |
| - {.name = "lm32", .val = frame_arch_lm32}, |
98 |
| - {.name = "microblaze", .val = frame_arch_microblaze}, |
99 |
| - {.name = "6502", .val = frame_arch_6502}, |
100 |
| - {.name = "aarch64", .val = frame_arch_aarch64}, |
101 |
| - {.name = "8051", .val = frame_arch_8051}, |
102 |
| - {.name = "sm83", .val = frame_arch_sm83}, |
103 |
| - {.name = "hexagon", .val = frame_arch_hexagon}, |
104 |
| - {.name = NULL, .val = frame_arch_last}, |
| 23 | + {.name = "unknown", .arch = frame_arch_unknown, .machine = 0}, |
| 24 | + {.name = "obscure", .arch = frame_arch_obscure, .machine = 0}, |
| 25 | + {.name = "m68k", .arch = frame_arch_m68k, .machine = 0}, |
| 26 | + {.name = "vax", .arch = frame_arch_vax, .machine = 0}, |
| 27 | + {.name = "i960", .arch = frame_arch_i960, .machine = 0}, |
| 28 | + {.name = "or32", .arch = frame_arch_or32, .machine = 0}, |
| 29 | + {.name = "sparc", .arch = frame_arch_sparc, .machine = 0}, |
| 30 | + {.name = "spu", .arch = frame_arch_spu, .machine = 0}, |
| 31 | + {.name = "mips", .arch = frame_arch_mips, .machine = 0}, |
| 32 | + {.name = "i386", .arch = frame_arch_i386, .machine = 0}, |
| 33 | + {.name = "l1om", .arch = frame_arch_l1om, .machine = 0}, |
| 34 | + {.name = "we32k", .arch = frame_arch_we32k, .machine = 0}, |
| 35 | + {.name = "tahoe", .arch = frame_arch_tahoe, .machine = 0}, |
| 36 | + {.name = "i860", .arch = frame_arch_i860, .machine = 0}, |
| 37 | + {.name = "i370", .arch = frame_arch_i370, .machine = 0}, |
| 38 | + {.name = "romp", .arch = frame_arch_romp, .machine = 0}, |
| 39 | + {.name = "convex", .arch = frame_arch_convex, .machine = 0}, |
| 40 | + {.name = "m88k", .arch = frame_arch_m88k, .machine = 0}, |
| 41 | + {.name = "m98k", .arch = frame_arch_m98k, .machine = 0}, |
| 42 | + {.name = "pyramid", .arch = frame_arch_pyramid, .machine = 0}, |
| 43 | + {.name = "h8300", .arch = frame_arch_h8300, .machine = 0}, |
| 44 | + {.name = "pdp11", .arch = frame_arch_pdp11, .machine = 0}, |
| 45 | + {.name = "plugin", .arch = frame_arch_plugin, .machine = 0}, |
| 46 | + {.name = "ppc", .arch = frame_arch_powerpc, .machine = frame_mach_ppc}, |
| 47 | + {.name = "ppc64", .arch = frame_arch_powerpc, .machine = frame_mach_ppc64}, |
| 48 | + {.name = "rs6000", .arch = frame_arch_rs6000, .machine = 0}, |
| 49 | + {.name = "hppa", .arch = frame_arch_hppa, .machine = 0}, |
| 50 | + {.name = "d10v", .arch = frame_arch_d10v, .machine = 0}, |
| 51 | + {.name = "d30v", .arch = frame_arch_d30v, .machine = 0}, |
| 52 | + {.name = "dlx", .arch = frame_arch_dlx, .machine = 0}, |
| 53 | + {.name = "m68hc11", .arch = frame_arch_m68hc11, .machine = 0}, |
| 54 | + {.name = "m68hc12", .arch = frame_arch_m68hc12, .machine = 0}, |
| 55 | + {.name = "z8k", .arch = frame_arch_z8k, .machine = 0}, |
| 56 | + {.name = "h8500", .arch = frame_arch_h8500, .machine = 0}, |
| 57 | + {.name = "sh", .arch = frame_arch_sh, .machine = 0}, |
| 58 | + {.name = "alpha", .arch = frame_arch_alpha, .machine = 0}, |
| 59 | + {.name = "arm", .arch = frame_arch_arm, .machine = 0}, |
| 60 | + {.name = "ns32k", .arch = frame_arch_ns32k, .machine = 0}, |
| 61 | + {.name = "w65", .arch = frame_arch_w65, .machine = 0}, |
| 62 | + {.name = "tic30", .arch = frame_arch_tic30, .machine = 0}, |
| 63 | + {.name = "tic4x", .arch = frame_arch_tic4x, .machine = 0}, |
| 64 | + {.name = "tic54x", .arch = frame_arch_tic54x, .machine = 0}, |
| 65 | + {.name = "tic6x", .arch = frame_arch_tic6x, .machine = 0}, |
| 66 | + {.name = "tic80", .arch = frame_arch_tic80, .machine = 0}, |
| 67 | + {.name = "v850", .arch = frame_arch_v850, .machine = 0}, |
| 68 | + {.name = "arc", .arch = frame_arch_arc, .machine = 0}, |
| 69 | + {.name = "m32c", .arch = frame_arch_m32c, .machine = 0}, |
| 70 | + {.name = "m32r", .arch = frame_arch_m32r, .machine = 0}, |
| 71 | + {.name = "mn10200", .arch = frame_arch_mn10200, .machine = 0}, |
| 72 | + {.name = "mn10300", .arch = frame_arch_mn10300, .machine = 0}, |
| 73 | + {.name = "fr30", .arch = frame_arch_fr30, .machine = 0}, |
| 74 | + {.name = "frv", .arch = frame_arch_frv, .machine = 0}, |
| 75 | + {.name = "moxie", .arch = frame_arch_moxie, .machine = 0}, |
| 76 | + {.name = "mcore", .arch = frame_arch_mcore, .machine = 0}, |
| 77 | + {.name = "mep", .arch = frame_arch_mep, .machine = 0}, |
| 78 | + {.name = "ia64", .arch = frame_arch_ia64, .machine = 0}, |
| 79 | + {.name = "ip2k", .arch = frame_arch_ip2k, .machine = 0}, |
| 80 | + {.name = "iq2000", .arch = frame_arch_iq2000, .machine = 0}, |
| 81 | + {.name = "mt", .arch = frame_arch_mt, .machine = 0}, |
| 82 | + {.name = "pj", .arch = frame_arch_pj, .machine = 0}, |
| 83 | + {.name = "avr", .arch = frame_arch_avr, .machine = 0}, |
| 84 | + {.name = "bfin", .arch = frame_arch_bfin, .machine = 0}, |
| 85 | + {.name = "cr16", .arch = frame_arch_cr16, .machine = 0}, |
| 86 | + {.name = "cr16c", .arch = frame_arch_cr16c, .machine = 0}, |
| 87 | + {.name = "crx", .arch = frame_arch_crx, .machine = 0}, |
| 88 | + {.name = "cris", .arch = frame_arch_cris, .machine = 0}, |
| 89 | + {.name = "rx", .arch = frame_arch_rx, .machine = 0}, |
| 90 | + {.name = "s390", .arch = frame_arch_s390, .machine = 0}, |
| 91 | + {.name = "score", .arch = frame_arch_score, .machine = 0}, |
| 92 | + {.name = "openrisc", .arch = frame_arch_openrisc, .machine = 0}, |
| 93 | + {.name = "mmix", .arch = frame_arch_mmix, .machine = 0}, |
| 94 | + {.name = "xstormy16", .arch = frame_arch_xstormy16, .machine = 0}, |
| 95 | + {.name = "msp430", .arch = frame_arch_msp430, .machine = 0}, |
| 96 | + {.name = "xc16x", .arch = frame_arch_xc16x, .machine = 0}, |
| 97 | + {.name = "xtensa", .arch = frame_arch_xtensa, .machine = 0}, |
| 98 | + {.name = "z80", .arch = frame_arch_z80, .machine = 0}, |
| 99 | + {.name = "lm32", .arch = frame_arch_lm32, .machine = 0}, |
| 100 | + {.name = "microblaze", .arch = frame_arch_microblaze, .machine = 0}, |
| 101 | + {.name = "6502", .arch = frame_arch_6502, .machine = 0}, |
| 102 | + {.name = "aarch64", .arch = frame_arch_aarch64, .machine = 0}, |
| 103 | + {.name = "8051", .arch = frame_arch_8051, .machine = 0}, |
| 104 | + {.name = "sm83", .arch = frame_arch_sm83, .machine = 0}, |
| 105 | + {.name = "hexagon", .arch = frame_arch_hexagon, .machine = 0}, |
| 106 | + {.name = NULL, .arch = frame_arch_last, .machine = 0}, |
105 | 107 | };
|
106 | 108 |
|
| 109 | +static inline bool get_frame_arch_mach(const char *target_name, uint64_t *arch, |
| 110 | + uint64_t *mach) { |
| 111 | + *mach = 0; |
| 112 | + *arch = frame_arch_last; |
| 113 | + const char *aname = arch_map[0].name; |
| 114 | + for (size_t i = 0; arch_map[i].name; ++i) { |
| 115 | + aname = arch_map[i].name; |
| 116 | + if (!strncmp(aname, target_name, strlen(aname))) { |
| 117 | + *arch = arch_map[i].arch; |
| 118 | + *mach = arch_map[i].machine; |
| 119 | + break; |
| 120 | + } |
| 121 | + } |
| 122 | + return *arch != frame_arch_last; |
| 123 | +} |
| 124 | + |
107 | 125 | QEMU_PLUGIN_EXPORT int qemu_plugin_version = QEMU_PLUGIN_VERSION;
|
108 | 126 |
|
109 | 127 | /**
|
@@ -142,6 +160,11 @@ typedef struct {
|
142 | 160 |
|
143 | 161 | GRWLock file_lock;
|
144 | 162 | FILE *file;
|
| 163 | + |
| 164 | + GRWLock vcpu_mode_lock; |
| 165 | + GPtrArray /*<const char *>*/ *vcpu_modes; ///< Indexed by vcpu id. |
| 166 | + |
| 167 | + const char *target_name; |
145 | 168 | } TraceState;
|
146 | 169 |
|
147 | 170 | VCPU *vcpu_new(void);
|
|
0 commit comments