From 8933b918cd6bce2db5a6a5a51513b62672f13069 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Sat, 26 Jan 2013 16:26:13 +0000 Subject: kernel: use -ffunction-sections, -fdata-sections and --gc-sections on mips in combination with kernel symbol export stripping this significantly reduces the kernel image size SVN-Revision: 35320 --- .../generic/patches-3.7/220-gc_sections.patch | 372 +++++++++++++++++++++ .../generic/patches-3.7/220-module_exports.patch | 91 ----- .../generic/patches-3.7/221-module_exports.patch | 88 +++++ .../patches-3.7/230-openwrt_lzma_options.patch | 2 +- .../patches-3.7/302-mips_no_branch_likely.patch | 2 +- .../patches-3.7/305-mips_module_reloc.patch | 4 +- .../306-mips_mem_functions_performance.patch | 2 +- .../patches-3.7/340-module_alloc_size_check.patch | 2 +- ...4-yaffs-Mods-for-Linux-3.0-and-fix-a-typo.patch | 2 +- ...12-yaffs-3.5-convert-to-use-kuid_t-kgid_t.patch | 10 +- .../generic/patches-3.7/531-debloat_lzma.patch | 6 +- .../patches-3.7/600-netfilter_layer7_2.22.patch | 2 +- ...610-netfilter_match_bypass_default_checks.patch | 8 +- .../patches-3.7/653-disable_netlink_trim.patch | 2 +- .../generic/patches-3.7/750-hostap_txpower.patch | 2 +- .../patches-3.7/901-debloat_sock_diag.patch | 2 +- .../generic/patches-3.7/941-ocf_20120127.patch | 2 +- ...2-mpcore_wdt_fix_watchdog_counter_loading.patch | 2 +- 18 files changed, 485 insertions(+), 116 deletions(-) create mode 100644 target/linux/generic/patches-3.7/220-gc_sections.patch delete mode 100644 target/linux/generic/patches-3.7/220-module_exports.patch create mode 100644 target/linux/generic/patches-3.7/221-module_exports.patch (limited to 'target/linux/generic/patches-3.7') diff --git a/target/linux/generic/patches-3.7/220-gc_sections.patch b/target/linux/generic/patches-3.7/220-gc_sections.patch new file mode 100644 index 0000000000..8a52a1eec8 --- /dev/null +++ b/target/linux/generic/patches-3.7/220-gc_sections.patch @@ -0,0 +1,372 @@ +--- a/arch/mips/Makefile ++++ b/arch/mips/Makefile +@@ -89,10 +89,12 @@ all-$(CONFIG_SYS_SUPPORTS_ZBOOT)+= vmlin + # + cflags-y += -G 0 -mno-abicalls -fno-pic -pipe + cflags-y += -msoft-float +-LDFLAGS_vmlinux += -G 0 -static -n -nostdlib ++LDFLAGS_vmlinux += -G 0 -static -n -nostdlib --gc-sections + KBUILD_AFLAGS_MODULE += -mlong-calls + KBUILD_CFLAGS_MODULE += -mlong-calls + ++KBUILD_CFLAGS_KERNEL += -ffunction-sections -fdata-sections ++ + cflags-y += -ffreestanding + + # +--- a/arch/mips/kernel/vmlinux.lds.S ++++ b/arch/mips/kernel/vmlinux.lds.S +@@ -66,7 +66,7 @@ SECTIONS + /* Exception table for data bus errors */ + __dbe_table : { + __start___dbe_table = .; +- *(__dbe_table) ++ KEEP(*(__dbe_table)) + __stop___dbe_table = .; + } + +@@ -111,7 +111,7 @@ SECTIONS + . = ALIGN(4); + .mips.machines.init : AT(ADDR(.mips.machines.init) - LOAD_OFFSET) { + __mips_machines_start = .; +- *(.mips.machines.init) ++ KEEP(*(.mips.machines.init)) + __mips_machines_end = .; + } + +--- a/include/asm-generic/vmlinux.lds.h ++++ b/include/asm-generic/vmlinux.lds.h +@@ -101,7 +101,7 @@ + #ifdef CONFIG_FTRACE_MCOUNT_RECORD + #define MCOUNT_REC() . = ALIGN(8); \ + VMLINUX_SYMBOL(__start_mcount_loc) = .; \ +- *(__mcount_loc) \ ++ KEEP(*(__mcount_loc)) \ + VMLINUX_SYMBOL(__stop_mcount_loc) = .; + #else + #define MCOUNT_REC() +@@ -109,7 +109,7 @@ + + #ifdef CONFIG_TRACE_BRANCH_PROFILING + #define LIKELY_PROFILE() VMLINUX_SYMBOL(__start_annotated_branch_profile) = .; \ +- *(_ftrace_annotated_branch) \ ++ KEEP(*(_ftrace_annotated_branch)) \ + VMLINUX_SYMBOL(__stop_annotated_branch_profile) = .; + #else + #define LIKELY_PROFILE() +@@ -117,7 +117,7 @@ + + #ifdef CONFIG_PROFILE_ALL_BRANCHES + #define BRANCH_PROFILE() VMLINUX_SYMBOL(__start_branch_profile) = .; \ +- *(_ftrace_branch) \ ++ KEEP(*(_ftrace_branch)) \ + VMLINUX_SYMBOL(__stop_branch_profile) = .; + #else + #define BRANCH_PROFILE() +@@ -126,7 +126,7 @@ + #ifdef CONFIG_EVENT_TRACING + #define FTRACE_EVENTS() . = ALIGN(8); \ + VMLINUX_SYMBOL(__start_ftrace_events) = .; \ +- *(_ftrace_events) \ ++ KEEP(*(_ftrace_events)) \ + VMLINUX_SYMBOL(__stop_ftrace_events) = .; + #else + #define FTRACE_EVENTS() +@@ -134,7 +134,7 @@ + + #ifdef CONFIG_TRACING + #define TRACE_PRINTKS() VMLINUX_SYMBOL(__start___trace_bprintk_fmt) = .; \ +- *(__trace_printk_fmt) /* Trace_printk fmt' pointer */ \ ++ KEEP(*(__trace_printk_fmt)) /* Trace_printk fmt' pointer */ \ + VMLINUX_SYMBOL(__stop___trace_bprintk_fmt) = .; + #else + #define TRACE_PRINTKS() +@@ -143,7 +143,7 @@ + #ifdef CONFIG_FTRACE_SYSCALLS + #define TRACE_SYSCALLS() . = ALIGN(8); \ + VMLINUX_SYMBOL(__start_syscalls_metadata) = .; \ +- *(__syscalls_metadata) \ ++ KEEP(*(__syscalls_metadata)) \ + VMLINUX_SYMBOL(__stop_syscalls_metadata) = .; + #else + #define TRACE_SYSCALLS() +@@ -153,7 +153,7 @@ + #define KERNEL_DTB() \ + STRUCT_ALIGN(); \ + VMLINUX_SYMBOL(__dtb_start) = .; \ +- *(.dtb.init.rodata) \ ++ KEEP(*(.dtb.init.rodata)) \ + VMLINUX_SYMBOL(__dtb_end) = .; + + /* .data section */ +@@ -173,15 +173,16 @@ + /* implement dynamic printk debug */ \ + . = ALIGN(8); \ + VMLINUX_SYMBOL(__start___jump_table) = .; \ +- *(__jump_table) \ ++ KEEP(*(__jump_table)) \ + VMLINUX_SYMBOL(__stop___jump_table) = .; \ + . = ALIGN(8); \ + VMLINUX_SYMBOL(__start___verbose) = .; \ +- *(__verbose) \ ++ KEEP(*(__verbose)) \ + VMLINUX_SYMBOL(__stop___verbose) = .; \ + LIKELY_PROFILE() \ + BRANCH_PROFILE() \ +- TRACE_PRINTKS() ++ TRACE_PRINTKS() \ ++ *(.data.*) + + /* + * Data section helpers +@@ -235,39 +236,39 @@ + /* PCI quirks */ \ + .pci_fixup : AT(ADDR(.pci_fixup) - LOAD_OFFSET) { \ + VMLINUX_SYMBOL(__start_pci_fixups_early) = .; \ +- *(.pci_fixup_early) \ ++ KEEP(*(.pci_fixup_early)) \ + VMLINUX_SYMBOL(__end_pci_fixups_early) = .; \ + VMLINUX_SYMBOL(__start_pci_fixups_header) = .; \ +- *(.pci_fixup_header) \ ++ KEEP(*(.pci_fixup_header)) \ + VMLINUX_SYMBOL(__end_pci_fixups_header) = .; \ + VMLINUX_SYMBOL(__start_pci_fixups_final) = .; \ +- *(.pci_fixup_final) \ ++ KEEP(*(.pci_fixup_final)) \ + VMLINUX_SYMBOL(__end_pci_fixups_final) = .; \ + VMLINUX_SYMBOL(__start_pci_fixups_enable) = .; \ +- *(.pci_fixup_enable) \ ++ KEEP(*(.pci_fixup_enable)) \ + VMLINUX_SYMBOL(__end_pci_fixups_enable) = .; \ + VMLINUX_SYMBOL(__start_pci_fixups_resume) = .; \ +- *(.pci_fixup_resume) \ ++ KEEP(*(.pci_fixup_resume)) \ + VMLINUX_SYMBOL(__end_pci_fixups_resume) = .; \ + VMLINUX_SYMBOL(__start_pci_fixups_resume_early) = .; \ +- *(.pci_fixup_resume_early) \ ++ KEEP(*(.pci_fixup_resume_early)) \ + VMLINUX_SYMBOL(__end_pci_fixups_resume_early) = .; \ + VMLINUX_SYMBOL(__start_pci_fixups_suspend) = .; \ +- *(.pci_fixup_suspend) \ ++ KEEP(*(.pci_fixup_suspend)) \ + VMLINUX_SYMBOL(__end_pci_fixups_suspend) = .; \ + } \ + \ + /* Built-in firmware blobs */ \ + .builtin_fw : AT(ADDR(.builtin_fw) - LOAD_OFFSET) { \ + VMLINUX_SYMBOL(__start_builtin_fw) = .; \ +- *(.builtin_fw) \ ++ KEEP(*(.builtin_fw)) \ + VMLINUX_SYMBOL(__end_builtin_fw) = .; \ + } \ + \ + /* RapidIO route ops */ \ + .rio_ops : AT(ADDR(.rio_ops) - LOAD_OFFSET) { \ + VMLINUX_SYMBOL(__start_rio_switch_ops) = .; \ +- *(.rio_switch_ops) \ ++ KEEP(*(.rio_switch_ops)) \ + VMLINUX_SYMBOL(__end_rio_switch_ops) = .; \ + } \ + \ +@@ -276,49 +277,49 @@ + /* Kernel symbol table: Normal symbols */ \ + __ksymtab : AT(ADDR(__ksymtab) - LOAD_OFFSET) { \ + VMLINUX_SYMBOL(__start___ksymtab) = .; \ +- *(SORT(___ksymtab+*)) \ ++ KEEP(*(SORT(___ksymtab+*))) \ + VMLINUX_SYMBOL(__stop___ksymtab) = .; \ + } \ + \ + /* Kernel symbol table: GPL-only symbols */ \ + __ksymtab_gpl : AT(ADDR(__ksymtab_gpl) - LOAD_OFFSET) { \ + VMLINUX_SYMBOL(__start___ksymtab_gpl) = .; \ +- *(SORT(___ksymtab_gpl+*)) \ ++ KEEP(*(SORT(___ksymtab_gpl+*))) \ + VMLINUX_SYMBOL(__stop___ksymtab_gpl) = .; \ + } \ + \ + /* Kernel symbol table: Normal unused symbols */ \ + __ksymtab_unused : AT(ADDR(__ksymtab_unused) - LOAD_OFFSET) { \ + VMLINUX_SYMBOL(__start___ksymtab_unused) = .; \ +- *(SORT(___ksymtab_unused+*)) \ ++ KEEP(*(SORT(___ksymtab_unused+*))) \ + VMLINUX_SYMBOL(__stop___ksymtab_unused) = .; \ + } \ + \ + /* Kernel symbol table: GPL-only unused symbols */ \ + __ksymtab_unused_gpl : AT(ADDR(__ksymtab_unused_gpl) - LOAD_OFFSET) { \ + VMLINUX_SYMBOL(__start___ksymtab_unused_gpl) = .; \ +- *(SORT(___ksymtab_unused_gpl+*)) \ ++ KEEP(*(SORT(___ksymtab_unused_gpl+*))) \ + VMLINUX_SYMBOL(__stop___ksymtab_unused_gpl) = .; \ + } \ + \ + /* Kernel symbol table: GPL-future-only symbols */ \ + __ksymtab_gpl_future : AT(ADDR(__ksymtab_gpl_future) - LOAD_OFFSET) { \ + VMLINUX_SYMBOL(__start___ksymtab_gpl_future) = .; \ +- *(SORT(___ksymtab_gpl_future+*)) \ ++ KEEP(*(SORT(___ksymtab_gpl_future+*))) \ + VMLINUX_SYMBOL(__stop___ksymtab_gpl_future) = .; \ + } \ + \ + /* Kernel symbol table: Normal symbols */ \ + __kcrctab : AT(ADDR(__kcrctab) - LOAD_OFFSET) { \ + VMLINUX_SYMBOL(__start___kcrctab) = .; \ +- *(SORT(___kcrctab+*)) \ ++ KEEP(*(SORT(___kcrctab+*))) \ + VMLINUX_SYMBOL(__stop___kcrctab) = .; \ + } \ + \ + /* Kernel symbol table: GPL-only symbols */ \ + __kcrctab_gpl : AT(ADDR(__kcrctab_gpl) - LOAD_OFFSET) { \ + VMLINUX_SYMBOL(__start___kcrctab_gpl) = .; \ +- *(SORT(___kcrctab_gpl+*)) \ ++ KEEP(*(SORT(___kcrctab_gpl+*))) \ + VMLINUX_SYMBOL(__stop___kcrctab_gpl) = .; \ + } \ + \ +@@ -332,14 +333,14 @@ + /* Kernel symbol table: GPL-only unused symbols */ \ + __kcrctab_unused_gpl : AT(ADDR(__kcrctab_unused_gpl) - LOAD_OFFSET) { \ + VMLINUX_SYMBOL(__start___kcrctab_unused_gpl) = .; \ +- *(SORT(___kcrctab_unused_gpl+*)) \ ++ KEEP(*(SORT(___kcrctab_unused_gpl+*))) \ + VMLINUX_SYMBOL(__stop___kcrctab_unused_gpl) = .; \ + } \ + \ + /* Kernel symbol table: GPL-future-only symbols */ \ + __kcrctab_gpl_future : AT(ADDR(__kcrctab_gpl_future) - LOAD_OFFSET) { \ + VMLINUX_SYMBOL(__start___kcrctab_gpl_future) = .; \ +- *(SORT(___kcrctab_gpl_future+*)) \ ++ KEEP(*(SORT(___kcrctab_gpl_future+*))) \ + VMLINUX_SYMBOL(__stop___kcrctab_gpl_future) = .; \ + } \ + \ +@@ -362,14 +363,14 @@ + /* Built-in module parameters. */ \ + __param : AT(ADDR(__param) - LOAD_OFFSET) { \ + VMLINUX_SYMBOL(__start___param) = .; \ +- *(__param) \ ++ KEEP(*(__param)) \ + VMLINUX_SYMBOL(__stop___param) = .; \ + } \ + \ + /* Built-in module versions. */ \ + __modver : AT(ADDR(__modver) - LOAD_OFFSET) { \ + VMLINUX_SYMBOL(__start___modver) = .; \ +- *(__modver) \ ++ KEEP(*(__modver)) \ + VMLINUX_SYMBOL(__stop___modver) = .; \ + . = ALIGN((align)); \ + VMLINUX_SYMBOL(__end_rodata) = .; \ +@@ -429,7 +430,7 @@ + #define ENTRY_TEXT \ + ALIGN_FUNCTION(); \ + VMLINUX_SYMBOL(__entry_text_start) = .; \ +- *(.entry.text) \ ++ KEEP(*(.entry.text)) \ + VMLINUX_SYMBOL(__entry_text_end) = .; + + #ifdef CONFIG_FUNCTION_GRAPH_TRACER +@@ -457,7 +458,7 @@ + . = ALIGN(align); \ + __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) { \ + VMLINUX_SYMBOL(__start___ex_table) = .; \ +- *(__ex_table) \ ++ KEEP(*(__ex_table)) \ + VMLINUX_SYMBOL(__stop___ex_table) = .; \ + } + +@@ -473,7 +474,7 @@ + #ifdef CONFIG_CONSTRUCTORS + #define KERNEL_CTORS() . = ALIGN(8); \ + VMLINUX_SYMBOL(__ctors_start) = .; \ +- *(.ctors) \ ++ KEEP(*(.ctors)) \ + VMLINUX_SYMBOL(__ctors_end) = .; + #else + #define KERNEL_CTORS() +@@ -526,7 +527,7 @@ + #define SBSS(sbss_align) \ + . = ALIGN(sbss_align); \ + .sbss : AT(ADDR(.sbss) - LOAD_OFFSET) { \ +- *(.sbss) \ ++ *(.sbss .sbss.*) \ + *(.scommon) \ + } + +@@ -544,7 +545,7 @@ + BSS_FIRST_SECTIONS \ + *(.bss..page_aligned) \ + *(.dynbss) \ +- *(.bss) \ ++ *(.bss .bss.*) \ + *(COMMON) \ + } + +@@ -593,7 +594,7 @@ + . = ALIGN(8); \ + __bug_table : AT(ADDR(__bug_table) - LOAD_OFFSET) { \ + VMLINUX_SYMBOL(__start___bug_table) = .; \ +- *(__bug_table) \ ++ KEEP(*(__bug_table)) \ + VMLINUX_SYMBOL(__stop___bug_table) = .; \ + } + #else +@@ -605,7 +606,7 @@ + . = ALIGN(4); \ + .tracedata : AT(ADDR(.tracedata) - LOAD_OFFSET) { \ + VMLINUX_SYMBOL(__tracedata_start) = .; \ +- *(.tracedata) \ ++ KEEP(*(.tracedata)) \ + VMLINUX_SYMBOL(__tracedata_end) = .; \ + } + #else +@@ -622,17 +623,17 @@ + #define INIT_SETUP(initsetup_align) \ + . = ALIGN(initsetup_align); \ + VMLINUX_SYMBOL(__setup_start) = .; \ +- *(.init.setup) \ ++ KEEP(*(.init.setup)) \ + VMLINUX_SYMBOL(__setup_end) = .; + + #define INIT_CALLS_LEVEL(level) \ + VMLINUX_SYMBOL(__initcall##level##_start) = .; \ +- *(.initcall##level##.init) \ +- *(.initcall##level##s.init) \ ++ KEEP(*(.initcall##level##.init)) \ ++ KEEP(*(.initcall##level##s.init)) \ + + #define INIT_CALLS \ + VMLINUX_SYMBOL(__initcall_start) = .; \ +- *(.initcallearly.init) \ ++ KEEP(*(.initcallearly.init)) \ + INIT_CALLS_LEVEL(0) \ + INIT_CALLS_LEVEL(1) \ + INIT_CALLS_LEVEL(2) \ +@@ -646,21 +647,21 @@ + + #define CON_INITCALL \ + VMLINUX_SYMBOL(__con_initcall_start) = .; \ +- *(.con_initcall.init) \ ++ KEEP(*(.con_initcall.init)) \ + VMLINUX_SYMBOL(__con_initcall_end) = .; + + #define SECURITY_INITCALL \ + VMLINUX_SYMBOL(__security_initcall_start) = .; \ +- *(.security_initcall.init) \ ++ KEEP(*(.security_initcall.init)) \ + VMLINUX_SYMBOL(__security_initcall_end) = .; + + #ifdef CONFIG_BLK_DEV_INITRD + #define INIT_RAM_FS \ + . = ALIGN(4); \ + VMLINUX_SYMBOL(__initramfs_start) = .; \ +- *(.init.ramfs) \ ++ KEEP(*(.init.ramfs)) \ + . = ALIGN(8); \ +- *(.init.ramfs.info) ++ KEEP(*(.init.ramfs.info)) + #else + #define INIT_RAM_FS + #endif diff --git a/target/linux/generic/patches-3.7/220-module_exports.patch b/target/linux/generic/patches-3.7/220-module_exports.patch deleted file mode 100644 index fc382c16f9..0000000000 --- a/target/linux/generic/patches-3.7/220-module_exports.patch +++ /dev/null @@ -1,91 +0,0 @@ ---- a/include/asm-generic/vmlinux.lds.h -+++ b/include/asm-generic/vmlinux.lds.h -@@ -52,6 +52,18 @@ - #define LOAD_OFFSET 0 - #endif - -+#ifndef SYMTAB_KEEP_STR -+#define SYMTAB_KEEP *(SORT(___ksymtab+*)) -+#define SYMTAB_KEEP_GPL *(SORT(___ksymtab_gpl+*)) -+#define SYMTAB_KEEP_STR *(__ksymtab_strings+*) -+#endif -+ -+#ifndef SYMTAB_DISCARD -+#define SYMTAB_DISCARD -+#define SYMTAB_DISCARD_GPL -+#define SYMTAB_DISCARD_STR -+#endif -+ - #ifndef SYMBOL_PREFIX - #define VMLINUX_SYMBOL(sym) sym - #else -@@ -276,14 +288,14 @@ - /* Kernel symbol table: Normal symbols */ \ - __ksymtab : AT(ADDR(__ksymtab) - LOAD_OFFSET) { \ - VMLINUX_SYMBOL(__start___ksymtab) = .; \ -- *(SORT(___ksymtab+*)) \ -+ SYMTAB_KEEP \ - VMLINUX_SYMBOL(__stop___ksymtab) = .; \ - } \ - \ - /* Kernel symbol table: GPL-only symbols */ \ - __ksymtab_gpl : AT(ADDR(__ksymtab_gpl) - LOAD_OFFSET) { \ - VMLINUX_SYMBOL(__start___ksymtab_gpl) = .; \ -- *(SORT(___ksymtab_gpl+*)) \ -+ SYMTAB_KEEP_GPL \ - VMLINUX_SYMBOL(__stop___ksymtab_gpl) = .; \ - } \ - \ -@@ -345,7 +357,7 @@ - \ - /* Kernel symbol table: strings */ \ - __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) { \ -- *(__ksymtab_strings) \ -+ SYMTAB_KEEP_STR \ - } \ - \ - /* __*init sections */ \ -@@ -679,6 +691,9 @@ - EXIT_TEXT \ - EXIT_DATA \ - EXIT_CALL \ -+ SYMTAB_DISCARD \ -+ SYMTAB_DISCARD_GPL \ -+ SYMTAB_DISCARD_STR \ - *(.discard) \ - *(.discard.*) \ - } ---- a/include/linux/export.h -+++ b/include/linux/export.h -@@ -45,12 +45,19 @@ extern struct module __this_module; - #define __CRC_SYMBOL(sym, sec) - #endif - -+#ifdef MODULE -+#define __EXPORT_SUFFIX(sym) -+#else -+#define __EXPORT_SUFFIX(sym) "+" #sym -+#endif -+ - /* For every exported symbol, place a struct in the __ksymtab section */ - #define __EXPORT_SYMBOL(sym, sec) \ - extern typeof(sym) sym; \ - __CRC_SYMBOL(sym, sec) \ - static const char __kstrtab_##sym[] \ -- __attribute__((section("__ksymtab_strings"), aligned(1))) \ -+ __attribute__((section("__ksymtab_strings" \ -+ __EXPORT_SUFFIX(sym)), aligned(1))) \ - = MODULE_SYMBOL_PREFIX #sym; \ - static const struct kernel_symbol __ksymtab_##sym \ - __used \ ---- a/scripts/Makefile.build -+++ b/scripts/Makefile.build -@@ -348,7 +348,7 @@ targets += $(extra-y) $(MAKECMDGOALS) $( - # Linker scripts preprocessor (.lds.S -> .lds) - # --------------------------------------------------------------------------- - quiet_cmd_cpp_lds_S = LDS $@ -- cmd_cpp_lds_S = $(CPP) $(cpp_flags) -P -C -U$(ARCH) \ -+ cmd_cpp_lds_S = $(CPP) $(EXTRA_LDSFLAGS) $(cpp_flags) -P -C -U$(ARCH) \ - -D__ASSEMBLY__ -DLINKER_SCRIPT -o $@ $< - - $(obj)/%.lds: $(src)/%.lds.S FORCE diff --git a/target/linux/generic/patches-3.7/221-module_exports.patch b/target/linux/generic/patches-3.7/221-module_exports.patch new file mode 100644 index 0000000000..da08de626a --- /dev/null +++ b/target/linux/generic/patches-3.7/221-module_exports.patch @@ -0,0 +1,88 @@ +--- a/include/asm-generic/vmlinux.lds.h ++++ b/include/asm-generic/vmlinux.lds.h +@@ -52,6 +52,16 @@ + #define LOAD_OFFSET 0 + #endif + ++#ifndef SYMTAB_KEEP ++#define SYMTAB_KEEP KEEP(*(SORT(___ksymtab+*))) ++#define SYMTAB_KEEP_GPL KEEP(*(SORT(___ksymtab_gpl+*))) ++#endif ++ ++#ifndef SYMTAB_DISCARD ++#define SYMTAB_DISCARD ++#define SYMTAB_DISCARD_GPL ++#endif ++ + #ifndef SYMBOL_PREFIX + #define VMLINUX_SYMBOL(sym) sym + #else +@@ -277,14 +287,14 @@ + /* Kernel symbol table: Normal symbols */ \ + __ksymtab : AT(ADDR(__ksymtab) - LOAD_OFFSET) { \ + VMLINUX_SYMBOL(__start___ksymtab) = .; \ +- KEEP(*(SORT(___ksymtab+*))) \ ++ SYMTAB_KEEP \ + VMLINUX_SYMBOL(__stop___ksymtab) = .; \ + } \ + \ + /* Kernel symbol table: GPL-only symbols */ \ + __ksymtab_gpl : AT(ADDR(__ksymtab_gpl) - LOAD_OFFSET) { \ + VMLINUX_SYMBOL(__start___ksymtab_gpl) = .; \ +- KEEP(*(SORT(___ksymtab_gpl+*))) \ ++ SYMTAB_KEEP_GPL \ + VMLINUX_SYMBOL(__stop___ksymtab_gpl) = .; \ + } \ + \ +@@ -346,7 +356,7 @@ + \ + /* Kernel symbol table: strings */ \ + __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) { \ +- *(__ksymtab_strings) \ ++ *(__ksymtab_strings+*) \ + } \ + \ + /* __*init sections */ \ +@@ -680,6 +690,8 @@ + EXIT_TEXT \ + EXIT_DATA \ + EXIT_CALL \ ++ SYMTAB_DISCARD \ ++ SYMTAB_DISCARD_GPL \ + *(.discard) \ + *(.discard.*) \ + } +--- a/scripts/Makefile.build ++++ b/scripts/Makefile.build +@@ -348,7 +348,7 @@ targets += $(extra-y) $(MAKECMDGOALS) $( + # Linker scripts preprocessor (.lds.S -> .lds) + # --------------------------------------------------------------------------- + quiet_cmd_cpp_lds_S = LDS $@ +- cmd_cpp_lds_S = $(CPP) $(cpp_flags) -P -C -U$(ARCH) \ ++ cmd_cpp_lds_S = $(CPP) $(EXTRA_LDSFLAGS) $(cpp_flags) -P -C -U$(ARCH) \ + -D__ASSEMBLY__ -DLINKER_SCRIPT -o $@ $< + + $(obj)/%.lds: $(src)/%.lds.S FORCE +--- a/include/linux/export.h ++++ b/include/linux/export.h +@@ -45,12 +45,19 @@ extern struct module __this_module; + #define __CRC_SYMBOL(sym, sec) + #endif + ++#ifdef MODULE ++#define __EXPORT_SUFFIX(sym) ++#else ++#define __EXPORT_SUFFIX(sym) "+" #sym ++#endif ++ + /* For every exported symbol, place a struct in the __ksymtab section */ + #define __EXPORT_SYMBOL(sym, sec) \ + extern typeof(sym) sym; \ + __CRC_SYMBOL(sym, sec) \ + static const char __kstrtab_##sym[] \ +- __attribute__((section("__ksymtab_strings"), aligned(1))) \ ++ __attribute__((section("__ksymtab_strings" \ ++ __EXPORT_SUFFIX(sym)), aligned(1))) \ + = MODULE_SYMBOL_PREFIX #sym; \ + static const struct kernel_symbol __ksymtab_##sym \ + __used \ diff --git a/target/linux/generic/patches-3.7/230-openwrt_lzma_options.patch b/target/linux/generic/patches-3.7/230-openwrt_lzma_options.patch index b09c24d4c3..972b876dfe 100644 --- a/target/linux/generic/patches-3.7/230-openwrt_lzma_options.patch +++ b/target/linux/generic/patches-3.7/230-openwrt_lzma_options.patch @@ -1,6 +1,6 @@ --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib -@@ -296,7 +296,7 @@ cmd_bzip2 = (cat $(filter-out FORCE,$^) +@@ -296,7 +296,7 @@ cmd_bzip2 = (cat $(filter-out FORCE,$^) quiet_cmd_lzma = LZMA $@ cmd_lzma = (cat $(filter-out FORCE,$^) | \ diff --git a/target/linux/generic/patches-3.7/302-mips_no_branch_likely.patch b/target/linux/generic/patches-3.7/302-mips_no_branch_likely.patch index 1da9540050..44c6b04fcf 100644 --- a/target/linux/generic/patches-3.7/302-mips_no_branch_likely.patch +++ b/target/linux/generic/patches-3.7/302-mips_no_branch_likely.patch @@ -7,5 +7,5 @@ -cflags-y += -G 0 -mno-abicalls -fno-pic -pipe +cflags-y += -G 0 -mno-abicalls -fno-pic -pipe -mno-branch-likely cflags-y += -msoft-float - LDFLAGS_vmlinux += -G 0 -static -n -nostdlib + LDFLAGS_vmlinux += -G 0 -static -n -nostdlib --gc-sections KBUILD_AFLAGS_MODULE += -mlong-calls diff --git a/target/linux/generic/patches-3.7/305-mips_module_reloc.patch b/target/linux/generic/patches-3.7/305-mips_module_reloc.patch index 3c51d14cf7..f0f513741d 100644 --- a/target/linux/generic/patches-3.7/305-mips_module_reloc.patch +++ b/target/linux/generic/patches-3.7/305-mips_module_reloc.patch @@ -3,7 +3,7 @@ @@ -90,8 +90,13 @@ all-$(CONFIG_SYS_SUPPORTS_ZBOOT)+= vmlin cflags-y += -G 0 -mno-abicalls -fno-pic -pipe -mno-branch-likely cflags-y += -msoft-float - LDFLAGS_vmlinux += -G 0 -static -n -nostdlib + LDFLAGS_vmlinux += -G 0 -static -n -nostdlib --gc-sections +ifdef CONFIG_64BIT KBUILD_AFLAGS_MODULE += -mlong-calls KBUILD_CFLAGS_MODULE += -mlong-calls @@ -12,7 +12,7 @@ +KBUILD_CFLAGS_MODULE += -mno-long-calls +endif - cflags-y += -ffreestanding + KBUILD_CFLAGS_KERNEL += -ffunction-sections -fdata-sections --- a/arch/mips/include/asm/module.h +++ b/arch/mips/include/asm/module.h diff --git a/target/linux/generic/patches-3.7/306-mips_mem_functions_performance.patch b/target/linux/generic/patches-3.7/306-mips_mem_functions_performance.patch index 9818677425..e6056fa5c4 100644 --- a/target/linux/generic/patches-3.7/306-mips_mem_functions_performance.patch +++ b/target/linux/generic/patches-3.7/306-mips_mem_functions_performance.patch @@ -1,6 +1,6 @@ --- a/arch/mips/include/asm/string.h +++ b/arch/mips/include/asm/string.h -@@ -133,11 +133,44 @@ strncmp(__const__ char *__cs, __const__ +@@ -133,11 +133,44 @@ strncmp(__const__ char *__cs, __const__ #define __HAVE_ARCH_MEMSET extern void *memset(void *__s, int __c, size_t __count); diff --git a/target/linux/generic/patches-3.7/340-module_alloc_size_check.patch b/target/linux/generic/patches-3.7/340-module_alloc_size_check.patch index 2459b6183d..e48c0d2c10 100644 --- a/target/linux/generic/patches-3.7/340-module_alloc_size_check.patch +++ b/target/linux/generic/patches-3.7/340-module_alloc_size_check.patch @@ -1,6 +1,6 @@ --- a/kernel/module.c +++ b/kernel/module.c -@@ -2378,12 +2378,15 @@ static void dynamic_debug_remove(struct +@@ -2378,12 +2378,15 @@ static void dynamic_debug_remove(struct void * __weak module_alloc(unsigned long size) { diff --git a/target/linux/generic/patches-3.7/504-yaffs-Mods-for-Linux-3.0-and-fix-a-typo.patch b/target/linux/generic/patches-3.7/504-yaffs-Mods-for-Linux-3.0-and-fix-a-typo.patch index 1b814e97fd..4767e769b6 100644 --- a/target/linux/generic/patches-3.7/504-yaffs-Mods-for-Linux-3.0-and-fix-a-typo.patch +++ b/target/linux/generic/patches-3.7/504-yaffs-Mods-for-Linux-3.0-and-fix-a-typo.patch @@ -26,7 +26,7 @@ Signed-off-by: Charles Manning #include #include #include -@@ -236,7 +238,9 @@ static int yaffs_file_flush(struct file +@@ -236,7 +238,9 @@ static int yaffs_file_flush(struct file static int yaffs_file_flush(struct file *file); #endif diff --git a/target/linux/generic/patches-3.7/512-yaffs-3.5-convert-to-use-kuid_t-kgid_t.patch b/target/linux/generic/patches-3.7/512-yaffs-3.5-convert-to-use-kuid_t-kgid_t.patch index 1ca189d2ee..7787d500a9 100644 --- a/target/linux/generic/patches-3.7/512-yaffs-3.5-convert-to-use-kuid_t-kgid_t.patch +++ b/target/linux/generic/patches-3.7/512-yaffs-3.5-convert-to-use-kuid_t-kgid_t.patch @@ -216,7 +216,7 @@ result = yaffs_rd_chunk_tags_nand(dev,nand_chunk,buffer,&tempTags); if(memcmp(buffer,data,dev->data_bytes_per_chunk) || tempTags.obj_id != tags->obj_id || -@@ -424,7 +424,7 @@ static int yaffs_write_new_chunk(struct +@@ -424,7 +424,7 @@ static int yaffs_write_new_chunk(struct * lot of checks that are most likely not needed. * * Mods to the above @@ -225,7 +225,7 @@ * rest of the block. */ -@@ -486,7 +486,7 @@ static int yaffs_write_new_chunk(struct +@@ -486,7 +486,7 @@ static int yaffs_write_new_chunk(struct } @@ -279,7 +279,7 @@ /* Free chunks already includes softdeleted chunks. * How ever this chunk is going to soon be really deleted * which will increment free chunks. -@@ -2752,7 +2752,7 @@ int yaffs_put_chunk_in_file(yaffs_obj_t +@@ -2752,7 +2752,7 @@ int yaffs_put_chunk_in_file(yaffs_obj_t NULL); if (!tn) return YAFFS_FAIL; @@ -455,7 +455,7 @@ #ifdef CONFIG_YAFFS_SHORT_NAMES_IN_RAM else if (obj->short_name[0]) { yaffs_strcpy(name, obj->short_name); -@@ -4861,9 +4861,9 @@ int yaffs_set_attribs(yaffs_obj_t *obj, +@@ -4861,9 +4861,9 @@ int yaffs_set_attribs(yaffs_obj_t *obj, if (valid & ATTR_MODE) obj->yst_mode = attr->ia_mode; if (valid & ATTR_UID) @@ -467,7 +467,7 @@ if (valid & ATTR_ATIME) obj->yst_atime = Y_TIME_CONVERT(attr->ia_atime); -@@ -4886,9 +4886,9 @@ int yaffs_get_attribs(yaffs_obj_t *obj, +@@ -4886,9 +4886,9 @@ int yaffs_get_attribs(yaffs_obj_t *obj, attr->ia_mode = obj->yst_mode; valid |= ATTR_MODE; diff --git a/target/linux/generic/patches-3.7/531-debloat_lzma.patch b/target/linux/generic/patches-3.7/531-debloat_lzma.patch index 1e41661ebb..18e4a51ee3 100644 --- a/target/linux/generic/patches-3.7/531-debloat_lzma.patch +++ b/target/linux/generic/patches-3.7/531-debloat_lzma.patch @@ -124,7 +124,7 @@ /* LzmaDecode --- a/lib/lzma/LzmaDec.c +++ b/lib/lzma/LzmaDec.c -@@ -682,7 +682,7 @@ static void LzmaDec_InitRc(CLzmaDec *p, +@@ -682,7 +682,7 @@ static void LzmaDec_InitRc(CLzmaDec *p, p->needFlush = 0; } @@ -194,7 +194,7 @@ { CLzmaProps propNew; RINOK(LzmaProps_Decode(&propNew, props, propsSize)); -@@ -944,7 +944,7 @@ SRes LzmaDec_AllocateProbs(CLzmaDec *p, +@@ -944,7 +944,7 @@ SRes LzmaDec_AllocateProbs(CLzmaDec *p, return SZ_OK; } @@ -375,7 +375,7 @@ void MatchFinder_Construct(CMatchFinder *p); /* Conditions: -@@ -70,12 +65,6 @@ int MatchFinder_Create(CMatchFinder *p, +@@ -70,12 +65,6 @@ int MatchFinder_Create(CMatchFinder *p, UInt32 keepAddBufferBefore, UInt32 matchMaxLen, UInt32 keepAddBufferAfter, ISzAlloc *alloc); void MatchFinder_Free(CMatchFinder *p, ISzAlloc *alloc); diff --git a/target/linux/generic/patches-3.7/600-netfilter_layer7_2.22.patch b/target/linux/generic/patches-3.7/600-netfilter_layer7_2.22.patch index 0c8c5e890b..dcec3791b2 100644 --- a/target/linux/generic/patches-3.7/600-netfilter_layer7_2.22.patch +++ b/target/linux/generic/patches-3.7/600-netfilter_layer7_2.22.patch @@ -30,7 +30,7 @@ depends on NETFILTER_ADVANCED --- a/net/netfilter/Makefile +++ b/net/netfilter/Makefile -@@ -131,6 +131,7 @@ obj-$(CONFIG_NETFILTER_XT_MATCH_RECENT) +@@ -131,6 +131,7 @@ obj-$(CONFIG_NETFILTER_XT_MATCH_RECENT) obj-$(CONFIG_NETFILTER_XT_MATCH_SCTP) += xt_sctp.o obj-$(CONFIG_NETFILTER_XT_MATCH_SOCKET) += xt_socket.o obj-$(CONFIG_NETFILTER_XT_MATCH_STATE) += xt_state.o diff --git a/target/linux/generic/patches-3.7/610-netfilter_match_bypass_default_checks.patch b/target/linux/generic/patches-3.7/610-netfilter_match_bypass_default_checks.patch index 0081da01df..ded6f5f153 100644 --- a/target/linux/generic/patches-3.7/610-netfilter_match_bypass_default_checks.patch +++ b/target/linux/generic/patches-3.7/610-netfilter_match_bypass_default_checks.patch @@ -76,11 +76,10 @@ counters = alloc_counters(table); if (IS_ERR(counters)) -@@ -960,6 +989,14 @@ copy_entries_to_user(unsigned int total_ - ret = -EFAULT; +@@ -961,6 +990,14 @@ copy_entries_to_user(unsigned int total_ goto free_counters; } -+ + + flags = e->ip.flags & IPT_F_MASK; + if (copy_to_user(userptr + off + + offsetof(struct ipt_entry, ip.flags), @@ -88,6 +87,7 @@ + ret = -EFAULT; + goto free_counters; + } - ++ for (i = sizeof(struct ipt_entry); i < e->target_offset; + i += m->u.match_size) { diff --git a/target/linux/generic/patches-3.7/653-disable_netlink_trim.patch b/target/linux/generic/patches-3.7/653-disable_netlink_trim.patch index 654d92e316..2a0a51a55f 100644 --- a/target/linux/generic/patches-3.7/653-disable_netlink_trim.patch +++ b/target/linux/generic/patches-3.7/653-disable_netlink_trim.patch @@ -1,6 +1,6 @@ --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c -@@ -895,25 +895,7 @@ void netlink_detachskb(struct sock *sk, +@@ -895,25 +895,7 @@ void netlink_detachskb(struct sock *sk, static struct sk_buff *netlink_trim(struct sk_buff *skb, gfp_t allocation) { diff --git a/target/linux/generic/patches-3.7/750-hostap_txpower.patch b/target/linux/generic/patches-3.7/750-hostap_txpower.patch index 814406df11..a111c8127b 100644 --- a/target/linux/generic/patches-3.7/750-hostap_txpower.patch +++ b/target/linux/generic/patches-3.7/750-hostap_txpower.patch @@ -1,6 +1,6 @@ --- a/drivers/net/wireless/hostap/hostap_ap.c +++ b/drivers/net/wireless/hostap/hostap_ap.c -@@ -2340,13 +2340,13 @@ int prism2_ap_get_sta_qual(local_info_t +@@ -2340,13 +2340,13 @@ int prism2_ap_get_sta_qual(local_info_t addr[count].sa_family = ARPHRD_ETHER; memcpy(addr[count].sa_data, sta->addr, ETH_ALEN); if (sta->last_rx_silence == 0) diff --git a/target/linux/generic/patches-3.7/901-debloat_sock_diag.patch b/target/linux/generic/patches-3.7/901-debloat_sock_diag.patch index 4065f8aeae..119760648d 100644 --- a/target/linux/generic/patches-3.7/901-debloat_sock_diag.patch +++ b/target/linux/generic/patches-3.7/901-debloat_sock_diag.patch @@ -12,7 +12,7 @@ help --- a/net/core/Makefile +++ b/net/core/Makefile -@@ -8,9 +8,9 @@ obj-y := sock.o request_sock.o skbuff.o +@@ -8,9 +8,9 @@ obj-y := sock.o request_sock.o skbuff.o obj-$(CONFIG_SYSCTL) += sysctl_net_core.o obj-y += dev.o ethtool.o dev_addr_lists.o dst.o netevent.o \ diff --git a/target/linux/generic/patches-3.7/941-ocf_20120127.patch b/target/linux/generic/patches-3.7/941-ocf_20120127.patch index 326471421c..1f3b581b72 100644 --- a/target/linux/generic/patches-3.7/941-ocf_20120127.patch +++ b/target/linux/generic/patches-3.7/941-ocf_20120127.patch @@ -24,7 +24,7 @@ * All of these routines try to estimate how many bits of randomness a * particular randomness source. They do this by keeping track of the * first and second order deltas of the event timings. -@@ -799,6 +809,63 @@ void add_disk_randomness(struct gendisk +@@ -799,6 +809,63 @@ void add_disk_randomness(struct gendisk } #endif diff --git a/target/linux/generic/patches-3.7/992-mpcore_wdt_fix_watchdog_counter_loading.patch b/target/linux/generic/patches-3.7/992-mpcore_wdt_fix_watchdog_counter_loading.patch index 26bb9b8b29..315d9ac101 100644 --- a/target/linux/generic/patches-3.7/992-mpcore_wdt_fix_watchdog_counter_loading.patch +++ b/target/linux/generic/patches-3.7/992-mpcore_wdt_fix_watchdog_counter_loading.patch @@ -55,7 +55,7 @@ Signed-off-by: Vitaly Kuzmichev { .compatible = "arm,cortex-a9-twd-timer", }, --- a/drivers/watchdog/mpcore_wdt.c +++ b/drivers/watchdog/mpcore_wdt.c -@@ -102,9 +102,7 @@ static void mpcore_wdt_keepalive(struct +@@ -102,9 +102,7 @@ static void mpcore_wdt_keepalive(struct spin_lock(&wdt_lock); /* Assume prescale is set to 256 */ -- cgit v1.2.3