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 --- |