strip kernel modules more aggressively: make all global symbols local, rename all symbols in the symbol table to make them compress better
SVN-Revision: 30662
This commit is contained in:
		
							
								
								
									
										3
									
								
								rules.mk
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								rules.mk
									
									
									
									
									
								
							| @@ -219,9 +219,10 @@ else | |||||||
|     endif |     endif | ||||||
|   endif |   endif | ||||||
|   RSTRIP:= \ |   RSTRIP:= \ | ||||||
|  |     export CROSS="$(TARGET_CROSS)"; \ | ||||||
|     NM="$(TARGET_CROSS)nm" \ |     NM="$(TARGET_CROSS)nm" \ | ||||||
|     STRIP="$(STRIP)" \ |     STRIP="$(STRIP)" \ | ||||||
|     STRIP_KMOD="$(TARGET_CROSS)strip --strip-unneeded -R .comment -R .pdr -R .mdebug.abi32 -R .note.gnu.build-id -R .gnu.attributes -R .reginfo -x" \ |     STRIP_KMOD="$(SCRIPT_DIR)/strip-kmod.sh" \ | ||||||
|     $(SCRIPT_DIR)/rstrip.sh |     $(SCRIPT_DIR)/rstrip.sh | ||||||
| endif | endif | ||||||
|  |  | ||||||
|   | |||||||
| @@ -5,25 +5,6 @@ | |||||||
| # This is free software, licensed under the GNU General Public License v2. | # This is free software, licensed under the GNU General Public License v2. | ||||||
| # See /LICENSE for more information. | # See /LICENSE for more information. | ||||||
| # | # | ||||||
|  |  | ||||||
| find_modparams() { |  | ||||||
| 	FILE="$1" |  | ||||||
| 	$NM "$FILE" | awk ' |  | ||||||
| BEGIN { |  | ||||||
| 	FS=" " |  | ||||||
| } |  | ||||||
| ($3 ~ /^__module_parm_/) && ($3 !~ /^__module_parm_desc/) { |  | ||||||
| 	gsub(/__module_parm_/, "", $3) |  | ||||||
| 	printf "-K " $3 " " |  | ||||||
| } |  | ||||||
| ($2 ~ /r/) && ($3 ~ /__param_/) { |  | ||||||
| 	gsub(/__param_/, "", $3) |  | ||||||
| 	printf "-K " $3 " " |  | ||||||
| } |  | ||||||
| ' |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| SELF=${0##*/} | SELF=${0##*/} | ||||||
|  |  | ||||||
| [ -z "$STRIP" ] && { | [ -z "$STRIP" ] && { | ||||||
| @@ -46,7 +27,7 @@ find $TARGETS -type f -a -exec file {} \; | \ | |||||||
|   while read F S; do |   while read F S; do | ||||||
|     echo "$SELF: $F:$S" |     echo "$SELF: $F:$S" | ||||||
| 	[ "${S}" = "relocatable" ] && { | 	[ "${S}" = "relocatable" ] && { | ||||||
| 		eval "$STRIP_KMOD -w -K '__param*' -K '__mod*' $(find_modparams "$F")$F" | 		eval "$STRIP_KMOD $F" | ||||||
| 	} || { | 	} || { | ||||||
| 		b=$(stat -c '%a' $F) | 		b=$(stat -c '%a' $F) | ||||||
| 		eval "$STRIP $F" | 		eval "$STRIP $F" | ||||||
|   | |||||||
							
								
								
									
										38
									
								
								scripts/strip-kmod.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										38
									
								
								scripts/strip-kmod.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,38 @@ | |||||||
|  | #!/usr/bin/env bash | ||||||
|  | [ -n "$CROSS" ] || { | ||||||
|  | 	echo "The variable CROSS must be set to point to the cross-compiler prefix" | ||||||
|  | 	exit 1 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | MODULE="$1" | ||||||
|  |  | ||||||
|  | [ "$#" -ne 1 ] && { | ||||||
|  | 	echo "Usage: $0 <module>" | ||||||
|  | 	exit 1 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | ${CROSS}objcopy \ | ||||||
|  | 	--strip-unneeded \ | ||||||
|  | 	-R .comment \ | ||||||
|  | 	-R .pdr \ | ||||||
|  | 	-R .mdebug.abi32 \ | ||||||
|  | 	-R .note.gnu.build-id \ | ||||||
|  | 	-R .gnu.attributes \ | ||||||
|  | 	-R .reginfo \ | ||||||
|  | 	-G __this_module \ | ||||||
|  | 	-x "$MODULE" "$MODULE.tmp" | ||||||
|  |  | ||||||
|  | ${CROSS}nm "$MODULE.tmp" | awk ' | ||||||
|  | BEGIN { | ||||||
|  | 	n = 0 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | $3 && $2 ~ /[brtd]/ && $3 !~ /\$LC/ { | ||||||
|  | 	print "--redefine-sym "$3"=_"n; | ||||||
|  | 	n = n + 1 | ||||||
|  | } | ||||||
|  | ' > "$MODULE.tmp1" | ||||||
|  |  | ||||||
|  | ${CROSS}objcopy `cat ${MODULE}.tmp1` ${MODULE}.tmp ${MODULE}.out | ||||||
|  | mv "${MODULE}.out" "${MODULE}" | ||||||
|  | rm -f "${MODULE}".t* | ||||||
		Reference in New Issue
	
	Block a user
	 Felix Fietkau
					Felix Fietkau