aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/mod
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-02-27 15:25:47 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2013-02-27 15:25:47 -0500
commit0ca7ffb356063c5ece847687da457dfe748612a2 (patch)
treef7858236ba482814c8cacf45447a3f96548a1688 /scripts/mod
parent30acd906b02470e7eb346401de966a33864d9af4 (diff)
parent423a8155facf23719078ff63911c1e85ba40970b (diff)
Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild
Pull kbuild changes from Michal Marek: - Alias generation in modpost is cross-compile safe. - kernel/timeconst.h is now generated using a bc script instead of perl. - scripts/link-vmlinux.sh now works with an alternative $KCONFIG_CONFIG. - destination-y for exported headers is supported in Kbuild files again. - depmod is called with -P $CONFIG_SYMBOL_PREFIX on architectures that need it. - CONFIG_DEBUG_INFO_REDUCED disables var-tracking - scripts/setlocalversion works with too much translated locales ;) * 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild: kbuild: Fix reading of .config in link-vmlinux.sh kbuild: Unset language specific variables in setlocalversion script Kbuild: Disable var tracking with CONFIG_DEBUG_INFO_REDUCED depmod: pass -P $CONFIG_SYMBOL_PREFIX kbuild: Fix destination-y for installed headers scripts/link-vmlinux.sh: source variables from KCONFIG_CONFIG kernel: Replace timeconst.pl with a bc script mod/file2alias: make modalias generation safe for cross compiling
Diffstat (limited to 'scripts/mod')
-rw-r--r--scripts/mod/.gitignore1
-rw-r--r--scripts/mod/Makefile35
-rw-r--r--scripts/mod/devicetable-offsets.c178
-rw-r--r--scripts/mod/file2alias.c674
-rw-r--r--scripts/mod/modpost.c5
5 files changed, 581 insertions, 312 deletions
diff --git a/scripts/mod/.gitignore b/scripts/mod/.gitignore
index e9b7abe7b95b..33bae0df4de5 100644
--- a/scripts/mod/.gitignore
+++ b/scripts/mod/.gitignore
@@ -1,4 +1,5 @@
1elfconfig.h 1elfconfig.h
2mk_elfconfig 2mk_elfconfig
3modpost 3modpost
4devicetable-offsets.h
4 5
diff --git a/scripts/mod/Makefile b/scripts/mod/Makefile
index ff954f8168c1..9415b5663364 100644
--- a/scripts/mod/Makefile
+++ b/scripts/mod/Makefile
@@ -3,9 +3,44 @@ always := $(hostprogs-y) empty.o
3 3
4modpost-objs := modpost.o file2alias.o sumversion.o 4modpost-objs := modpost.o file2alias.o sumversion.o
5 5
6devicetable-offsets-file := devicetable-offsets.h
7
8define sed-y
9 "/^->/{s:->#\(.*\):/* \1 */:; \
10 s:^->\([^ ]*\) [\$$#]*\([-0-9]*\) \(.*\):#define \1 \2 /* \3 */:; \
11 s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \
12 s:->::; p;}"
13endef
14
15quiet_cmd_offsets = GEN $@
16define cmd_offsets
17 (set -e; \
18 echo "#ifndef __DEVICEVTABLE_OFFSETS_H__"; \
19 echo "#define __DEVICEVTABLE_OFFSETS_H__"; \
20 echo "/*"; \
21 echo " * DO NOT MODIFY."; \
22 echo " *"; \
23 echo " * This file was generated by Kbuild"; \
24 echo " *"; \
25 echo " */"; \
26 echo ""; \
27 sed -ne $(sed-y) $<; \
28 echo ""; \
29 echo "#endif" ) > $@
30endef
31
32# We use internal kbuild rules to avoid the "is up to date" message from make
33scripts/mod/devicetable-offsets.s: scripts/mod/devicetable-offsets.c FORCE
34 $(Q)mkdir -p $(dir $@)
35 $(call if_changed_dep,cc_s_c)
36
37$(obj)/$(devicetable-offsets-file): scripts/mod/devicetable-offsets.s
38 $(call cmd,offsets)
39
6# dependencies on generated files need to be listed explicitly 40# dependencies on generated files need to be listed explicitly
7 41
8$(obj)/modpost.o $(obj)/file2alias.o $(obj)/sumversion.o: $(obj)/elfconfig.h 42$(obj)/modpost.o $(obj)/file2alias.o $(obj)/sumversion.o: $(obj)/elfconfig.h
43$(obj)/file2alias.o: $(obj)/$(devicetable-offsets-file)
9 44
10quiet_cmd_elfconfig = MKELF $@ 45quiet_cmd_elfconfig = MKELF $@
11 cmd_elfconfig = $(obj)/mk_elfconfig < $< > $@ 46 cmd_elfconfig = $(obj)/mk_elfconfig < $< > $@
diff --git a/scripts/mod/devicetable-offsets.c b/scripts/mod/devicetable-offsets.c
new file mode 100644
index 000000000000..b45260bfeaa0
--- /dev/null
+++ b/scripts/mod/devicetable-offsets.c
@@ -0,0 +1,178 @@
1#include <linux/kbuild.h>
2#include <linux/mod_devicetable.h>
3
4#define DEVID(devid) DEFINE(SIZE_##devid, sizeof(struct devid))
5#define DEVID_FIELD(devid, field) \
6 DEFINE(OFF_##devid##_##field, offsetof(struct devid, field))
7
8int main(void)
9{
10 DEVID(usb_device_id);
11 DEVID_FIELD(usb_device_id, match_flags);
12 DEVID_FIELD(usb_device_id, idVendor);
13 DEVID_FIELD(usb_device_id, idProduct);
14 DEVID_FIELD(usb_device_id, bcdDevice_lo);
15 DEVID_FIELD(usb_device_id, bcdDevice_hi);
16 DEVID_FIELD(usb_device_id, bDeviceClass);
17 DEVID_FIELD(usb_device_id, bDeviceSubClass);
18 DEVID_FIELD(usb_device_id, bDeviceProtocol);
19 DEVID_FIELD(usb_device_id, bInterfaceClass);
20 DEVID_FIELD(usb_device_id, bInterfaceSubClass);
21 DEVID_FIELD(usb_device_id, bInterfaceProtocol);
22 DEVID_FIELD(usb_device_id, bInterfaceNumber);
23
24 DEVID(hid_device_id);
25 DEVID_FIELD(hid_device_id, bus);
26 DEVID_FIELD(hid_device_id, group);
27 DEVID_FIELD(hid_device_id, vendor);
28 DEVID_FIELD(hid_device_id, product);
29
30 DEVID(ieee1394_device_id);
31 DEVID_FIELD(ieee1394_device_id, match_flags);
32 DEVID_FIELD(ieee1394_device_id, vendor_id);
33 DEVID_FIELD(ieee1394_device_id, model_id);
34 DEVID_FIELD(ieee1394_device_id, specifier_id);
35 DEVID_FIELD(ieee1394_device_id, version);
36
37 DEVID(pci_device_id);
38 DEVID_FIELD(pci_device_id, vendor);
39 DEVID_FIELD(pci_device_id, device);
40 DEVID_FIELD(pci_device_id, subvendor);
41 DEVID_FIELD(pci_device_id, subdevice);
42 DEVID_FIELD(pci_device_id, class);
43 DEVID_FIELD(pci_device_id, class_mask);
44
45 DEVID(ccw_device_id);
46 DEVID_FIELD(ccw_device_id, match_flags);
47 DEVID_FIELD(ccw_device_id, cu_type);
48 DEVID_FIELD(ccw_device_id, cu_model);
49 DEVID_FIELD(ccw_device_id, dev_type);
50 DEVID_FIELD(ccw_device_id, dev_model);
51
52 DEVID(ap_device_id);
53 DEVID_FIELD(ap_device_id, dev_type);
54
55 DEVID(css_device_id);
56 DEVID_FIELD(css_device_id, type);
57
58 DEVID(serio_device_id);
59 DEVID_FIELD(serio_device_id, type);
60 DEVID_FIELD(serio_device_id, proto);
61 DEVID_FIELD(serio_device_id, id);
62 DEVID_FIELD(serio_device_id, extra);
63
64 DEVID(acpi_device_id);
65 DEVID_FIELD(acpi_device_id, id);
66
67 DEVID(pnp_device_id);
68 DEVID_FIELD(pnp_device_id, id);
69
70 DEVID(pnp_card_device_id);
71 DEVID_FIELD(pnp_card_device_id, devs);
72
73 DEVID(pcmcia_device_id);
74 DEVID_FIELD(pcmcia_device_id, match_flags);
75 DEVID_FIELD(pcmcia_device_id, manf_id);
76 DEVID_FIELD(pcmcia_device_id, card_id);
77 DEVID_FIELD(pcmcia_device_id, func_id);
78 DEVID_FIELD(pcmcia_device_id, function);
79 DEVID_FIELD(pcmcia_device_id, device_no);
80 DEVID_FIELD(pcmcia_device_id, prod_id_hash);
81
82 DEVID(of_device_id);
83 DEVID_FIELD(of_device_id, name);
84 DEVID_FIELD(of_device_id, type);
85 DEVID_FIELD(of_device_id, compatible);
86
87 DEVID(vio_device_id);
88 DEVID_FIELD(vio_device_id, type);
89 DEVID_FIELD(vio_device_id, compat);
90
91 DEVID(input_device_id);
92 DEVID_FIELD(input_device_id, flags);
93 DEVID_FIELD(input_device_id, bustype);
94 DEVID_FIELD(input_device_id, vendor);
95 DEVID_FIELD(input_device_id, product);
96 DEVID_FIELD(input_device_id, version);
97 DEVID_FIELD(input_device_id, evbit);
98 DEVID_FIELD(input_device_id, keybit);
99 DEVID_FIELD(input_device_id, relbit);
100 DEVID_FIELD(input_device_id, absbit);
101 DEVID_FIELD(input_device_id, mscbit);
102 DEVID_FIELD(input_device_id, ledbit);
103 DEVID_FIELD(input_device_id, sndbit);
104 DEVID_FIELD(input_device_id, ffbit);
105 DEVID_FIELD(input_device_id, swbit);
106
107 DEVID(eisa_device_id);
108 DEVID_FIELD(eisa_device_id, sig);
109
110 DEVID(parisc_device_id);
111 DEVID_FIELD(parisc_device_id, hw_type);
112 DEVID_FIELD(parisc_device_id, hversion);
113 DEVID_FIELD(parisc_device_id, hversion_rev);
114 DEVID_FIELD(parisc_device_id, sversion);
115
116 DEVID(sdio_device_id);
117 DEVID_FIELD(sdio_device_id, class);
118 DEVID_FIELD(sdio_device_id, vendor);
119 DEVID_FIELD(sdio_device_id, device);
120
121 DEVID(ssb_device_id);
122 DEVID_FIELD(ssb_device_id, vendor);