[Buildroot] [PATCH] Makefile: respect strip exclusions for special libraries

Yann E. MORIN yann.morin.1998 at free.fr
Mon Jul 2 16:40:44 UTC 2018


John, All,

On 2018-07-02 17:00 +0100, John Keeping spake thusly:
> ld-*.so and libpthread*.so* are not stripped in the same way as other
> binaries because some applications need symbols in these libraries in
> order to operate correctly.
> 
> However, the special handling for these binaries ignores the usual
> BR2_STRIP_EXCLUDE_* rules so it is not possible to build an image which
> has debugging symbols in these binaries.
> 
> Instead of running one-off commands to strip each of these special
> binaries, build a single command for everything that needs
> $(STRIP_STRIP_DEBUG) and include the normal exclusion rules in this
> command.
> 
> Signed-off-by: John Keeping <john at metanate.com>
> ---
>  Makefile | 32 +++++++++++++++++++++-----------
>  1 file changed, 21 insertions(+), 11 deletions(-)
> 
> diff --git a/Makefile b/Makefile
> index 8d25c8a239..2deb5fd54a 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -606,6 +606,26 @@ STRIP_FIND_CMD += -type f \( -perm /111 -o -name '*.so*' \)
>  #   done for kernel modules with incorrect permissions.
>  STRIP_FIND_CMD += -not \( $(call findfileclauses,libpthread*.so* ld-*.so* *.ko $(call qstrip,$(BR2_STRIP_EXCLUDE_FILES))) \) -print0
>  
> +# This is the command used to handle the special cases above.
> +STRIP_SPECIAL_LIBS_CMD = find $(TARGET_DIR)/lib/
> +ifneq (,$(filter lib/%,$(call qstrip,$(BR2_STRIP_EXCLUDE_DIRS))))
> +STRIP_SPECIAL_LIBS_CMD += \( $(call finddirclauses,$(TARGET_DIR),$(BR2_STRIP_EXCLUDE_DIRS)) \) -prune -o
> +endif
> +# Valgrind needs ld.so with enough information, so only strip
> +# debugging symbols.
> +STRIP_SPECIAL_LIBS_CMD += \( -name 'ld-*.so*'
> +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y)
> +# See http://sourceware.org/gdb/wiki/FAQ, "GDB does not see any threads
> +# besides the one in which crash occurred; or SIGTRAP kills my program when
> +# I set a breakpoint"
> +STRIP_SPECIAL_LIBS_CMD += -o -name 'libpthread*.so*'
> +endif
> +STRIP_SPECIAL_LIBS_CMD += \)
> +ifneq (,$(call qstrip,$(BR2_STRIP_EXCLUDE_FILES)))
> +STRIP_SPECIAL_LIBS_CMD += -not \( $(call qstrip,$(BR2_STRIP_EXCLUDE_FILES)) \)

I guess you forgot to use 'findfileclauses' here, that is:

    STRIP_SPECIAL_LIBS_CMD += -not \( $(call findfileclauses,$(call qstrip,$(BR2_STRIP_EXCLUDE_FILES))) \)

Otherwise, expansion of the variable would give an invalide find
pattern, like so:

    -not \( some-excluded-file some-other-file a-tird-file \)

Or did I miss something?

Regards,
Yann E. MORIN.

> +endif
> +STRIP_SPECIAL_LIBS_CMD += | xargs -r $(STRIPCMD) $(STRIP_STRIP_DEBUG)
> +
>  ifeq ($(BR2_ECLIPSE_REGISTER),y)
>  define TOOLCHAIN_ECLIPSE_REGISTER
>  	./support/scripts/eclipse-register-toolchain `readlink -f $(O)` \
> @@ -717,18 +737,8 @@ endif
>  	rmdir $(TARGET_DIR)/usr/share 2>/dev/null || true
>  	$(STRIP_FIND_CMD) | xargs -0 $(STRIPCMD) 2>/dev/null || true
>  
> -# See http://sourceware.org/gdb/wiki/FAQ, "GDB does not see any threads
> -# besides the one in which crash occurred; or SIGTRAP kills my program when
> -# I set a breakpoint"
> -ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y)
> -	find $(TARGET_DIR)/lib/ -type f -name 'libpthread*.so*' | \
> -		xargs -r $(STRIPCMD) $(STRIP_STRIP_DEBUG)
> -endif
> +	$(STRIP_SPECIAL_LIBS_CMD) || true
>  
> -# Valgrind needs ld.so with enough information, so only strip
> -# debugging symbols.
> -	find $(TARGET_DIR)/lib/ -type f -name 'ld-*.so*' | \
> -		xargs -r $(STRIPCMD) $(STRIP_STRIP_DEBUG)
>  	test -f $(TARGET_DIR)/etc/ld.so.conf && \
>  		{ echo "ERROR: we shouldn't have a /etc/ld.so.conf file"; exit 1; } || true
>  	test -d $(TARGET_DIR)/etc/ld.so.conf.d && \
> -- 
> 2.18.0
> 
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'



More information about the buildroot mailing list