Commit 64598e8b authored by Ingo Molnar's avatar Ingo Molnar

Merge tag 'perf-core-for-mingo-4.21-20190104' of...

Merge tag 'perf-core-for-mingo-4.21-20190104' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/urgent

Pull perf/core improvements and fixes from Arnaldo Carvalho de Melo:

perf annotate:

  Ivan Krylov:

  - Pass filename to objdump via execl, fixing usage with filenames
    with special characters.

perf report:

  Jin Yao:

     Fix wrong iteration count in --branch-history

perf stat:

  Jin Yao:

  - Fix endless wait for child process

perf test:

  Arnaldo Carvalho de Melo:

  - Use a fallback to get the pathname in vfs_getname in

tools build:

  Jiri Olsa:

  - Allow overriding CFLAGS assignments.

Misc:

  Arnaldo Carvalho de Melo:

  - Syncronize UAPI headers

  Mattias Jacobsson:

  - Remove redundant va_end() in strbuf_addv()
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parents 3bd6e94b 03fa4838
...@@ -281,9 +281,11 @@ ...@@ -281,9 +281,11 @@
#define X86_FEATURE_CLZERO (13*32+ 0) /* CLZERO instruction */ #define X86_FEATURE_CLZERO (13*32+ 0) /* CLZERO instruction */
#define X86_FEATURE_IRPERF (13*32+ 1) /* Instructions Retired Count */ #define X86_FEATURE_IRPERF (13*32+ 1) /* Instructions Retired Count */
#define X86_FEATURE_XSAVEERPTR (13*32+ 2) /* Always save/restore FP error pointers */ #define X86_FEATURE_XSAVEERPTR (13*32+ 2) /* Always save/restore FP error pointers */
#define X86_FEATURE_WBNOINVD (13*32+ 9) /* WBNOINVD instruction */
#define X86_FEATURE_AMD_IBPB (13*32+12) /* "" Indirect Branch Prediction Barrier */ #define X86_FEATURE_AMD_IBPB (13*32+12) /* "" Indirect Branch Prediction Barrier */
#define X86_FEATURE_AMD_IBRS (13*32+14) /* "" Indirect Branch Restricted Speculation */ #define X86_FEATURE_AMD_IBRS (13*32+14) /* "" Indirect Branch Restricted Speculation */
#define X86_FEATURE_AMD_STIBP (13*32+15) /* "" Single Thread Indirect Branch Predictors */ #define X86_FEATURE_AMD_STIBP (13*32+15) /* "" Single Thread Indirect Branch Predictors */
#define X86_FEATURE_AMD_STIBP_ALWAYS_ON (13*32+17) /* "" Single Thread Indirect Branch Predictors always-on preferred */
#define X86_FEATURE_AMD_SSBD (13*32+24) /* "" Speculative Store Bypass Disable */ #define X86_FEATURE_AMD_SSBD (13*32+24) /* "" Speculative Store Bypass Disable */
#define X86_FEATURE_VIRT_SSBD (13*32+25) /* Virtualized Speculative Store Bypass Disable */ #define X86_FEATURE_VIRT_SSBD (13*32+25) /* Virtualized Speculative Store Bypass Disable */
#define X86_FEATURE_AMD_SSB_NO (13*32+26) /* "" Speculative Store Bypass is fixed in hardware. */ #define X86_FEATURE_AMD_SSB_NO (13*32+26) /* "" Speculative Store Bypass is fixed in hardware. */
......
...@@ -16,6 +16,12 @@ ...@@ -16,6 +16,12 @@
# define DISABLE_MPX (1<<(X86_FEATURE_MPX & 31)) # define DISABLE_MPX (1<<(X86_FEATURE_MPX & 31))
#endif #endif
#ifdef CONFIG_X86_SMAP
# define DISABLE_SMAP 0
#else
# define DISABLE_SMAP (1<<(X86_FEATURE_SMAP & 31))
#endif
#ifdef CONFIG_X86_INTEL_UMIP #ifdef CONFIG_X86_INTEL_UMIP
# define DISABLE_UMIP 0 # define DISABLE_UMIP 0
#else #else
...@@ -68,7 +74,7 @@ ...@@ -68,7 +74,7 @@
#define DISABLED_MASK6 0 #define DISABLED_MASK6 0
#define DISABLED_MASK7 (DISABLE_PTI) #define DISABLED_MASK7 (DISABLE_PTI)
#define DISABLED_MASK8 0 #define DISABLED_MASK8 0
#define DISABLED_MASK9 (DISABLE_MPX) #define DISABLED_MASK9 (DISABLE_MPX|DISABLE_SMAP)
#define DISABLED_MASK10 0 #define DISABLED_MASK10 0
#define DISABLED_MASK11 0 #define DISABLED_MASK11 0
#define DISABLED_MASK12 0 #define DISABLED_MASK12 0
......
...@@ -738,9 +738,11 @@ __SYSCALL(__NR_statx, sys_statx) ...@@ -738,9 +738,11 @@ __SYSCALL(__NR_statx, sys_statx)
__SC_COMP(__NR_io_pgetevents, sys_io_pgetevents, compat_sys_io_pgetevents) __SC_COMP(__NR_io_pgetevents, sys_io_pgetevents, compat_sys_io_pgetevents)
#define __NR_rseq 293 #define __NR_rseq 293
__SYSCALL(__NR_rseq, sys_rseq) __SYSCALL(__NR_rseq, sys_rseq)
#define __NR_kexec_file_load 294
__SYSCALL(__NR_kexec_file_load, sys_kexec_file_load)
#undef __NR_syscalls #undef __NR_syscalls
#define __NR_syscalls 294 #define __NR_syscalls 295
/* /*
* 32 bit systems traditionally used different * 32 bit systems traditionally used different
......
...@@ -412,6 +412,14 @@ typedef struct drm_i915_irq_wait { ...@@ -412,6 +412,14 @@ typedef struct drm_i915_irq_wait {
int irq_seq; int irq_seq;
} drm_i915_irq_wait_t; } drm_i915_irq_wait_t;
/*
* Different modes of per-process Graphics Translation Table,
* see I915_PARAM_HAS_ALIASING_PPGTT
*/
#define I915_GEM_PPGTT_NONE 0
#define I915_GEM_PPGTT_ALIASING 1
#define I915_GEM_PPGTT_FULL 2
/* Ioctl to query kernel params: /* Ioctl to query kernel params:
*/ */
#define I915_PARAM_IRQ_ACTIVE 1 #define I915_PARAM_IRQ_ACTIVE 1
......
...@@ -266,10 +266,14 @@ struct sockaddr_in { ...@@ -266,10 +266,14 @@ struct sockaddr_in {
#define IN_CLASSD(a) ((((long int) (a)) & 0xf0000000) == 0xe0000000) #define IN_CLASSD(a) ((((long int) (a)) & 0xf0000000) == 0xe0000000)
#define IN_MULTICAST(a) IN_CLASSD(a) #define IN_MULTICAST(a) IN_CLASSD(a)
#define IN_MULTICAST_NET 0xF0000000 #define IN_MULTICAST_NET 0xe0000000
#define IN_EXPERIMENTAL(a) ((((long int) (a)) & 0xf0000000) == 0xf0000000) #define IN_BADCLASS(a) ((((long int) (a) ) == 0xffffffff)
#define IN_BADCLASS(a) IN_EXPERIMENTAL((a)) #define IN_EXPERIMENTAL(a) IN_BADCLASS((a))
#define IN_CLASSE(a) ((((long int) (a)) & 0xf0000000) == 0xf0000000)
#define IN_CLASSE_NET 0xffffffff
#define IN_CLASSE_NSHIFT 0
/* Address to accept any incoming messages. */ /* Address to accept any incoming messages. */
#define INADDR_ANY ((unsigned long int) 0x00000000) #define INADDR_ANY ((unsigned long int) 0x00000000)
......
...@@ -492,6 +492,17 @@ struct kvm_dirty_log { ...@@ -492,6 +492,17 @@ struct kvm_dirty_log {
}; };
}; };
/* for KVM_CLEAR_DIRTY_LOG */
struct kvm_clear_dirty_log {
__u32 slot;
__u32 num_pages;
__u64 first_page;
union {
void __user *dirty_bitmap; /* one bit per page */
__u64 padding2;
};
};
/* for KVM_SET_SIGNAL_MASK */ /* for KVM_SET_SIGNAL_MASK */
struct kvm_signal_mask { struct kvm_signal_mask {
__u32 len; __u32 len;
...@@ -975,6 +986,8 @@ struct kvm_ppc_resize_hpt { ...@@ -975,6 +986,8 @@ struct kvm_ppc_resize_hpt {
#define KVM_CAP_HYPERV_ENLIGHTENED_VMCS 163 #define KVM_CAP_HYPERV_ENLIGHTENED_VMCS 163
#define KVM_CAP_EXCEPTION_PAYLOAD 164 #define KVM_CAP_EXCEPTION_PAYLOAD 164
#define KVM_CAP_ARM_VM_IPA_SIZE 165 #define KVM_CAP_ARM_VM_IPA_SIZE 165
#define KVM_CAP_MANUAL_DIRTY_LOG_PROTECT 166
#define KVM_CAP_HYPERV_CPUID 167
#ifdef KVM_CAP_IRQ_ROUTING #ifdef KVM_CAP_IRQ_ROUTING
...@@ -1421,6 +1434,12 @@ struct kvm_enc_region { ...@@ -1421,6 +1434,12 @@ struct kvm_enc_region {
#define KVM_GET_NESTED_STATE _IOWR(KVMIO, 0xbe, struct kvm_nested_state) #define KVM_GET_NESTED_STATE _IOWR(KVMIO, 0xbe, struct kvm_nested_state)
#define KVM_SET_NESTED_STATE _IOW(KVMIO, 0xbf, struct kvm_nested_state) #define KVM_SET_NESTED_STATE _IOW(KVMIO, 0xbf, struct kvm_nested_state)
/* Available with KVM_CAP_MANUAL_DIRTY_LOG_PROTECT */
#define KVM_CLEAR_DIRTY_LOG _IOWR(KVMIO, 0xc0, struct kvm_clear_dirty_log)
/* Available with KVM_CAP_HYPERV_CPUID */
#define KVM_GET_SUPPORTED_HV_CPUID _IOWR(KVMIO, 0xc1, struct kvm_cpuid2)
/* Secure Encrypted Virtualization command */ /* Secure Encrypted Virtualization command */
enum sev_cmd_id { enum sev_cmd_id {
/* Guest initialization commands */ /* Guest initialization commands */
......
...@@ -220,4 +220,12 @@ struct prctl_mm_map { ...@@ -220,4 +220,12 @@ struct prctl_mm_map {
# define PR_SPEC_DISABLE (1UL << 2) # define PR_SPEC_DISABLE (1UL << 2)
# define PR_SPEC_FORCE_DISABLE (1UL << 3) # define PR_SPEC_FORCE_DISABLE (1UL << 3)
/* Reset arm64 pointer authentication keys */
#define PR_PAC_RESET_KEYS 54
# define PR_PAC_APIAKEY (1UL << 0)
# define PR_PAC_APIBKEY (1UL << 1)
# define PR_PAC_APDAKEY (1UL << 2)
# define PR_PAC_APDBKEY (1UL << 3)
# define PR_PAC_APGAKEY (1UL << 4)
#endif /* _LINUX_PRCTL_H */ #endif /* _LINUX_PRCTL_H */
...@@ -524,12 +524,14 @@ $(arch_errno_name_array): $(arch_errno_tbl) ...@@ -524,12 +524,14 @@ $(arch_errno_name_array): $(arch_errno_tbl)
all: shell_compatibility_test $(ALL_PROGRAMS) $(LANG_BINDINGS) $(OTHER_PROGRAMS) all: shell_compatibility_test $(ALL_PROGRAMS) $(LANG_BINDINGS) $(OTHER_PROGRAMS)
# Create python binding output directory if not already present
_dummy := $(shell [ -d '$(OUTPUT)python' ] || mkdir -p '$(OUTPUT)python')
$(OUTPUT)python/perf.so: $(PYTHON_EXT_SRCS) $(PYTHON_EXT_DEPS) $(LIBTRACEEVENT_DYNAMIC_LIST) $(OUTPUT)python/perf.so: $(PYTHON_EXT_SRCS) $(PYTHON_EXT_DEPS) $(LIBTRACEEVENT_DYNAMIC_LIST)
$(QUIET_GEN)LDSHARED="$(CC) -pthread -shared" \ $(QUIET_GEN)LDSHARED="$(CC) -pthread -shared" \
CFLAGS='$(CFLAGS)' LDFLAGS='$(LDFLAGS) $(LIBTRACEEVENT_DYNAMIC_LIST_LDFLAGS)' \ CFLAGS='$(CFLAGS)' LDFLAGS='$(LDFLAGS) $(LIBTRACEEVENT_DYNAMIC_LIST_LDFLAGS)' \
$(PYTHON_WORD) util/setup.py \ $(PYTHON_WORD) util/setup.py \
--quiet build_ext; \ --quiet build_ext; \
mkdir -p $(OUTPUT)python && \
cp $(PYTHON_EXTBUILD_LIB)perf*.so $(OUTPUT)python/ cp $(PYTHON_EXTBUILD_LIB)perf*.so $(OUTPUT)python/
please_set_SHELL_PATH_to_a_more_modern_shell: please_set_SHELL_PATH_to_a_more_modern_shell:
......
...@@ -561,6 +561,7 @@ static int __run_perf_stat(int argc, const char **argv, int run_idx) ...@@ -561,6 +561,7 @@ static int __run_perf_stat(int argc, const char **argv, int run_idx)
break; break;
} }
} }
if (child_pid != -1)
wait4(child_pid, &status, 0, &stat_config.ru_data); wait4(child_pid, &status, 0, &stat_config.ru_data);
if (workload_exec_errno) { if (workload_exec_errno) {
......
...@@ -13,7 +13,8 @@ add_probe_vfs_getname() { ...@@ -13,7 +13,8 @@ add_probe_vfs_getname() {
local verbose=$1 local verbose=$1
if [ $had_vfs_getname -eq 1 ] ; then if [ $had_vfs_getname -eq 1 ] ; then
line=$(perf probe -L getname_flags 2>&1 | egrep 'result.*=.*filename;' | sed -r 's/[[:space:]]+([[:digit:]]+)[[:space:]]+result->uptr.*/\1/') line=$(perf probe -L getname_flags 2>&1 | egrep 'result.*=.*filename;' | sed -r 's/[[:space:]]+([[:digit:]]+)[[:space:]]+result->uptr.*/\1/')
perf probe $verbose "vfs_getname=getname_flags:${line} pathname=result->name:string" perf probe -q "vfs_getname=getname_flags:${line} pathname=result->name:string" || \
perf probe $verbose "vfs_getname=getname_flags:${line} pathname=filename:string"
fi fi
} }
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
[ $# -eq 1 ] && header_dir=$1 || header_dir=tools/include/uapi/linux/ [ $# -eq 1 ] && header_dir=$1 || header_dir=tools/include/uapi/linux/
printf "static const char *prctl_options[] = {\n" printf "static const char *prctl_options[] = {\n"
regex='^#define[[:space:]]+PR_([GS]ET\w+)[[:space:]]*([[:xdigit:]]+).*' regex='^#define[[:space:]]+PR_(\w+)[[:space:]]*([[:xdigit:]]+).*'
egrep $regex ${header_dir}/prctl.h | grep -v PR_SET_PTRACER | \ egrep $regex ${header_dir}/prctl.h | grep -v PR_SET_PTRACER | \
sed -r "s/$regex/\2 \1/g" | \ sed -r "s/$regex/\2 \1/g" | \
sort -n | xargs printf "\t[%s] = \"%s\",\n" sort -n | xargs printf "\t[%s] = \"%s\",\n"
......
...@@ -1723,15 +1723,14 @@ static int symbol__disassemble(struct symbol *sym, struct annotate_args *args) ...@@ -1723,15 +1723,14 @@ static int symbol__disassemble(struct symbol *sym, struct annotate_args *args)
err = asprintf(&command, err = asprintf(&command,
"%s %s%s --start-address=0x%016" PRIx64 "%s %s%s --start-address=0x%016" PRIx64
" --stop-address=0x%016" PRIx64 " --stop-address=0x%016" PRIx64
" -l -d %s %s -C \"%s\" 2>/dev/null|grep -v \"%s:\"|expand", " -l -d %s %s -C \"$1\" 2>/dev/null|grep -v \"$1:\"|expand",
opts->objdump_path ?: "objdump", opts->objdump_path ?: "objdump",
opts->disassembler_style ? "-M " : "", opts->disassembler_style ? "-M " : "",
opts->disassembler_style ?: "", opts->disassembler_style ?: "",
map__rip_2objdump(map, sym->start), map__rip_2objdump(map, sym->start),
map__rip_2objdump(map, sym->end), map__rip_2objdump(map, sym->end),
opts->show_asm_raw ? "" : "--no-show-raw", opts->show_asm_raw ? "" : "--no-show-raw",
opts->annotate_src ? "-S" : "", opts->annotate_src ? "-S" : "");
symfs_filename, symfs_filename);
if (err < 0) { if (err < 0) {
pr_err("Failure allocating memory for the command to run\n"); pr_err("Failure allocating memory for the command to run\n");
...@@ -1756,7 +1755,8 @@ static int symbol__disassemble(struct symbol *sym, struct annotate_args *args) ...@@ -1756,7 +1755,8 @@ static int symbol__disassemble(struct symbol *sym, struct annotate_args *args)
close(stdout_fd[0]); close(stdout_fd[0]);
dup2(stdout_fd[1], 1); dup2(stdout_fd[1], 1);
close(stdout_fd[1]); close(stdout_fd[1]);
execl("/bin/sh", "sh", "-c", command, NULL); execl("/bin/sh", "sh", "-c", command, "--", symfs_filename,
NULL);
perror(command); perror(command);
exit(-1); exit(-1);
} }
......
...@@ -766,6 +766,7 @@ static enum match_result match_chain(struct callchain_cursor_node *node, ...@@ -766,6 +766,7 @@ static enum match_result match_chain(struct callchain_cursor_node *node,
cnode->cycles_count += node->branch_flags.cycles; cnode->cycles_count += node->branch_flags.cycles;
cnode->iter_count += node->nr_loop_iter; cnode->iter_count += node->nr_loop_iter;
cnode->iter_cycles += node->iter_cycles; cnode->iter_cycles += node->iter_cycles;
cnode->from_count++;
} }
} }
...@@ -1345,10 +1346,10 @@ static int branch_to_str(char *bf, int bfsize, ...@@ -1345,10 +1346,10 @@ static int branch_to_str(char *bf, int bfsize,
static int branch_from_str(char *bf, int bfsize, static int branch_from_str(char *bf, int bfsize,
u64 branch_count, u64 branch_count,
u64 cycles_count, u64 iter_count, u64 cycles_count, u64 iter_count,
u64 iter_cycles) u64 iter_cycles, u64 from_count)
{ {
int printed = 0, i = 0; int printed = 0, i = 0;
u64 cycles; u64 cycles, v = 0;
cycles = cycles_count / branch_count; cycles = cycles_count / branch_count;
if (cycles) { if (cycles) {
...@@ -1357,15 +1358,17 @@ static int branch_from_str(char *bf, int bfsize, ...@@ -1357,15 +1358,17 @@ static int branch_from_str(char *bf, int bfsize,
bf + printed, bfsize - printed); bf + printed, bfsize - printed);
} }
if (iter_count) { if (iter_count && from_count) {
v = iter_count / from_count;
if (v) {
printed += count_pri64_printf(i++, "iter", printed += count_pri64_printf(i++, "iter",
iter_count, v, bf + printed, bfsize - printed);
bf + printed, bfsize - printed);
printed += count_pri64_printf(i++, "avg_cycles", printed += count_pri64_printf(i++, "avg_cycles",
iter_cycles / iter_count, iter_cycles / iter_count,
bf + printed, bfsize - printed); bf + printed, bfsize - printed);
} }
}
if (i) if (i)
printed += scnprintf(bf + printed, bfsize - printed, ")"); printed += scnprintf(bf + printed, bfsize - printed, ")");
...@@ -1377,6 +1380,7 @@ static int counts_str_build(char *bf, int bfsize, ...@@ -1377,6 +1380,7 @@ static int counts_str_build(char *bf, int bfsize,
u64 branch_count, u64 predicted_count, u64 branch_count, u64 predicted_count,
u64 abort_count, u64 cycles_count, u64 abort_count, u64 cycles_count,
u64 iter_count, u64 iter_cycles, u64 iter_count, u64 iter_cycles,
u64 from_count,
struct branch_type_stat *brtype_stat) struct branch_type_stat *brtype_stat)
{ {
int printed; int printed;
...@@ -1389,7 +1393,8 @@ static int counts_str_build(char *bf, int bfsize, ...@@ -1389,7 +1393,8 @@ static int counts_str_build(char *bf, int bfsize,
predicted_count, abort_count, brtype_stat); predicted_count, abort_count, brtype_stat);
} else { } else {
printed = branch_from_str(bf, bfsize, branch_count, printed = branch_from_str(bf, bfsize, branch_count,
cycles_count, iter_count, iter_cycles); cycles_count, iter_count, iter_cycles,
from_count);
} }
if (!printed) if (!printed)
...@@ -1402,13 +1407,14 @@ static int callchain_counts_printf(FILE *fp, char *bf, int bfsize, ...@@ -1402,13 +1407,14 @@ static int callchain_counts_printf(FILE *fp, char *bf, int bfsize,
u64 branch_count, u64 predicted_count, u64 branch_count, u64 predicted_count,
u64 abort_count, u64 cycles_count, u64 abort_count, u64 cycles_count,
u64 iter_count, u64 iter_cycles, u64 iter_count, u64 iter_cycles,
u64 from_count,
struct branch_type_stat *brtype_stat) struct branch_type_stat *brtype_stat)
{ {
char str[256]; char str[256];
counts_str_build(str, sizeof(str), branch_count, counts_str_build(str, sizeof(str), branch_count,
predicted_count, abort_count, cycles_count, predicted_count, abort_count, cycles_count,
iter_count, iter_cycles, brtype_stat); iter_count, iter_cycles, from_count, brtype_stat);
if (fp) if (fp)
return fprintf(fp, "%s", str); return fprintf(fp, "%s", str);
...@@ -1422,6 +1428,7 @@ int callchain_list_counts__printf_value(struct callchain_list *clist, ...@@ -1422,6 +1428,7 @@ int callchain_list_counts__printf_value(struct callchain_list *clist,
u64 branch_count, predicted_count; u64 branch_count, predicted_count;
u64 abort_count, cycles_count; u64 abort_count, cycles_count;
u64 iter_count, iter_cycles; u64 iter_count, iter_cycles;
u64 from_count;
branch_count = clist->branch_count; branch_count = clist->branch_count;
predicted_count = clist->predicted_count; predicted_count = clist->predicted_count;
...@@ -1429,11 +1436,12 @@ int callchain_list_counts__printf_value(struct callchain_list *clist, ...@@ -1429,11 +1436,12 @@ int callchain_list_counts__printf_value(struct callchain_list *clist,
cycles_count = clist->cycles_count; cycles_count = clist->cycles_count;
iter_count = clist->iter_count; iter_count = clist->iter_count;
iter_cycles = clist->iter_cycles; iter_cycles = clist->iter_cycles;
from_count = clist->from_count;
return callchain_counts_printf(fp, bf, bfsize, branch_count, return callchain_counts_printf(fp, bf, bfsize, branch_count,
predicted_count, abort_count, predicted_count, abort_count,
cycles_count, iter_count, iter_cycles, cycles_count, iter_count, iter_cycles,
&clist->brtype_stat); from_count, &clist->brtype_stat);
} }
static void free_callchain_node(struct callchain_node *node) static void free_callchain_node(struct callchain_node *node)
......
...@@ -118,6 +118,7 @@ struct callchain_list { ...@@ -118,6 +118,7 @@ struct callchain_list {
bool has_children; bool has_children;
}; };
u64 branch_count; u64 branch_count;
u64 from_count;
u64 predicted_count; u64 predicted_count;
u64 abort_count; u64 abort_count;
u64 cycles_count; u64 cycles_count;
......
...@@ -2005,7 +2005,7 @@ static void save_iterations(struct iterations *iter, ...@@ -2005,7 +2005,7 @@ static void save_iterations(struct iterations *iter,
{ {
int i; int i;
iter->nr_loop_iter = nr; iter->nr_loop_iter++;
iter->cycles = 0; iter->cycles = 0;
for (i = 0; i < nr; i++) for (i = 0; i < nr; i++)
......
...@@ -109,7 +109,6 @@ static int strbuf_addv(struct strbuf *sb, const char *fmt, va_list ap) ...@@ -109,7 +109,6 @@ static int strbuf_addv(struct strbuf *sb, const char *fmt, va_list ap)
return ret; return ret;
} }
len = vsnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, ap_saved); len = vsnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, ap_saved);
va_end(ap_saved);
if (len > strbuf_avail(sb)) { if (len > strbuf_avail(sb)) {
pr_debug("this should not happen, your vsnprintf is broken"); pr_debug("this should not happen, your vsnprintf is broken");
va_end(ap_saved); va_end(ap_saved);
......
...@@ -6,7 +6,7 @@ VERSION = 1.0 ...@@ -6,7 +6,7 @@ VERSION = 1.0
BINDIR=usr/bin BINDIR=usr/bin
WARNFLAGS=-Wall -Wshadow -W -Wformat -Wimplicit-function-declaration -Wimplicit-int WARNFLAGS=-Wall -Wshadow -W -Wformat -Wimplicit-function-declaration -Wimplicit-int
override CFLAGS+= -O1 ${WARNFLAGS} override CFLAGS+= $(call cc-option,-O3,-O1) ${WARNFLAGS}
# Add "-fstack-protector" only if toolchain supports it. # Add "-fstack-protector" only if toolchain supports it.
override CFLAGS+= $(call cc-option,-fstack-protector-strong) override CFLAGS+= $(call cc-option,-fstack-protector-strong)
CC?= $(CROSS_COMPILE)gcc CC?= $(CROSS_COMPILE)gcc
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment