Skip to content

Commit 0429a97

Browse files
committed
cpu: Move opaque field from CPU_COMMON to CPUState
Signed-off-by: Andreas Färber <[email protected]>
1 parent 2710342 commit 0429a97

File tree

13 files changed

+72
-48
lines changed

13 files changed

+72
-48
lines changed

bsd-user/main.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -1000,7 +1000,7 @@ int main(int argc, char **argv)
10001000
memset(ts, 0, sizeof(TaskState));
10011001
init_task_state(ts);
10021002
ts->info = info;
1003-
env->opaque = ts;
1003+
cpu->opaque = ts;
10041004

10051005
#if defined(TARGET_I386)
10061006
cpu_x86_set_cpl(env, 3);

gdbstub.c

+1-2
Original file line numberDiff line numberDiff line change
@@ -1086,8 +1086,7 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf)
10861086
}
10871087
#ifdef CONFIG_USER_ONLY
10881088
else if (strncmp(p, "Offsets", 7) == 0) {
1089-
CPUArchState *env = s->c_cpu->env_ptr;
1090-
TaskState *ts = env->opaque;
1089+
TaskState *ts = s->c_cpu->opaque;
10911090

10921091
snprintf(buf, sizeof(buf),
10931092
"Text=" TARGET_ABI_FMT_lx ";Data=" TARGET_ABI_FMT_lx

include/exec/cpu-defs.h

-3
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,5 @@ typedef struct CPUWatchpoint {
138138
\
139139
QTAILQ_HEAD(watchpoints_head, CPUWatchpoint) watchpoints; \
140140
CPUWatchpoint *watchpoint_hit; \
141-
\
142-
/* user data */ \
143-
void *opaque; \
144141

145142
#endif

include/qom/cpu.h

+3
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ struct kvm_run;
184184
* @gdb_num_regs: Number of total registers accessible to GDB.
185185
* @gdb_num_g_regs: Number of registers in GDB 'g' packets.
186186
* @next_cpu: Next CPU sharing TB cache.
187+
* @opaque: User data.
187188
* @mem_io_pc: Host Program Counter at which the memory was accessed.
188189
* @mem_io_vaddr: Target virtual address at which the memory was accessed.
189190
* @kvm_fd: vCPU file descriptor for KVM.
@@ -230,6 +231,8 @@ struct CPUState {
230231
int gdb_num_g_regs;
231232
QTAILQ_ENTRY(CPUState) node;
232233

234+
void *opaque;
235+
233236
/* In order to avoid passing too many arguments to the MMIO helpers,
234237
* we store some rarely used information in the CPU context.
235238
*/

linux-user/elfload.c

+6-4
Original file line numberDiff line numberDiff line change
@@ -2621,7 +2621,8 @@ static int write_note(struct memelfnote *men, int fd)
26212621

26222622
static void fill_thread_info(struct elf_note_info *info, const CPUArchState *env)
26232623
{
2624-
TaskState *ts = (TaskState *)env->opaque;
2624+
CPUState *cpu = ENV_GET_CPU((CPUArchState *)env);
2625+
TaskState *ts = (TaskState *)cpu->opaque;
26252626
struct elf_thread_status *ets;
26262627

26272628
ets = g_malloc0(sizeof (*ets));
@@ -2650,8 +2651,8 @@ static int fill_note_info(struct elf_note_info *info,
26502651
long signr, const CPUArchState *env)
26512652
{
26522653
#define NUMNOTES 3
2653-
CPUState *cpu = NULL;
2654-
TaskState *ts = (TaskState *)env->opaque;
2654+
CPUState *cpu = ENV_GET_CPU((CPUArchState *)env);
2655+
TaskState *ts = (TaskState *)cpu->opaque;
26552656
int i;
26562657

26572658
info->notes = g_malloc0(NUMNOTES * sizeof (struct memelfnote));
@@ -2775,7 +2776,8 @@ static int write_note_info(struct elf_note_info *info, int fd)
27752776
*/
27762777
static int elf_core_dump(int signr, const CPUArchState *env)
27772778
{
2778-
const TaskState *ts = (const TaskState *)env->opaque;
2779+
const CPUState *cpu = ENV_GET_CPU((CPUArchState *)env);
2780+
const TaskState *ts = (const TaskState *)cpu->opaque;
27792781
struct vm_area_struct *vma = NULL;
27802782
char corefile[PATH_MAX];
27812783
struct elf_note_info info;

linux-user/linuxload.c

+1-2
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,7 @@ static int prepare_binprm(struct linux_binprm *bprm)
8989
abi_ulong loader_build_argptr(int envc, int argc, abi_ulong sp,
9090
abi_ulong stringp, int push_ptr)
9191
{
92-
CPUArchState *env = thread_cpu->env_ptr;
93-
TaskState *ts = (TaskState *)env->opaque;
92+
TaskState *ts = (TaskState *)thread_cpu->opaque;
9493
int n = sizeof(abi_ulong);
9594
abi_ulong envp;
9695
abi_ulong argv;

linux-user/m68k/target_cpu.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ static inline void cpu_clone_regs(CPUM68KState *env, target_ulong newsp)
3131

3232
static inline void cpu_set_tls(CPUM68KState *env, target_ulong newtls)
3333
{
34-
TaskState *ts = env->opaque;
34+
CPUState *cs = CPU(m68k_env_get_cpu(env));
35+
TaskState *ts = cs->opaque;
36+
3537
ts->tp_value = newtls;
3638
}
3739

linux-user/main.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -685,7 +685,7 @@ void cpu_loop(CPUARMState *env)
685685
switch(trapnr) {
686686
case EXCP_UDEF:
687687
{
688-
TaskState *ts = env->opaque;
688+
TaskState *ts = cs->opaque;
689689
uint32_t opcode;
690690
int rc;
691691

@@ -2965,7 +2965,7 @@ void cpu_loop(CPUM68KState *env)
29652965
int trapnr;
29662966
unsigned int n;
29672967
target_siginfo_t info;
2968-
TaskState *ts = env->opaque;
2968+
TaskState *ts = cs->opaque;
29692969

29702970
for(;;) {
29712971
trapnr = cpu_m68k_exec(env);
@@ -4001,7 +4001,7 @@ int main(int argc, char **argv, char **envp)
40014001
/* build Task State */
40024002
ts->info = info;
40034003
ts->bprm = &bprm;
4004-
env->opaque = ts;
4004+
cpu->opaque = ts;
40054005
task_settid(ts);
40064006

40074007
execfd = qemu_getauxval(AT_EXECFD);

linux-user/signal.c

+11-6
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,8 @@ void signal_init(void)
370370

371371
static inline struct sigqueue *alloc_sigqueue(CPUArchState *env)
372372
{
373-
TaskState *ts = env->opaque;
373+
CPUState *cpu = ENV_GET_CPU(env);
374+
TaskState *ts = cpu->opaque;
374375
struct sigqueue *q = ts->first_free;
375376
if (!q)
376377
return NULL;
@@ -380,16 +381,19 @@ static inline struct sigqueue *alloc_sigqueue(CPUArchState *env)
380381

381382
static inline void free_sigqueue(CPUArchState *env, struct sigqueue *q)
382383
{
383-
TaskState *ts = env->opaque;
384+
CPUState *cpu = ENV_GET_CPU(env);
385+
TaskState *ts = cpu->opaque;
386+
384387
q->next = ts->first_free;
385388
ts->first_free = q;
386389
}
387390

388391
/* abort execution with signal */
389392
static void QEMU_NORETURN force_sig(int target_sig)
390393
{
391-
CPUArchState *env = thread_cpu->env_ptr;
392-
TaskState *ts = (TaskState *)env->opaque;
394+
CPUState *cpu = thread_cpu;
395+
CPUArchState *env = cpu->env_ptr;
396+
TaskState *ts = (TaskState *)cpu->opaque;
393397
int host_sig, core_dumped = 0;
394398
struct sigaction act;
395399
host_sig = target_to_host_signal(target_sig);
@@ -440,7 +444,8 @@ static void QEMU_NORETURN force_sig(int target_sig)
440444
as possible */
441445
int queue_signal(CPUArchState *env, int sig, target_siginfo_t *info)
442446
{
443-
TaskState *ts = env->opaque;
447+
CPUState *cpu = ENV_GET_CPU(env);
448+
TaskState *ts = cpu->opaque;
444449
struct emulated_sigtable *k;
445450
struct sigqueue *q, **pq;
446451
abi_ulong handler;
@@ -5676,7 +5681,7 @@ void process_pending_signals(CPUArchState *cpu_env)
56765681
struct emulated_sigtable *k;
56775682
struct target_sigaction *sa;
56785683
struct sigqueue *q;
5679-
TaskState *ts = cpu_env->opaque;
5684+
TaskState *ts = cpu->opaque;
56805685

56815686
if (!ts->signal_pending)
56825687
return;

linux-user/syscall.c

+18-12
Original file line numberDiff line numberDiff line change
@@ -4243,7 +4243,7 @@ static void *clone_func(void *arg)
42434243
env = info->env;
42444244
cpu = ENV_GET_CPU(env);
42454245
thread_cpu = cpu;
4246-
ts = (TaskState *)env->opaque;
4246+
ts = (TaskState *)cpu->opaque;
42474247
info->tid = gettid();
42484248
cpu->host_tid = info->tid;
42494249
task_settid(ts);
@@ -4271,8 +4271,10 @@ static int do_fork(CPUArchState *env, unsigned int flags, abi_ulong newsp,
42714271
abi_ulong parent_tidptr, target_ulong newtls,
42724272
abi_ulong child_tidptr)
42734273
{
4274+
CPUState *cpu = ENV_GET_CPU(env);
42744275
int ret;
42754276
TaskState *ts;
4277+
CPUState *new_cpu;
42764278
CPUArchState *new_env;
42774279
unsigned int nptl_flags;
42784280
sigset_t sigmask;
@@ -4282,7 +4284,7 @@ static int do_fork(CPUArchState *env, unsigned int flags, abi_ulong newsp,
42824284
flags &= ~(CLONE_VFORK | CLONE_VM);
42834285

42844286
if (flags & CLONE_VM) {
4285-
TaskState *parent_ts = (TaskState *)env->opaque;
4287+
TaskState *parent_ts = (TaskState *)cpu->opaque;
42864288
new_thread_info info;
42874289
pthread_attr_t attr;
42884290

@@ -4292,7 +4294,8 @@ static int do_fork(CPUArchState *env, unsigned int flags, abi_ulong newsp,
42924294
new_env = cpu_copy(env);
42934295
/* Init regs that differ from the parent. */
42944296
cpu_clone_regs(new_env, newsp);
4295-
new_env->opaque = ts;
4297+
new_cpu = ENV_GET_CPU(new_env);
4298+
new_cpu->opaque = ts;
42964299
ts->bprm = parent_ts->bprm;
42974300
ts->info = parent_ts->info;
42984301
nptl_flags = flags;
@@ -4364,7 +4367,7 @@ static int do_fork(CPUArchState *env, unsigned int flags, abi_ulong newsp,
43644367
put_user_u32(gettid(), child_tidptr);
43654368
if (flags & CLONE_PARENT_SETTID)
43664369
put_user_u32(gettid(), parent_tidptr);
4367-
ts = (TaskState *)env->opaque;
4370+
ts = (TaskState *)cpu->opaque;
43684371
if (flags & CLONE_SETTLS)
43694372
cpu_set_tls (env, newtls);
43704373
if (flags & CLONE_CHILD_CLEARTID)
@@ -4974,7 +4977,8 @@ void init_qemu_uname_release(void)
49744977
static int open_self_maps(void *cpu_env, int fd)
49754978
{
49764979
#if defined(TARGET_ARM) || defined(TARGET_M68K) || defined(TARGET_UNICORE32)
4977-
TaskState *ts = ((CPUArchState *)cpu_env)->opaque;
4980+
CPUState *cpu = ENV_GET_CPU((CPUArchState *)cpu_env);
4981+
TaskState *ts = cpu->opaque;
49784982
#endif
49794983
FILE *fp;
49804984
char *line = NULL;
@@ -5026,7 +5030,8 @@ static int open_self_maps(void *cpu_env, int fd)
50265030

50275031
static int open_self_stat(void *cpu_env, int fd)
50285032
{
5029-
TaskState *ts = ((CPUArchState *)cpu_env)->opaque;
5033+
CPUState *cpu = ENV_GET_CPU((CPUArchState *)cpu_env);
5034+
TaskState *ts = cpu->opaque;
50305035
abi_ulong start_stack = ts->info->start_stack;
50315036
int i;
50325037

@@ -5062,7 +5067,8 @@ static int open_self_stat(void *cpu_env, int fd)
50625067

50635068
static int open_self_auxv(void *cpu_env, int fd)
50645069
{
5065-
TaskState *ts = ((CPUArchState *)cpu_env)->opaque;
5070+
CPUState *cpu = ENV_GET_CPU((CPUArchState *)cpu_env);
5071+
TaskState *ts = cpu->opaque;
50665072
abi_ulong auxv = ts->info->saved_auxv;
50675073
abi_ulong len = ts->info->auxv_len;
50685074
char *ptr;
@@ -5244,14 +5250,14 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
52445250
/* Remove the CPU from the list. */
52455251
QTAILQ_REMOVE(&cpus, cpu, node);
52465252
cpu_list_unlock();
5247-
ts = ((CPUArchState *)cpu_env)->opaque;
5253+
ts = cpu->opaque;
52485254
if (ts->child_tidptr) {
52495255
put_user_u32(0, ts->child_tidptr);
52505256
sys_futex(g2h(ts->child_tidptr), FUTEX_WAKE, INT_MAX,
52515257
NULL, NULL, 0);
52525258
}
52535259
thread_cpu = NULL;
5254-
object_unref(OBJECT(ENV_GET_CPU(cpu_env)));
5260+
object_unref(OBJECT(cpu));
52555261
g_free(ts);
52565262
pthread_exit(NULL);
52575263
}
@@ -6555,7 +6561,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
65556561
break;
65566562
case TARGET_NR_mprotect:
65576563
{
6558-
TaskState *ts = ((CPUArchState *)cpu_env)->opaque;
6564+
TaskState *ts = cpu->opaque;
65596565
/* Special hack to detect libc making the stack executable. */
65606566
if ((arg3 & PROT_GROWSDOWN)
65616567
&& arg1 >= ts->info->stack_limit
@@ -8647,7 +8653,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
86478653
break;
86488654
#elif defined(TARGET_M68K)
86498655
{
8650-
TaskState *ts = ((CPUArchState *)cpu_env)->opaque;
8656+
TaskState *ts = cpu->opaque;
86518657
ts->tp_value = arg1;
86528658
ret = 0;
86538659
break;
@@ -8663,7 +8669,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
86638669
break;
86648670
#elif defined(TARGET_M68K)
86658671
{
8666-
TaskState *ts = ((CPUArchState *)cpu_env)->opaque;
8672+
TaskState *ts = cpu->opaque;
86678673
ret = ts->tp_value;
86688674
break;
86698675
}

linux-user/vm86.c

+18-9
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ static inline unsigned int vm_getl(uint32_t segptr, unsigned int reg16)
7272

7373
void save_v86_state(CPUX86State *env)
7474
{
75-
TaskState *ts = env->opaque;
75+
CPUState *cs = CPU(x86_env_get_cpu(env));
76+
TaskState *ts = cs->opaque;
7677
struct target_vm86plus_struct * target_v86;
7778

7879
if (!lock_user_struct(VERIFY_WRITE, target_v86, ts->target_v86, 0))
@@ -131,7 +132,8 @@ static inline void return_to_32bit(CPUX86State *env, int retval)
131132

132133
static inline int set_IF(CPUX86State *env)
133134
{
134-
TaskState *ts = env->opaque;
135+
CPUState *cs = CPU(x86_env_get_cpu(env));
136+
TaskState *ts = cs->opaque;
135137

136138
ts->v86flags |= VIF_MASK;
137139
if (ts->v86flags & VIP_MASK) {
@@ -143,7 +145,8 @@ static inline int set_IF(CPUX86State *env)
143145

144146
static inline void clear_IF(CPUX86State *env)
145147
{
146-
TaskState *ts = env->opaque;
148+
CPUState *cs = CPU(x86_env_get_cpu(env));
149+
TaskState *ts = cs->opaque;
147150

148151
ts->v86flags &= ~VIF_MASK;
149152
}
@@ -160,7 +163,8 @@ static inline void clear_AC(CPUX86State *env)
160163

161164
static inline int set_vflags_long(unsigned long eflags, CPUX86State *env)
162165
{
163-
TaskState *ts = env->opaque;
166+
CPUState *cs = CPU(x86_env_get_cpu(env));
167+
TaskState *ts = cs->opaque;
164168

165169
set_flags(ts->v86flags, eflags, ts->v86mask);
166170
set_flags(env->eflags, eflags, SAFE_MASK);
@@ -173,7 +177,8 @@ static inline int set_vflags_long(unsigned long eflags, CPUX86State *env)
173177

174178
static inline int set_vflags_short(unsigned short flags, CPUX86State *env)
175179
{
176-
TaskState *ts = env->opaque;
180+
CPUState *cs = CPU(x86_env_get_cpu(env));
181+
TaskState *ts = cs->opaque;
177182

178183
set_flags(ts->v86flags, flags, ts->v86mask & 0xffff);
179184
set_flags(env->eflags, flags, SAFE_MASK);
@@ -186,7 +191,8 @@ static inline int set_vflags_short(unsigned short flags, CPUX86State *env)
186191

187192
static inline unsigned int get_vflags(CPUX86State *env)
188193
{
189-
TaskState *ts = env->opaque;
194+
CPUState *cs = CPU(x86_env_get_cpu(env));
195+
TaskState *ts = cs->opaque;
190196
unsigned int flags;
191197

192198
flags = env->eflags & RETURN_MASK;
@@ -202,7 +208,8 @@ static inline unsigned int get_vflags(CPUX86State *env)
202208
support TSS interrupt revectoring, so this code is always executed) */
203209
static void do_int(CPUX86State *env, int intno)
204210
{
205-
TaskState *ts = env->opaque;
211+
CPUState *cs = CPU(x86_env_get_cpu(env));
212+
TaskState *ts = cs->opaque;
206213
uint32_t int_addr, segoffs, ssp;
207214
unsigned int sp;
208215

@@ -260,7 +267,8 @@ void handle_vm86_trap(CPUX86State *env, int trapno)
260267

261268
void handle_vm86_fault(CPUX86State *env)
262269
{
263-
TaskState *ts = env->opaque;
270+
CPUState *cs = CPU(x86_env_get_cpu(env));
271+
TaskState *ts = cs->opaque;
264272
uint32_t csp, ssp;
265273
unsigned int ip, sp, newflags, newip, newcs, opcode, intno;
266274
int data32, pref_done;
@@ -384,7 +392,8 @@ void handle_vm86_fault(CPUX86State *env)
384392

385393
int do_vm86(CPUX86State *env, long subfunction, abi_ulong vm86_addr)
386394
{
387-
TaskState *ts = env->opaque;
395+
CPUState *cs = CPU(x86_env_get_cpu(env));
396+
TaskState *ts = cs->opaque;
388397
struct target_vm86plus_struct * target_v86;
389398
int ret;
390399

0 commit comments

Comments
 (0)