summaryrefslogtreecommitdiffstats
path: root/debian/rules.d/tools/objtool
diff options
context:
space:
mode:
Diffstat (limited to 'debian/rules.d/tools/objtool')
-rw-r--r--debian/rules.d/tools/objtool/Makefile18
-rw-r--r--debian/rules.d/tools/objtool/objtool.c21
2 files changed, 39 insertions, 0 deletions
diff --git a/debian/rules.d/tools/objtool/Makefile b/debian/rules.d/tools/objtool/Makefile
new file mode 100644
index 000000000..8666355f6
--- /dev/null
+++ b/debian/rules.d/tools/objtool/Makefile
@@ -0,0 +1,18 @@
+PROGS = \
+ objtool \
+ objtool.real-powerpc \
+ objtool.real-x86
+
+include $(top_rulesdir)/Makefile.inc
+
+objtool.real-%:
+ mkdir -p $*
+# objtool always uses HOSTCC, HOSTLD, and HOSTAR; we need to override
+# these on the command line to make cross-builds work. But it also
+# builds fixdep which still needs to be native in a cross-build. Set
+# REALHOSTCC and REALHOSTLD variables which will be used for fixdep.
+ $(MAKE) -C $(top_srcdir)/tools/objtool O=$(CURDIR)/$* HOSTARCH=$(KERNEL_ARCH) ARCH=$* HOSTCC=$(CC) HOSTLD=$(CROSS_COMPILE)ld HOSTAR=$(CROSS_COMPILE)ar REALHOSTCC=gcc REALHOSTLD=ld V=1 EXTRA_CFLAGS='$(CFLAGS) $(CPPFLAGS)'
+ ln -f $*/objtool $@
+
+%: %.o
+ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^
diff --git a/debian/rules.d/tools/objtool/objtool.c b/debian/rules.d/tools/objtool/objtool.c
new file mode 100644
index 000000000..beb42c631
--- /dev/null
+++ b/debian/rules.d/tools/objtool/objtool.c
@@ -0,0 +1,21 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+int main(int argc, char **argv)
+{
+ const char *arch;
+ char prog[1024];
+
+ arch = getenv("SRCARCH");
+ if (!arch) {
+ fprintf(stderr, "objtool: SRCARCH variable not defined\n");
+ return 2;
+ }
+
+ snprintf(prog, sizeof(prog), "%s.real-%s", argv[0], arch);
+ execv(prog, argv);
+
+ fprintf(stderr, "objtool: Failed to execute %s\n", prog);
+ return 1;
+}