callchain.c (cfbcf468454ab4b20f0b4b62da51920b99fdb19e) callchain.c (3b1fff08038bd0792b1aa1e9703b2dd0512a3fd0)
1/*
2 * Performance counter callchain support - powerpc architecture code
3 *
4 * Copyright © 2009 Paul Mackerras, IBM Corporation.
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version

--- 233 unchanged lines hidden (view full) ---

242 struct signal_frame_64 __user *sigframe;
243 unsigned long __user *fp, *uregs;
244
245 next_ip = perf_instruction_pointer(regs);
246 lr = regs->link;
247 sp = regs->gpr[1];
248 perf_callchain_store(entry, next_ip);
249
1/*
2 * Performance counter callchain support - powerpc architecture code
3 *
4 * Copyright © 2009 Paul Mackerras, IBM Corporation.
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version

--- 233 unchanged lines hidden (view full) ---

242 struct signal_frame_64 __user *sigframe;
243 unsigned long __user *fp, *uregs;
244
245 next_ip = perf_instruction_pointer(regs);
246 lr = regs->link;
247 sp = regs->gpr[1];
248 perf_callchain_store(entry, next_ip);
249
250 while (entry->entry->nr < entry->max_stack) {
250 while (entry->nr < entry->max_stack) {
251 fp = (unsigned long __user *) sp;
252 if (!valid_user_sp(sp, 1) || read_user_stack_64(fp, &next_sp))
253 return;
254 if (level > 0 && read_user_stack_64(&fp[2], &next_ip))
255 return;
256
257 /*
258 * Note: the next_sp - sp >= signal frame size check

--- 189 unchanged lines hidden (view full) ---

448 long level = 0;
449 unsigned int __user *fp, *uregs;
450
451 next_ip = perf_instruction_pointer(regs);
452 lr = regs->link;
453 sp = regs->gpr[1];
454 perf_callchain_store(entry, next_ip);
455
251 fp = (unsigned long __user *) sp;
252 if (!valid_user_sp(sp, 1) || read_user_stack_64(fp, &next_sp))
253 return;
254 if (level > 0 && read_user_stack_64(&fp[2], &next_ip))
255 return;
256
257 /*
258 * Note: the next_sp - sp >= signal frame size check

--- 189 unchanged lines hidden (view full) ---

448 long level = 0;
449 unsigned int __user *fp, *uregs;
450
451 next_ip = perf_instruction_pointer(regs);
452 lr = regs->link;
453 sp = regs->gpr[1];
454 perf_callchain_store(entry, next_ip);
455
456 while (entry->entry->nr < entry->max_stack) {
456 while (entry->nr < entry->max_stack) {
457 fp = (unsigned int __user *) (unsigned long) sp;
458 if (!valid_user_sp(sp, 0) || read_user_stack_32(fp, &next_sp))
459 return;
460 if (level > 0 && read_user_stack_32(&fp[1], &next_ip))
461 return;
462
463 uregs = signal_frame_32_regs(sp, next_sp, next_ip);
464 if (!uregs && level <= 1)

--- 32 unchanged lines hidden ---
457 fp = (unsigned int __user *) (unsigned long) sp;
458 if (!valid_user_sp(sp, 0) || read_user_stack_32(fp, &next_sp))
459 return;
460 if (level > 0 && read_user_stack_32(&fp[1], &next_ip))
461 return;
462
463 uregs = signal_frame_32_regs(sp, next_sp, next_ip);
464 if (!uregs && level <= 1)

--- 32 unchanged lines hidden ---