On Thursday 27 March 2008 14:20, Mathieu Desnoyers wrote:Not in this patch, but I noticed: #define __trace_mark(name, call_private, format, args...) \ do { \ static const char __mstrtab_##name[] \ __attribute__((section("__markers_strings"))) \ = #name "\0" format; \ static struct marker __mark_##name \ __attribute__((section("__markers"), aligned(8))) = \ { __mstrtab_##name, &__mstrtab_##name[sizeof(#name)], \ 0, 0, marker_probe_cb, \ { __mark_empty_function, NULL}, NULL }; \ __mark_check_format(format, ## args); \ if (unlikely(__mark_##name.state)) { \ (*__mark_##name.call) \ (&__mark_##name, call_private, \ format, ## args); \ } \ } while (0) In this call: (*__mark_##name.call) \ (&__mark_##name, call_private, \ format, ## args); \ you make gcc allocate duplicate format string. You can use &__mstrtab_##name[sizeof(#name)] instead since it holds the same string, or drop ", format," above and "const char *fmt" from here: void (*call)(const struct marker *mdata, /* Probe wrapper */ void *call_private, const char *fmt, ...); since mdata->format is the same and all callees which need it can take it there. -- vda --
| Greg Kroah-Hartman | [PATCH 008/196] Chinese: add translation of volatile-considered-harmful.txt |
| Tarkan Erimer | Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3 |
| Greg KH | Re: [Patch v2] Make PCI extended config space (MMCONFIG) a driver opt-in |
| Andrew Morton | -mm merge plans for 2.6.23 |
git: | |
| Gerrit Renker | [PATCH 27/37] dccp: Integration of dynamic feature activation - part 2 (server side) |
| Herbert Xu | Re: [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| David Miller | [GIT]: Networking |
| Rémi Denis-Courmont | [PATCH 01/14] Phonet global definitions |
