Deleted (reverse-applicable): mvebu/patches-5.10/101-ARM-dts-turris-omnia-configure-LED-2--INTn-pin-as-interrupt-pin.patch Automatically refreshed: bcm63xx/patches-5.10/143-gpio-fix-device-tree-gpio-hogs-on-dual-role-gpio-pin.patch generic/backport-5.10/610-v5.13-02-netfilter-Fix-fall-through-warnings-for-Clang.patch generic/backport-5.10/610-v5.13-10-netfilter-nftables-update-table-flags-from-the-commi.patch generic/hack-5.10/204-module_strip.patch generic/hack-5.10/902-debloat_proc.patch generic/pending-5.10/203-kallsyms_uncompressed.patch generic/pending-5.10/670-ipv6-allow-rejecting-with-source-address-failed-policy.patch generic/pending-5.10/920-mangle_bootargs.patch mediatek/patches-5.10/115-dts-bpi64-add-snand-support.patch mediatek/patches-5.10/602-arm64-dts-mediatek-Split-PCIe-node-for-MT2712-MT7622.patch mediatek/patches-5.10/900-dts-mt7622-bpi-r64-aliases-for-dtoverlay.patch ramips/patches-5.10/323-mt7621-memory-detect.patch Signed-off-by: Rui Salvaterra <rsalvaterra@gmail.com>
		
			
				
	
	
		
			120 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From: Felix Fietkau <nbd@nbd.name>
 | 
						|
Subject: kernel: add a config option for keeping the kallsyms table uncompressed, saving ~9kb kernel size after lzma on ar71xx
 | 
						|
 | 
						|
[john@phrozen.org: added to my upstream queue 30.12.2016]
 | 
						|
lede-commit: e0e3509b5ce2ccf93d4d67ea907613f5f7ec2eed
 | 
						|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | 
						|
---
 | 
						|
 init/Kconfig            | 11 +++++++++++
 | 
						|
 kernel/kallsyms.c       |  8 ++++++++
 | 
						|
 scripts/kallsyms.c      | 12 ++++++++++++
 | 
						|
 scripts/link-vmlinux.sh |  4 ++++
 | 
						|
 4 files changed, 35 insertions(+)
 | 
						|
 | 
						|
--- a/init/Kconfig
 | 
						|
+++ b/init/Kconfig
 | 
						|
@@ -1384,6 +1384,17 @@ config SYSCTL_ARCH_UNALIGN_ALLOW
 | 
						|
 	  the unaligned access emulation.
 | 
						|
 	  see arch/parisc/kernel/unaligned.c for reference
 | 
						|
 
 | 
						|
+config KALLSYMS_UNCOMPRESSED
 | 
						|
+	bool "Keep kallsyms uncompressed"
 | 
						|
+	depends on KALLSYMS
 | 
						|
+	help
 | 
						|
+		Normally kallsyms contains compressed symbols (using a token table),
 | 
						|
+		reducing the uncompressed kernel image size. Keeping the symbol table
 | 
						|
+		uncompressed significantly improves the size of this part in compressed
 | 
						|
+		kernel images.
 | 
						|
+
 | 
						|
+		Say N unless you need compressed kernel images to be small.
 | 
						|
+
 | 
						|
 config HAVE_PCSPKR_PLATFORM
 | 
						|
 	bool
 | 
						|
 
 | 
						|
--- a/kernel/kallsyms.c
 | 
						|
+++ b/kernel/kallsyms.c
 | 
						|
@@ -77,6 +77,11 @@ static unsigned int kallsyms_expand_symb
 | 
						|
 	 * For every byte on the compressed symbol data, copy the table
 | 
						|
 	 * entry for that byte.
 | 
						|
 	 */
 | 
						|
+#ifdef CONFIG_KALLSYMS_UNCOMPRESSED
 | 
						|
+	memcpy(result, data + 1, len - 1);
 | 
						|
+	result += len - 1;
 | 
						|
+	len = 0;
 | 
						|
+#endif
 | 
						|
 	while (len) {
 | 
						|
 		tptr = &kallsyms_token_table[kallsyms_token_index[*data]];
 | 
						|
 		data++;
 | 
						|
@@ -109,6 +114,9 @@ tail:
 | 
						|
  */
 | 
						|
 static char kallsyms_get_symbol_type(unsigned int off)
 | 
						|
 {
 | 
						|
+#ifdef CONFIG_KALLSYMS_UNCOMPRESSED
 | 
						|
+	return kallsyms_names[off + 1];
 | 
						|
+#endif
 | 
						|
 	/*
 | 
						|
 	 * Get just the first code, look it up in the token table,
 | 
						|
 	 * and return the first char from this token.
 | 
						|
--- a/scripts/kallsyms.c
 | 
						|
+++ b/scripts/kallsyms.c
 | 
						|
@@ -58,6 +58,7 @@ static struct addr_range percpu_range =
 | 
						|
 static struct sym_entry **table;
 | 
						|
 static unsigned int table_size, table_cnt;
 | 
						|
 static int all_symbols;
 | 
						|
+static int uncompressed;
 | 
						|
 static int absolute_percpu;
 | 
						|
 static int base_relative;
 | 
						|
 
 | 
						|
@@ -486,6 +487,9 @@ static void write_src(void)
 | 
						|
 
 | 
						|
 	free(markers);
 | 
						|
 
 | 
						|
+	if (uncompressed)
 | 
						|
+		return;
 | 
						|
+
 | 
						|
 	output_label("kallsyms_token_table");
 | 
						|
 	off = 0;
 | 
						|
 	for (i = 0; i < 256; i++) {
 | 
						|
@@ -537,6 +541,9 @@ static unsigned char *find_token(unsigne
 | 
						|
 {
 | 
						|
 	int i;
 | 
						|
 
 | 
						|
+	if (uncompressed)
 | 
						|
+		return NULL;
 | 
						|
+
 | 
						|
 	for (i = 0; i < len - 1; i++) {
 | 
						|
 		if (str[i] == token[0] && str[i+1] == token[1])
 | 
						|
 			return &str[i];
 | 
						|
@@ -609,6 +616,9 @@ static void optimize_result(void)
 | 
						|
 {
 | 
						|
 	int i, best;
 | 
						|
 
 | 
						|
+	if (uncompressed)
 | 
						|
+		return;
 | 
						|
+
 | 
						|
 	/* using the '\0' symbol last allows compress_symbols to use standard
 | 
						|
 	 * fast string functions */
 | 
						|
 	for (i = 255; i >= 0; i--) {
 | 
						|
@@ -773,6 +783,8 @@ int main(int argc, char **argv)
 | 
						|
 				absolute_percpu = 1;
 | 
						|
 			else if (strcmp(argv[i], "--base-relative") == 0)
 | 
						|
 				base_relative = 1;
 | 
						|
+			else if (strcmp(argv[i], "--uncompressed") == 0)
 | 
						|
+				uncompressed = 1;
 | 
						|
 			else
 | 
						|
 				usage();
 | 
						|
 		}
 | 
						|
--- a/scripts/link-vmlinux.sh
 | 
						|
+++ b/scripts/link-vmlinux.sh
 | 
						|
@@ -186,6 +186,10 @@ kallsyms()
 | 
						|
 		kallsymopt="${kallsymopt} --base-relative"
 | 
						|
 	fi
 | 
						|
 
 | 
						|
+	if [ -n "${CONFIG_KALLSYMS_UNCOMPRESSED}" ]; then
 | 
						|
+		kallsymopt="${kallsymopt} --uncompressed"
 | 
						|
+	fi
 | 
						|
+
 | 
						|
 	info KSYMS ${2}
 | 
						|
 	${NM} -n ${1} | scripts/kallsyms ${kallsymopt} > ${2}
 | 
						|
 }
 |