diff options
author | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2013-01-26 16:26:13 +0000 |
---|---|---|
committer | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2013-01-26 16:26:13 +0000 |
commit | edf06589cc0ad9474b6c17aa84af90a932eaca13 (patch) | |
tree | 24d7f96936770d3e3ee904982008bfcf174acc7e | |
parent | 0a3970a70de5376f9a7ddef0c0b68acf9eb8caab (diff) |
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
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@35320 3c298f89-4303-0410-b956-a3cf2f4a3e73
52 files changed, 864 insertions, 135 deletions
diff --git a/include/kernel-build.mk b/include/kernel-build.mk index 0b7b54fdd8..095940c570 100644 --- a/include/kernel-build.mk +++ b/include/kernel-build.mk @@ -81,15 +81,11 @@ define BuildKernel ( \ echo '#define SYMTAB_KEEP \'; \ cat $(KERNEL_BUILD_DIR)/sym_include.txt | \ - awk '{print "*(___ksymtab+" $$$$1 ") \\" }'; \ + awk '{print "KEEP(*(___ksymtab+" $$$$1 ")) \\" }'; \ echo; \ echo '#define SYMTAB_KEEP_GPL \'; \ cat $(KERNEL_BUILD_DIR)/sym_include.txt | \ - awk '{print "*(___ksymtab_gpl+" $$$$1 ") \\" }'; \ - echo; \ - echo '#define SYMTAB_KEEP_STR \'; \ - cat $(KERNEL_BUILD_DIR)/sym_include.txt | \ - awk '{print "*(__ksymtab_strings." $$$$1 ") \\" }'; \ + awk '{print "KEEP(*(___ksymtab_gpl+" $$$$1 ")) \\" }'; \ echo; \ echo '#define SYMTAB_DISCARD \'; \ cat $(KERNEL_BUILD_DIR)/sym_exclude.txt | \ @@ -99,10 +95,6 @@ define BuildKernel cat $(KERNEL_BUILD_DIR)/sym_exclude.txt | \ awk '{print "*(___ksymtab_gpl+" $$$$1 ") \\" }'; \ echo; \ - echo '#define SYMTAB_DISCARD_STR \'; \ - cat $(KERNEL_BUILD_DIR)/sym_exclude.txt | \ - awk '{print "*(__ksymtab_strings." $$$$1 ") \\" }'; \ - echo; \ ) > $$@ $(STAMP_CONFIGURED): $(STAMP_PREPARED) $(LINUX_KCONFIG_LIST) $(TOPDIR)/.config diff --git a/target/linux/ar71xx/patches-3.7/169-MIPS-ath79-allow-to-specify-bus-number-in-PCI-IRQ-ma.patch b/target/linux/ar71xx/patches-3.7/169-MIPS-ath79-allow-to-specify-bus-number-in-PCI-IRQ-ma.patch index bd95d718b2..89ab5ace69 100644 --- a/target/linux/ar71xx/patches-3.7/169-MIPS-ath79-allow-to-specify-bus-number-in-PCI-IRQ-ma.patch +++ b/target/linux/ar71xx/patches-3.7/169-MIPS-ath79-allow-to-specify-bus-number-in-PCI-IRQ-ma.patch @@ -11,7 +11,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> --- a/arch/mips/ath79/pci.c +++ b/arch/mips/ath79/pci.c -@@ -75,7 +75,9 @@ int __init pcibios_map_irq(const struct +@@ -75,7 +75,9 @@ int __init pcibios_map_irq(const struct const struct ath79_pci_irq *entry; entry = &ath79_pci_irq_map[i]; diff --git a/target/linux/ar71xx/patches-3.7/170-MIPS-ath79-add-PCI-controller-registration-code-for-.patch b/target/linux/ar71xx/patches-3.7/170-MIPS-ath79-add-PCI-controller-registration-code-for-.patch index 0c3889fdb9..5c6388c455 100644 --- a/target/linux/ar71xx/patches-3.7/170-MIPS-ath79-add-PCI-controller-registration-code-for-.patch +++ b/target/linux/ar71xx/patches-3.7/170-MIPS-ath79-add-PCI-controller-registration-code-for-.patch @@ -44,7 +44,7 @@ Subject: [PATCH 26/34] MIPS: ath79: add PCI controller registration code for the int __init pcibios_map_irq(const struct pci_dev *dev, uint8_t slot, uint8_t pin) { int irq = -1; -@@ -64,6 +79,9 @@ int __init pcibios_map_irq(const struct +@@ -64,6 +79,9 @@ int __init pcibios_map_irq(const struct soc_is_ar9344()) { ath79_pci_irq_map = ar724x_pci_irq_map; ath79_pci_nr_irqs = ARRAY_SIZE(ar724x_pci_irq_map); diff --git a/target/linux/ar71xx/patches-3.7/203-spi-ath79-use-gpio_request_one.patch b/target/linux/ar71xx/patches-3.7/203-spi-ath79-use-gpio_request_one.patch index 12559bcae1..a7329b2ab7 100644 --- a/target/linux/ar71xx/patches-3.7/203-spi-ath79-use-gpio_request_one.patch +++ b/target/linux/ar71xx/patches-3.7/203-spi-ath79-use-gpio_request_one.patch @@ -32,19 +32,18 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> - status = gpio_request(cdata->gpio, dev_name(&spi->dev)); - if (status) - return status; -- ++ flags = GPIOF_DIR_OUT; ++ if (spi->mode & SPI_CS_HIGH) ++ flags |= GPIOF_INIT_HIGH; ++ else ++ flags |= GPIOF_INIT_LOW; + - status = gpio_direction_output(cdata->gpio, - spi->mode & SPI_CS_HIGH); - if (status) { - gpio_free(cdata->gpio); - return status; - } -+ flags = GPIOF_DIR_OUT; -+ if (spi->mode & SPI_CS_HIGH) -+ flags |= GPIOF_INIT_HIGH; -+ else -+ flags |= GPIOF_INIT_LOW; -+ + status = gpio_request_one(cdata->gpio, flags, + dev_name(&spi->dev)); } diff --git a/target/linux/ar71xx/patches-3.7/204-spi-ath79-avoid-multiple-initialization-of-the-SPI-c.patch b/target/linux/ar71xx/patches-3.7/204-spi-ath79-avoid-multiple-initialization-of-the-SPI-c.patch index c6f4b2b959..976159c6f9 100644 --- a/target/linux/ar71xx/patches-3.7/204-spi-ath79-avoid-multiple-initialization-of-the-SPI-c.patch +++ b/target/linux/ar71xx/patches-3.7/204-spi-ath79-avoid-multiple-initialization-of-the-SPI-c.patch @@ -20,7 +20,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> --- a/drivers/spi/spi-ath79.c +++ b/drivers/spi/spi-ath79.c -@@ -96,16 +96,8 @@ static void ath79_spi_chipselect(struct +@@ -96,16 +96,8 @@ static void ath79_spi_chipselect(struct } diff --git a/target/linux/ar71xx/patches-3.7/206-spi-ath79-make-chipselect-logic-more-flexible.patch b/target/linux/ar71xx/patches-3.7/206-spi-ath79-make-chipselect-logic-more-flexible.patch index 34df1756bb..da83e2ebe8 100644 --- a/target/linux/ar71xx/patches-3.7/206-spi-ath79-make-chipselect-logic-more-flexible.patch +++ b/target/linux/ar71xx/patches-3.7/206-spi-ath79-make-chipselect-logic-more-flexible.patch @@ -170,7 +170,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> struct ath79_spi { struct spi_bitbang bitbang; u32 ioc_base; -@@ -69,6 +71,7 @@ static void ath79_spi_chipselect(struct +@@ -69,6 +71,7 @@ static void ath79_spi_chipselect(struct { struct ath79_spi *sp = ath79_spidev_to_sp(spi); int cs_high = (spi->mode & SPI_CS_HIGH) ? is_active : !is_active; @@ -178,7 +178,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> if (is_active) { /* set initial clock polarity */ -@@ -80,20 +83,24 @@ static void ath79_spi_chipselect(struct +@@ -80,20 +83,24 @@ static void ath79_spi_chipselect(struct ath79_spi_wr(sp, AR71XX_SPI_REG_IOC, sp->ioc_base); } diff --git a/target/linux/ar71xx/patches-3.7/212-MIPS-ath79-fix-GPIO-function-selection-for-AR934x-So.patch b/target/linux/ar71xx/patches-3.7/212-MIPS-ath79-fix-GPIO-function-selection-for-AR934x-So.patch index a9845baba8..3e41789bf8 100644 --- a/target/linux/ar71xx/patches-3.7/212-MIPS-ath79-fix-GPIO-function-selection-for-AR934x-So.patch +++ b/target/linux/ar71xx/patches-3.7/212-MIPS-ath79-fix-GPIO-function-selection-for-AR934x-So.patch @@ -19,7 +19,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> --- a/arch/mips/ath79/gpio.c +++ b/arch/mips/ath79/gpio.c -@@ -137,47 +137,61 @@ static struct gpio_chip ath79_gpio_chip +@@ -137,47 +137,61 @@ static struct gpio_chip ath79_gpio_chip .base = 0, }; diff --git a/target/linux/ar71xx/patches-3.7/500-MIPS-fw-myloader.patch b/target/linux/ar71xx/patches-3.7/500-MIPS-fw-myloader.patch index 3559a27a2c..184f67a723 100644 --- a/target/linux/ar71xx/patches-3.7/500-MIPS-fw-myloader.patch +++ b/target/linux/ar71xx/patches-3.7/500-MIPS-fw-myloader.patch @@ -1,6 +1,6 @@ --- a/arch/mips/Makefile +++ b/arch/mips/Makefile -@@ -180,6 +180,7 @@ endif +@@ -182,6 +182,7 @@ endif # libs-$(CONFIG_ARC) += arch/mips/fw/arc/ libs-$(CONFIG_CFE) += arch/mips/fw/cfe/ diff --git a/target/linux/ar71xx/patches-3.7/505-MIPS-ath79-add-ath79_gpio_function_select.patch b/target/linux/ar71xx/patches-3.7/505-MIPS-ath79-add-ath79_gpio_function_select.patch index 86e136f67e..08f4a1e95c 100644 --- a/target/linux/ar71xx/patches-3.7/505-MIPS-ath79-add-ath79_gpio_function_select.patch +++ b/target/linux/ar71xx/patches-3.7/505-MIPS-ath79-add-ath79_gpio_function_select.patch @@ -10,7 +10,7 @@ #endif /* __ATH79_COMMON_H */ --- a/arch/mips/ath79/gpio.c +++ b/arch/mips/ath79/gpio.c -@@ -198,6 +198,34 @@ void ath79_gpio_function_setup(u32 set, +@@ -198,6 +198,34 @@ void ath79_gpio_function_setup(u32 set, spin_unlock_irqrestore(&ath79_gpio_lock, flags); } diff --git a/target/linux/ar71xx/patches-3.7/521-MIPS-ath79-enable-UART-for-early_serial.patch b/target/linux/ar71xx/patches-3.7/521-MIPS-ath79-enable-UART-for-early_serial.patch index 489bc96738..2ee025bbf2 100644 --- a/target/linux/ar71xx/patches-3.7/521-MIPS-ath79-enable-UART-for-early_serial.patch +++ b/target/linux/ar71xx/patches-3.7/521-MIPS-ath79-enable-UART-for-early_serial.patch @@ -1,6 +1,6 @@ --- a/arch/mips/ath79/early_printk.c +++ b/arch/mips/ath79/early_printk.c -@@ -56,6 +56,46 @@ static void prom_putchar_dummy(unsigned +@@ -56,6 +56,46 @@ static void prom_putchar_dummy(unsigned /* nothing to do */ } diff --git a/target/linux/ar71xx/patches-3.7/606-MIPS-ath79-pb44-fixes.patch b/target/linux/ar71xx/patches-3.7/606-MIPS-ath79-pb44-fixes.patch index f9ec7753f1..b38b46121d 100644 --- a/target/linux/ar71xx/patches-3.7/606-MIPS-ath79-pb44-fixes.patch +++ b/target/linux/ar71xx/patches-3.7/606-MIPS-ath79-pb44-fixes.patch @@ -50,7 +50,7 @@ #define PB44_GPIO_SW_RESET (PB44_GPIO_EXP_BASE + 6) #define PB44_GPIO_SW_JUMP (PB44_GPIO_EXP_BASE + 8) #define PB44_GPIO_LED_JUMP1 (PB44_GPIO_EXP_BASE + 9) -@@ -92,21 +117,66 @@ static struct ath79_spi_controller_data +@@ -92,21 +117,66 @@ static struct ath79_spi_controller_data .cs_line = 0, }; diff --git a/target/linux/ar71xx/patches-3.7/902-unaligned_access_hacks.patch b/target/linux/ar71xx/patches-3.7/902-unaligned_access_hacks.patch index e7e1712b7e..fc05676b83 100644 --- a/target/linux/ar71xx/patches-3.7/902-unaligned_access_hacks.patch +++ b/target/linux/ar71xx/patches-3.7/902-unaligned_access_hacks.patch @@ -288,7 +288,7 @@ #include <asm/uaccess.h> #include <linux/proc_fs.h> -@@ -851,10 +852,10 @@ static void tcp_v6_send_response(struct +@@ -851,10 +852,10 @@ static void tcp_v6_send_response(struct topt = (__be32 *)(t1 + 1); if (ts) { @@ -415,7 +415,7 @@ if (t->parms.flags & IP6_TNL_F_USE_ORIG_FWMARK) fl6.flowi6_mark = skb->mark; -@@ -1256,7 +1256,7 @@ static int ip6gre_header(struct sk_buff +@@ -1256,7 +1256,7 @@ static int ip6gre_header(struct sk_buff struct ipv6hdr *ipv6h = (struct ipv6hdr *)skb_push(skb, t->hlen); __be16 *p = (__be16 *)(ipv6h+1); 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/221-module_exports.patch index fc382c16f9..da08de626a 100644 --- a/target/linux/generic/patches-3.7/220-module_exports.patch +++ b/target/linux/generic/patches-3.7/221-module_exports.patch @@ -1,29 +1,27 @@ --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h -@@ -52,6 +52,18 @@ +@@ -52,6 +52,16 @@ #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+*) ++#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 -+#define SYMTAB_DISCARD_STR +#endif + #ifndef SYMBOL_PREFIX #define VMLINUX_SYMBOL(sym) sym #else -@@ -276,14 +288,14 @@ +@@ -277,14 +287,14 @@ /* Kernel symbol table: Normal symbols */ \ __ksymtab : AT(ADDR(__ksymtab) - LOAD_OFFSET) { \ VMLINUX_SYMBOL(__start___ksymtab) = .; \ -- *(SORT(___ksymtab+*)) \ +- KEEP(*(SORT(___ksymtab+*))) \ + SYMTAB_KEEP \ VMLINUX_SYMBOL(__stop___ksymtab) = .; \ } \ @@ -31,30 +29,40 @@ /* 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+*))) \ + SYMTAB_KEEP_GPL \ VMLINUX_SYMBOL(__stop___ksymtab_gpl) = .; \ } \ \ -@@ -345,7 +357,7 @@ +@@ -346,7 +356,7 @@ \ /* Kernel symbol table: strings */ \ __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) { \ - *(__ksymtab_strings) \ -+ SYMTAB_KEEP_STR \ ++ *(__ksymtab_strings+*) \ } \ \ /* __*init sections */ \ -@@ -679,6 +691,9 @@ +@@ -680,6 +690,8 @@ EXIT_TEXT \ EXIT_DATA \ EXIT_CALL \ + SYMTAB_DISCARD \ + SYMTAB_DISCARD_GPL \ -+ SYMTAB_DISCARD_STR \ *(.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; @@ -78,14 +86,3 @@ = 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/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 <cdhmanning@gmail.com> #include <linux/pagemap.h> #include <linux/mtd/mtd.h> #include <linux/interrupt.h> -@@ -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 <vkuzmichev@mvista.com> { .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 */ diff --git a/target/linux/generic/patches-3.8/100-overlayfs.patch b/target/linux/generic/patches-3.8/100-overlayfs.patch index f6c9a3c166..04a058ff1f 100644 --- a/target/linux/generic/patches-3.8/100-overlayfs.patch +++ b/target/linux/generic/patches-3.8/100-overlayfs.patch @@ -279,8 +279,8 @@ source "fs/fuse/Kconfig" +source "fs/overlayfs/Kconfig" - config CUSE - tristate "Character device in Userspace support" + config GENERIC_ACL + bool --- a/fs/Makefile +++ b/fs/Makefile @@ -107,6 +107,7 @@ obj-$(CONFIG_QNX6FS_FS) += qnx6/ diff --git a/target/linux/generic/patches-3.8/102-ehci_hcd_ignore_oc.patch b/target/linux/generic/patches-3.8/102-ehci_hcd_ignore_oc.patch index 1117223eb4..5bd661e124 100644 --- a/target/linux/generic/patches-3.8/102-ehci_hcd_ignore_oc.patch +++ b/target/linux/generic/patches-3.8/102-ehci_hcd_ignore_oc.patch @@ -1,6 +1,6 @@ --- a/drivers/usb/host/ehci-hcd.c +++ b/drivers/usb/host/ehci-hcd.c -@@ -634,7 +634,7 @@ static int ehci_run (struct usb_hcd *hcd +@@ -630,7 +630,7 @@ static int ehci_run (struct usb_hcd *hcd "USB %x.%x started, EHCI %x.%02x%s\n", ((ehci->sbrn & 0xf0)>>4), (ehci->sbrn & 0x0f), temp >> 8, temp & 0xff, @@ -31,7 +31,7 @@ /* --- a/drivers/usb/host/ehci.h +++ b/drivers/usb/host/ehci.h -@@ -196,6 +196,7 @@ struct ehci_hcd { /* one per controlle +@@ -200,6 +200,7 @@ struct ehci_hcd { /* one per controlle unsigned use_dummy_qh:1; /* AMD Frame List table quirk*/ unsigned has_synopsys_hc_bug:1; /* Synopsys HC */ unsigned frame_index_bug:1; /* MosChip (AKA NetMos) */ diff --git a/target/linux/generic/patches-3.8/220-gc_sections.patch b/target/linux/generic/patches-3.8/220-gc_sections.patch new file mode 100644 index 0000000000..19c0f15923 --- /dev/null +++ b/target/linux/generic/patches-3.8/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 +@@ -67,7 +67,7 @@ SECTIONS + /* Exception table for data bus errors */ + __dbe_table : { + __start___dbe_table = .; +- *(__dbe_table) ++ KEEP(*(__dbe_table)) + __stop___dbe_table = .; + } + +@@ -112,7 +112,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.8/220-module_exports.patch b/target/linux/generic/patches-3.8/221-module_exports.patch index fc382c16f9..da08de626a 100644 --- a/target/linux/generic/patches-3.8/220-module_exports.patch +++ b/target/linux/generic/patches-3.8/221-module_exports.patch @@ -1,29 +1,27 @@ --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h -@@ -52,6 +52,18 @@ +@@ -52,6 +52,16 @@ #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+*) ++#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 -+#define SYMTAB_DISCARD_STR +#endif + #ifndef SYMBOL_PREFIX #define VMLINUX_SYMBOL(sym) sym #else -@@ -276,14 +288,14 @@ +@@ -277,14 +287,14 @@ /* Kernel symbol table: Normal symbols */ \ __ksymtab : AT(ADDR(__ksymtab) - LOAD_OFFSET) { \ VMLINUX_SYMBOL(__start___ksymtab) = .; \ -- *(SORT(___ksymtab+*)) \ +- KEEP(*(SORT(___ksymtab+*))) \ + SYMTAB_KEEP \ VMLINUX_SYMBOL(__stop___ksymtab) = .; \ } \ @@ -31,30 +29,40 @@ /* 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+*))) \ + SYMTAB_KEEP_GPL \ VMLINUX_SYMBOL(__stop___ksymtab_gpl) = .; \ } \ \ -@@ -345,7 +357,7 @@ +@@ -346,7 +356,7 @@ \ /* Kernel symbol table: strings */ \ __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) { \ - *(__ksymtab_strings) \ -+ SYMTAB_KEEP_STR \ ++ *(__ksymtab_strings+*) \ } \ \ /* __*init sections */ \ -@@ -679,6 +691,9 @@ +@@ -680,6 +690,8 @@ EXIT_TEXT \ EXIT_DATA \ EXIT_CALL \ + SYMTAB_DISCARD \ + SYMTAB_DISCARD_GPL \ -+ SYMTAB_DISCARD_STR \ *(.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; @@ -78,14 +86,3 @@ = 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.8/230-openwrt_lzma_options.patch b/target/linux/generic/patches-3.8/230-openwrt_lzma_options.patch index 55434c13ab..b6bb77023a 100644 --- a/target/linux/generic/patches-3.8/230-openwrt_lzma_options.patch +++ b/target/linux/generic/patches-3.8/230-openwrt_lzma_options.patch @@ -1,6 +1,6 @@ --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib -@@ -299,7 +299,7 @@ cmd_bzip2 = (cat $(filter-out FORCE,$^) +@@ -299,7 +299,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.8/302-mips_no_branch_likely.patch b/target/linux/generic/patches-3.8/302-mips_no_branch_likely.patch index 1da9540050..44c6b04fcf 100644 --- a/target/linux/generic/patches-3.8/302-mips_no_branch_likely.patch +++ b/target/linux/generic/patches-3.8/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.8/305-mips_module_reloc.patch b/target/linux/generic/patches-3.8/305-mips_module_reloc.patch index 3c51d14cf7..f0f513741d 100644 --- a/target/linux/generic/patches-3.8/305-mips_module_reloc.patch +++ b/target/linux/generic/patches-3.8/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.8/306-mips_mem_functions_performance.patch b/target/linux/generic/patches-3.8/306-mips_mem_functions_performance.patch index 9818677425..e6056fa5c4 100644 --- a/target/linux/generic/patches-3.8/306-mips_mem_functions_performance.patch +++ b/target/linux/generic/patches-3.8/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.8/470-mtd_m25p80_add_pm25lv_flash_support.patch b/target/linux/generic/patches-3.8/470-mtd_m25p80_add_pm25lv_flash_support.patch index 36d9caac7b..7af5e4bd3f 100644 --- a/target/linux/generic/patches-3.8/470-mtd_m25p80_add_pm25lv_flash_support.patch +++ b/target/linux/generic/patches-3.8/470-mtd_m25p80_add_pm25lv_flash_support.patch @@ -27,7 +27,7 @@ /* Spansion -- single (large) sector size only, at least * for the chips listed here (without boot sectors). */ -@@ -909,6 +915,9 @@ static int m25p_probe(struct spi_device +@@ -909,6 +915,9 @@ static int m25p_probe(struct spi_device if (info->flags & SECT_4K) { flash->erase_opcode = OPCODE_BE_4K; flash->mtd.erasesize = 4096; diff --git a/target/linux/generic/patches-3.8/476-mtd-m25p80-allow-to-disable-small-sector-erase.patch b/target/linux/generic/patches-3.8/476-mtd-m25p80-allow-to-disable-small-sector-erase.patch index ba1526ce52..83d6aa7e24 100644 --- a/target/linux/generic/patches-3.8/476-mtd-m25p80-allow-to-disable-small-sector-erase.patch +++ b/target/linux/generic/patches-3.8/476-mtd-m25p80-allow-to-disable-small-sector-erase.patch @@ -30,7 +30,7 @@ /****************************************************************************/ struct m25p { -@@ -913,7 +919,7 @@ static int m25p_probe(struct spi_device +@@ -913,7 +919,7 @@ static int m25p_probe(struct spi_device flash->mtd._write = m25p80_write; /* prefer "small sector" erase if possible */ diff --git a/target/linux/generic/patches-3.8/504-yaffs-Mods-for-Linux-3.0-and-fix-a-typo.patch b/target/linux/generic/patches-3.8/504-yaffs-Mods-for-Linux-3.0-and-fix-a-typo.patch index 1b814e97fd..4767e769b6 100644 --- a/target/linux/generic/patches-3.8/504-yaffs-Mods-for-Linux-3.0-and-fix-a-typo.patch +++ b/target/linux/generic/patches-3.8/504-yaffs-Mods-for-Linux-3.0-and-fix-a-typo.patch @@ -26,7 +26,7 @@ Signed-off-by: Charles Manning <cdhmanning@gmail.com> #include <linux/pagemap.h> #include <linux/mtd/mtd.h> #include <linux/interrupt.h> -@@ -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.8/512-yaffs-3.5-convert-to-use-kuid_t-kgid_t.patch b/target/linux/generic/patches-3.8/512-yaffs-3.5-convert-to-use-kuid_t-kgid_t.patch index 1ca189d2ee..7787d500a9 100644 --- a/target/linux/generic/patches-3.8/512-yaffs-3.5-convert-to-use-kuid_t-kgid_t.patch +++ b/target/linux/generic/patches-3.8/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.8/531-debloat_lzma.patch b/target/linux/generic/patches-3.8/531-debloat_lzma.patch index 1e41661ebb..18e4a51ee3 100644 --- a/target/linux/generic/patches-3.8/531-debloat_lzma.patch +++ b/target/linux/generic/patches-3.8/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.8/600-netfilter_layer7_2.22.patch b/target/linux/generic/patches-3.8/600-netfilter_layer7_2.22.patch index 08c012cdc7..66e9514684 100644 --- a/target/linux/generic/patches-3.8/600-netfilter_layer7_2.22.patch +++ b/target/linux/generic/patches-3.8/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.8/610-netfilter_match_bypass_default_checks.patch b/target/linux/generic/patches-3.8/610-netfilter_match_bypass_default_checks.patch index 0081da01df..ded6f5f153 100644 --- a/target/linux/generic/patches-3.8/610-netfilter_match_bypass_default_checks.patch +++ b/target/linux/generic/patches-3.8/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.8/653-disable_netlink_trim.patch b/target/linux/generic/patches-3.8/653-disable_netlink_trim.patch index 870ae944a1..c5c967d20b 100644 --- a/target/linux/generic/patches-3.8/653-disable_netlink_trim.patch +++ b/target/linux/generic/patches-3.8/653-disable_netlink_trim.patch @@ -1,6 +1,6 @@ --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c -@@ -898,25 +898,7 @@ void netlink_detachskb(struct sock *sk, +@@ -898,25 +898,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.8/750-hostap_txpower.patch b/target/linux/generic/patches-3.8/750-hostap_txpower.patch index 814406df11..a111c8127b 100644 --- a/target/linux/generic/patches-3.8/750-hostap_txpower.patch +++ b/target/linux/generic/patches-3.8/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.8/810-pci_disable_common_quirks.patch b/target/linux/generic/patches-3.8/810-pci_disable_common_quirks.patch index cd8551bc74..02d97cc5bf 100644 --- a/target/linux/generic/patches-3.8/810-pci_disable_common_quirks.patch +++ b/target/linux/generic/patches-3.8/810-pci_disable_common_quirks.patch @@ -15,7 +15,7 @@ default y --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c -@@ -44,6 +44,7 @@ static void quirk_mmio_always_on(struct +@@ -44,6 +44,7 @@ static void quirk_mmio_always_on(struct DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_BRIDGE_HOST, 8, quirk_mmio_always_on); diff --git a/target/linux/generic/patches-3.8/901-debloat_sock_diag.patch b/target/linux/generic/patches-3.8/901-debloat_sock_diag.patch index 4065f8aeae..119760648d 100644 --- a/target/linux/generic/patches-3.8/901-debloat_sock_diag.patch +++ b/target/linux/generic/patches-3.8/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.8/920-unable_to_open_console.patch b/target/linux/generic/patches-3.8/920-unable_to_open_console.patch index 5a1e2f4a65..6202aa5ec3 100644 --- a/target/linux/generic/patches-3.8/920-unable_to_open_console.patch +++ b/target/linux/generic/patches-3.8/920-unable_to_open_console.patch @@ -1,6 +1,6 @@ --- a/init/main.c +++ b/init/main.c -@@ -878,7 +878,7 @@ static void __init kernel_init_freeable( +@@ -878,7 +878,7 @@ static noinline void __init kernel_init_ /* Open the /dev/console on the rootfs, this should never fail */ if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0) diff --git a/target/linux/generic/patches-3.8/941-ocf_20120127.patch b/target/linux/generic/patches-3.8/941-ocf_20120127.patch index 3c2ba0d38d..dec3c28211 100644 --- a/target/linux/generic/patches-3.8/941-ocf_20120127.patch +++ b/target/linux/generic/patches-3.8/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. -@@ -796,6 +806,63 @@ void add_disk_randomness(struct gendisk +@@ -796,6 +806,63 @@ void add_disk_randomness(struct gendisk } #endif diff --git a/target/linux/generic/patches-3.8/950-vm_exports.patch b/target/linux/generic/patches-3.8/950-vm_exports.patch index c1819b1b88..aae62f2380 100644 --- a/target/linux/generic/patches-3.8/950-vm_exports.patch +++ b/target/linux/generic/patches-3.8/950-vm_exports.patch @@ -52,7 +52,7 @@ * When we die, we re-parent all our children, and try to: --- a/kernel/sched/core.c +++ b/kernel/sched/core.c -@@ -3633,6 +3633,7 @@ int can_nice(const struct task_struct *p +@@ -3634,6 +3634,7 @@ int can_nice(const struct task_struct *p return (nice_rlim <= task_rlimit(p, RLIMIT_NICE) || capable(CAP_SYS_NICE)); } diff --git a/target/linux/generic/patches-3.8/992-mpcore_wdt_fix_watchdog_counter_loading.patch b/target/linux/generic/patches-3.8/992-mpcore_wdt_fix_watchdog_counter_loading.patch index 8d7390ebda..611b858268 100644 --- a/target/linux/generic/patches-3.8/992-mpcore_wdt_fix_watchdog_counter_loading.patch +++ b/target/linux/generic/patches-3.8/992-mpcore_wdt_fix_watchdog_counter_loading.patch @@ -55,7 +55,7 @@ Signed-off-by: Vitaly Kuzmichev <vkuzmichev@mvista.com> { .compatible = "arm,cortex-a9-twd-timer", }, --- a/drivers/watchdog/mpcore_wdt.c +++ b/drivers/watchdog/mpcore_wdt.c -@@ -101,9 +101,7 @@ static void mpcore_wdt_keepalive(struct +@@ -101,9 +101,7 @@ static void mpcore_wdt_keepalive(struct spin_lock(&wdt_lock); /* Assume prescale is set to 256 */ |