Merge branch 'perf-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip

* 'perf-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
perf tools: Check if /dev/null can be used as the -o gcc argument
perf tools: Move QUIET_STDERR def to before first use
perf: Stop stack frame walking off kernel addresses boundaries

+36 -22
+8 -6
arch/x86/kernel/dumpstack.c
··· 123 while (valid_stack_ptr(tinfo, ret_addr, sizeof(*ret_addr), end)) { 124 unsigned long addr = *ret_addr; 125 126 - if (__kernel_text_address(addr)) { 127 - ops->address(data, addr, 1); 128 - frame = frame->next_frame; 129 - ret_addr = &frame->return_address; 130 - print_ftrace_graph_addr(addr, data, ops, tinfo, graph); 131 - } 132 } 133 return (unsigned long)frame; 134 } 135 EXPORT_SYMBOL_GPL(print_context_stack_bp);
··· 123 while (valid_stack_ptr(tinfo, ret_addr, sizeof(*ret_addr), end)) { 124 unsigned long addr = *ret_addr; 125 126 + if (!__kernel_text_address(addr)) 127 + break; 128 + 129 + ops->address(data, addr, 1); 130 + frame = frame->next_frame; 131 + ret_addr = &frame->return_address; 132 + print_ftrace_graph_addr(addr, data, ops, tinfo, graph); 133 } 134 + 135 return (unsigned long)frame; 136 } 137 EXPORT_SYMBOL_GPL(print_context_stack_bp);
+28 -16
tools/perf/Makefile
··· 250 # explicitly what architecture to check for. Fix this up for yours.. 251 SPARSE_FLAGS = -D__BIG_ENDIAN__ -D__powerpc__ 252 253 - ifeq ($(shell sh -c "echo 'int foo(void) {char X[2]; return 3;}' | $(CC) -x c -c -Werror -fstack-protector-all - -o /dev/null "$(QUIET_STDERR)" && echo y"), y) 254 CFLAGS := $(CFLAGS) -fstack-protector-all 255 endif 256 ··· 463 464 PERFLIBS = $(LIB_FILE) 465 466 - ifeq ($(V), 2) 467 - QUIET_STDERR = ">/dev/null" 468 - else 469 - QUIET_STDERR = ">/dev/null 2>&1" 470 - endif 471 # 472 # Platform specific tweaks 473 # ··· 490 PTHREAD_LIBS = 491 endif 492 493 - ifeq ($(shell sh -c "(echo '\#include <libelf.h>'; echo 'int main(void) { Elf * elf = elf_begin(0, ELF_C_READ, 0); return (long)elf; }') | $(CC) -x c - $(ALL_CFLAGS) -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -o /dev/null $(ALL_LDFLAGS) $(EXTLIBS) "$(QUIET_STDERR)" && echo y"), y) 494 - ifneq ($(shell sh -c "(echo '\#include <gnu/libc-version.h>'; echo 'int main(void) { const char * version = gnu_get_libc_version(); return (long)version; }') | $(CC) -x c - $(ALL_CFLAGS) -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -o /dev/null $(ALL_LDFLAGS) $(EXTLIBS) "$(QUIET_STDERR)" && echo y"), y) 495 msg := $(error No gnu/libc-version.h found, please install glibc-dev[el]/glibc-static); 496 endif 497 498 - ifneq ($(shell sh -c "(echo '\#include <libelf.h>'; echo 'int main(void) { Elf * elf = elf_begin(0, ELF_C_READ_MMAP, 0); return (long)elf; }') | $(CC) -x c - $(ALL_CFLAGS) -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -o /dev/null $(ALL_LDFLAGS) $(EXTLIBS) "$(QUIET_STDERR)" && echo y"), y) 499 BASIC_CFLAGS += -DLIBELF_NO_MMAP 500 endif 501 else 502 msg := $(error No libelf.h/libelf found, please install libelf-dev/elfutils-libelf-devel and glibc-dev[el]); 503 endif 504 505 - ifneq ($(shell sh -c "(echo '\#ifndef _MIPS_SZLONG'; echo '\#define _MIPS_SZLONG 0'; echo '\#endif'; echo '\#include <dwarf.h>'; echo '\#include <libdwarf.h>'; echo 'int main(void) { Dwarf_Debug dbg; Dwarf_Error err; Dwarf_Ranges *rng; dwarf_init(0, DW_DLC_READ, 0, 0, &dbg, &err); dwarf_get_ranges(dbg, 0, &rng, 0, 0, &err); return (long)dbg; }') | $(CC) -x c - $(ALL_CFLAGS) -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/libdwarf -ldwarf -lelf -o /dev/null $(ALL_LDFLAGS) $(EXTLIBS) "$(QUIET_STDERR)" && echo y"), y) 506 msg := $(warning No libdwarf.h found or old libdwarf.h found, disables dwarf support. Please install libdwarf-dev/libdwarf-devel >= 20081231); 507 BASIC_CFLAGS += -DNO_LIBDWARF 508 else ··· 516 PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null` 517 endif 518 519 - ifneq ($(shell sh -c "(echo '\#include <EXTERN.h>'; echo '\#include <perl.h>'; echo 'int main(void) { perl_alloc(); return 0; }') | $(CC) -x c - $(PERL_EMBED_CCOPTS) -o /dev/null $(PERL_EMBED_LDOPTS) > /dev/null 2>&1 && echo y"), y) 520 BASIC_CFLAGS += -DNO_LIBPERL 521 else 522 ALL_LDFLAGS += $(PERL_EMBED_LDOPTS) ··· 526 ifdef NO_DEMANGLE 527 BASIC_CFLAGS += -DNO_DEMANGLE 528 else 529 - has_bfd := $(shell sh -c "(echo '\#include <bfd.h>'; echo 'int main(void) { bfd_demangle(0, 0, 0); return 0; }') | $(CC) -x c - $(ALL_CFLAGS) -o /dev/null $(ALL_LDFLAGS) $(EXTLIBS) -lbfd "$(QUIET_STDERR)" && echo y") 530 531 ifeq ($(has_bfd),y) 532 EXTLIBS += -lbfd 533 else 534 - has_bfd_iberty := $(shell sh -c "(echo '\#include <bfd.h>'; echo 'int main(void) { bfd_demangle(0, 0, 0); return 0; }') | $(CC) -x c - $(ALL_CFLAGS) -o /dev/null $(ALL_LDFLAGS) $(EXTLIBS) -lbfd -liberty "$(QUIET_STDERR)" && echo y") 535 ifeq ($(has_bfd_iberty),y) 536 EXTLIBS += -lbfd -liberty 537 else 538 - has_bfd_iberty_z := $(shell sh -c "(echo '\#include <bfd.h>'; echo 'int main(void) { bfd_demangle(0, 0, 0); return 0; }') | $(CC) -x c - $(ALL_CFLAGS) -o /dev/null $(ALL_LDFLAGS) $(EXTLIBS) -lbfd -liberty -lz "$(QUIET_STDERR)" && echo y") 539 ifeq ($(has_bfd_iberty_z),y) 540 EXTLIBS += -lbfd -liberty -lz 541 else 542 - has_cplus_demangle := $(shell sh -c "(echo 'extern char *cplus_demangle(const char *, int);'; echo 'int main(void) { cplus_demangle(0, 0); return 0; }') | $(CC) -x c - $(ALL_CFLAGS) -o /dev/null $(ALL_LDFLAGS) $(EXTLIBS) -liberty "$(QUIET_STDERR)" && echo y") 543 ifeq ($(has_cplus_demangle),y) 544 EXTLIBS += -liberty 545 BASIC_CFLAGS += -DHAVE_CPLUS_DEMANGLE ··· 787 788 SHELL = $(SHELL_PATH) 789 790 - all:: shell_compatibility_test $(ALL_PROGRAMS) $(BUILT_INS) $(OTHER_PROGRAMS) PERF-BUILD-OPTIONS 791 ifneq (,$X) 792 $(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_PROGRAMS) $(BUILT_INS) perf$X)), test '$p' -ef '$p$X' || $(RM) '$p';) 793 endif ··· 1113 .PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell 1114 .PHONY: .FORCE-PERF-VERSION-FILE TAGS tags cscope .FORCE-PERF-CFLAGS 1115 .PHONY: .FORCE-PERF-BUILD-OPTIONS 1116 1117 ### Make sure built-ins do not have dups and listed in perf.c 1118 #
··· 250 # explicitly what architecture to check for. Fix this up for yours.. 251 SPARSE_FLAGS = -D__BIG_ENDIAN__ -D__powerpc__ 252 253 + ifeq ($(V), 2) 254 + QUIET_STDERR = ">/dev/null" 255 + else 256 + QUIET_STDERR = ">/dev/null 2>&1" 257 + endif 258 + 259 + BITBUCKET = "/dev/null" 260 + 261 + ifneq ($(shell sh -c "(echo '\#include <stdio.h>'; echo 'int main(void) { return puts(\"hi\"); }') | $(CC) -x c - $(ALL_CFLAGS) -o $(BITBUCKET) "$(QUIET_STDERR)" && echo y"), y) 262 + BITBUCKET = .perf.dev.null 263 + endif 264 + 265 + ifeq ($(shell sh -c "echo 'int foo(void) {char X[2]; return 3;}' | $(CC) -x c -c -Werror -fstack-protector-all - -o $(BITBUCKET) "$(QUIET_STDERR)" && echo y"), y) 266 CFLAGS := $(CFLAGS) -fstack-protector-all 267 endif 268 ··· 451 452 PERFLIBS = $(LIB_FILE) 453 454 # 455 # Platform specific tweaks 456 # ··· 483 PTHREAD_LIBS = 484 endif 485 486 + ifeq ($(shell sh -c "(echo '\#include <libelf.h>'; echo 'int main(void) { Elf * elf = elf_begin(0, ELF_C_READ, 0); return (long)elf; }') | $(CC) -x c - $(ALL_CFLAGS) -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -o $(BITBUCKET) $(ALL_LDFLAGS) $(EXTLIBS) "$(QUIET_STDERR)" && echo y"), y) 487 + ifneq ($(shell sh -c "(echo '\#include <gnu/libc-version.h>'; echo 'int main(void) { const char * version = gnu_get_libc_version(); return (long)version; }') | $(CC) -x c - $(ALL_CFLAGS) -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -o $(BITBUCKET) $(ALL_LDFLAGS) $(EXTLIBS) "$(QUIET_STDERR)" && echo y"), y) 488 msg := $(error No gnu/libc-version.h found, please install glibc-dev[el]/glibc-static); 489 endif 490 491 + ifneq ($(shell sh -c "(echo '\#include <libelf.h>'; echo 'int main(void) { Elf * elf = elf_begin(0, ELF_C_READ_MMAP, 0); return (long)elf; }') | $(CC) -x c - $(ALL_CFLAGS) -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -o $(BITBUCKET) $(ALL_LDFLAGS) $(EXTLIBS) "$(QUIET_STDERR)" && echo y"), y) 492 BASIC_CFLAGS += -DLIBELF_NO_MMAP 493 endif 494 else 495 msg := $(error No libelf.h/libelf found, please install libelf-dev/elfutils-libelf-devel and glibc-dev[el]); 496 endif 497 498 + ifneq ($(shell sh -c "(echo '\#ifndef _MIPS_SZLONG'; echo '\#define _MIPS_SZLONG 0'; echo '\#endif'; echo '\#include <dwarf.h>'; echo '\#include <libdwarf.h>'; echo 'int main(void) { Dwarf_Debug dbg; Dwarf_Error err; Dwarf_Ranges *rng; dwarf_init(0, DW_DLC_READ, 0, 0, &dbg, &err); dwarf_get_ranges(dbg, 0, &rng, 0, 0, &err); return (long)dbg; }') | $(CC) -x c - $(ALL_CFLAGS) -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/libdwarf -ldwarf -lelf -o $(BITBUCKET) $(ALL_LDFLAGS) $(EXTLIBS) "$(QUIET_STDERR)" && echo y"), y) 499 msg := $(warning No libdwarf.h found or old libdwarf.h found, disables dwarf support. Please install libdwarf-dev/libdwarf-devel >= 20081231); 500 BASIC_CFLAGS += -DNO_LIBDWARF 501 else ··· 509 PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null` 510 endif 511 512 + ifneq ($(shell sh -c "(echo '\#include <EXTERN.h>'; echo '\#include <perl.h>'; echo 'int main(void) { perl_alloc(); return 0; }') | $(CC) -x c - $(PERL_EMBED_CCOPTS) -o $(BITBUCKET) $(PERL_EMBED_LDOPTS) > /dev/null 2>&1 && echo y"), y) 513 BASIC_CFLAGS += -DNO_LIBPERL 514 else 515 ALL_LDFLAGS += $(PERL_EMBED_LDOPTS) ··· 519 ifdef NO_DEMANGLE 520 BASIC_CFLAGS += -DNO_DEMANGLE 521 else 522 + has_bfd := $(shell sh -c "(echo '\#include <bfd.h>'; echo 'int main(void) { bfd_demangle(0, 0, 0); return 0; }') | $(CC) -x c - $(ALL_CFLAGS) -o $(BITBUCKET) $(ALL_LDFLAGS) $(EXTLIBS) -lbfd "$(QUIET_STDERR)" && echo y") 523 524 ifeq ($(has_bfd),y) 525 EXTLIBS += -lbfd 526 else 527 + has_bfd_iberty := $(shell sh -c "(echo '\#include <bfd.h>'; echo 'int main(void) { bfd_demangle(0, 0, 0); return 0; }') | $(CC) -x c - $(ALL_CFLAGS) -o $(BITBUCKET) $(ALL_LDFLAGS) $(EXTLIBS) -lbfd -liberty "$(QUIET_STDERR)" && echo y") 528 ifeq ($(has_bfd_iberty),y) 529 EXTLIBS += -lbfd -liberty 530 else 531 + has_bfd_iberty_z := $(shell sh -c "(echo '\#include <bfd.h>'; echo 'int main(void) { bfd_demangle(0, 0, 0); return 0; }') | $(CC) -x c - $(ALL_CFLAGS) -o $(BITBUCKET) $(ALL_LDFLAGS) $(EXTLIBS) -lbfd -liberty -lz "$(QUIET_STDERR)" && echo y") 532 ifeq ($(has_bfd_iberty_z),y) 533 EXTLIBS += -lbfd -liberty -lz 534 else 535 + has_cplus_demangle := $(shell sh -c "(echo 'extern char *cplus_demangle(const char *, int);'; echo 'int main(void) { cplus_demangle(0, 0); return 0; }') | $(CC) -x c - $(ALL_CFLAGS) -o $(BITBUCKET) $(ALL_LDFLAGS) $(EXTLIBS) -liberty "$(QUIET_STDERR)" && echo y") 536 ifeq ($(has_cplus_demangle),y) 537 EXTLIBS += -liberty 538 BASIC_CFLAGS += -DHAVE_CPLUS_DEMANGLE ··· 780 781 SHELL = $(SHELL_PATH) 782 783 + all:: .perf.dev.null shell_compatibility_test $(ALL_PROGRAMS) $(BUILT_INS) $(OTHER_PROGRAMS) PERF-BUILD-OPTIONS 784 ifneq (,$X) 785 $(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_PROGRAMS) $(BUILT_INS) perf$X)), test '$p' -ef '$p$X' || $(RM) '$p';) 786 endif ··· 1106 .PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell 1107 .PHONY: .FORCE-PERF-VERSION-FILE TAGS tags cscope .FORCE-PERF-CFLAGS 1108 .PHONY: .FORCE-PERF-BUILD-OPTIONS 1109 + 1110 + .perf.dev.null: 1111 + touch .perf.dev.null 1112 + 1113 + .INTERMEDIATE: .perf.dev.null 1114 1115 ### Make sure built-ins do not have dups and listed in perf.c 1116 #