[Buildroot] [git commit] Makefile: respect strip exclusions for special libraries
Matthew Weber
matthew.weber at rockwellcollins.com
Mon Feb 4 18:58:08 UTC 2019
Thomas,
On Mon, Feb 4, 2019 at 9:57 AM Thomas Petazzoni
<thomas.petazzoni at bootlin.com> wrote:
>
> commit: https://git.buildroot.net/buildroot/commit/?id=e5e0f637aba9e926c0420ce6e343b734b968d883
> branch: https://git.buildroot.net/buildroot/commit/?id=refs/heads/master
>
> 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.
>
> Pull out the common find functionality so that we can build two find
> commands that re-use the common exclusion rules.
>
> Fix-suggested-by: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
> Signed-off-by: John Keeping <john at metanate.com>
> Tested-by: Matt Weber <matthew.weber at rockwellcollins.com>
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
> ---
> Makefile | 46 ++++++++++++++++++++++++++--------------------
> 1 file changed, 26 insertions(+), 20 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index 74240ab895..355a404e04 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -613,20 +613,37 @@ RSYNC_VCS_EXCLUSIONS = \
> --exclude .svn --exclude .git --exclude .hg --exclude .bzr \
> --exclude CVS
>
> -STRIP_FIND_CMD = find $(TARGET_DIR)
> -ifneq (,$(call qstrip,$(BR2_STRIP_EXCLUDE_DIRS)))
> -STRIP_FIND_CMD += \( $(call finddirclauses,$(TARGET_DIR),$(call qstrip,$(BR2_STRIP_EXCLUDE_DIRS))) \) -prune -o
> -endif
> -STRIP_FIND_CMD += -type f \( -perm /111 -o -name '*.so*' \)
> -# file exclusions:
> +# When stripping, obey to BR2_STRIP_EXCLUDE_DIRS and
> +# BR2_STRIP_EXCLUDE_FILES
> +STRIP_FIND_COMMON_CMD = \
> + find $(TARGET_DIR) \
> + $(if $(call qstrip,$(BR2_STRIP_EXCLUDE_DIRS)), \
> + \( $(call finddirclauses,$(TARGET_DIR),$(call qstrip,$(BR2_STRIP_EXCLUDE_DIRS))) \) \
> + -prune -o \
> + ) \
> + $(if $(call qstrip,$(BR2_STRIP_EXCLUDE_FILES)), \
> + -not \( $(call findfileclauses,$(call qstrip,$(BR2_STRIP_EXCLUDE_FILES))) \) )
> +
> +# Regular stripping for everything, except libpthread, ld-*.so and
> +# kernel modules:
> # - libpthread.so: a non-stripped libpthread shared library is needed for
> # proper debugging of pthread programs using gdb.
> # - ld.so: a non-stripped dynamic linker library is needed for valgrind
> # - kernel modules (*.ko): do not function properly when stripped like normal
> # applications and libraries. Normally kernel modules are already excluded
> -# by the executable permission check above, so the explicit exclusion is only
> +# by the executable permission check, so the explicit exclusion is only
> # 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
> +STRIP_FIND_CMD = \
> + $(STRIP_FIND_COMMON_CMD) \
> + -type f \( -perm /111 -o -name '*.so*' \) \
> + -not \( $(call findfileclauses,libpthread*.so* ld-*.so* *.ko) \) \
> + -print0
> +
> +# Special stripping (only debugging symbols) for libpthread and ld-*.so.
> +STRIP_FIND_SPECIAL_LIBS_CMD = \
> + $(STRIP_FIND_COMMON_CMD) \
> + \( -name 'ld-*.so*' -o -name 'libpthread*.so*' \) \
The answer to you question about needing to strip libpthread for only
glibc is true. I did poke around a bit and checked if libthread_db
needed symbols and verified it can be stripped. Do you think a noted
should be added to state the libpthread stripping detail?
Matt
More information about the buildroot
mailing list