int
main(int argc, char const *argv[])
{
+ const char ftrace[] = "kernel/trace/ftrace.o";
+ int ftrace_size = sizeof(ftrace) - 1;
int n_error = 0; /* gcc-4.3.0 false positive complaint */
- if (argc <= 1)
+
+ if (argc <= 1) {
fprintf(stderr, "usage: recordmcount file.o...\n");
- else /* Process each file in turn, allowing deep failure. */
+ return 0;
+ }
+
+ /* Process each file in turn, allowing deep failure. */
for (--argc, ++argv; 0 < argc; --argc, ++argv) {
int const sjval = setjmp(jmpenv);
+ int len;
+
+ /*
+ * The file kernel/trace/ftrace.o references the mcount
+ * function but does not call it. Since ftrace.o should
+ * not be traced anyway, we just skip it.
+ */
+ len = strlen(argv[0]);
+ if (len >= ftrace_size &&
+ strcmp(argv[0] + (len - ftrace_size), ftrace) == 0)
+ continue;
+
switch (sjval) {
default: {
fprintf(stderr, "internal error: %s\n", argv[0]);