Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 19 Oct 2015 17:04:33 +0000 (UTC)
From:      Bryan Drewery <bdrewery@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r399701 - head/Mk/Scripts
Message-ID:  <201510191704.t9JH4X8Q065065@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: bdrewery
Date: Mon Oct 19 17:04:33 2015
New Revision: 399701
URL: https://svnweb.freebsd.org/changeset/ports/399701

Log:
  Add some work-in-progress scripts for splitting symbols out into PREFIX/lib/debug.
  
  This is only missing the bsd.port.mk pieces to hook it up fully.  A blocker
  for hooking that up has been sub-packages, even though some implementation
  could be made without them.  For now just commit what I have so it is not
  forgotten.
  
  Obtained from:	OneFS
  Sponsored by:	EMC / Isilon Storage Division
  With hat:	portmgr

Added:
  head/Mk/Scripts/generate-symbols.sh   (contents, props changed)
Modified:
  head/Mk/Scripts/check-stagedir.sh

Modified: head/Mk/Scripts/check-stagedir.sh
==============================================================================
--- head/Mk/Scripts/check-stagedir.sh	Mon Oct 19 17:04:02 2015	(r399700)
+++ head/Mk/Scripts/check-stagedir.sh	Mon Oct 19 17:04:33 2015	(r399701)
@@ -93,13 +93,15 @@ setup_plist_seds() {
 	unset PLIST_SUB_SED
 	# Used for generate_plist
 	sed_files_gen="s!^${PREFIX}/!!g; ${sed_plist_sub} \
-	    ${sed_portdocsexamples} /^share\/licenses/d;"
+	    ${sed_portdocsexamples} /^share\/licenses/d; \
+	    \#${LOCALBASE}/lib/debug#d;"
 	sed_dirs_gen="s!^${PREFIX}/!!g; ${sed_plist_sub} s,^,@dir ,; \
 	    ${sed_portdocsexamples} \
 	    /^@dir share\/licenses/d;"
 
 	# These prevent ignoring DOCS/EXAMPLES dirs with sed_portdocsexamples
-	sed_files="s!^${PREFIX}/!!g; ${sed_plist_sub} /^share\/licenses/d;"
+	sed_files="s!^${PREFIX}/!!g; ${sed_plist_sub} /^share\/licenses/d; \
+	    \#${LOCALBASE}/lib/debug#d;"
 	sed_dirs="s!^${PREFIX}/!!g; ${sed_plist_sub} s,^,@dir ,; \
 	    /^@dir share\/licenses/d;"
 

Added: head/Mk/Scripts/generate-symbols.sh
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/Mk/Scripts/generate-symbols.sh	Mon Oct 19 17:04:33 2015	(r399701)
@@ -0,0 +1,46 @@
+#! /bin/sh
+# $FreeBSD$
+# Maintainer: portmgr@FreeBSD.org
+
+msg() {
+        echo "====> $@"
+}
+
+msg "Finding symbols"
+
+# Find all ELF files, strip them, and move symbols to PREFIX/usr/lib/debug/ORIG_PATH
+ELF_FILES=$(mktemp -t elf_files)
+LF=$(printf '\nX')
+LF=${LF%X}
+find ${STAGEDIR} -type f \
+    -exec /usr/bin/file -nNF "${LF}" {} + | while read f; do
+	read output
+	case "${output}" in
+	ELF\ *\ executable,\ *FreeBSD*,\ not\ stripped*|\
+	ELF\ *\ shared\ object,\ *FreeBSD*,\ not\ stripped*)
+		echo "${f}"
+		;;
+	esac
+done > ${ELF_FILES}
+
+# Create all of the /usr/local/lib/* dirs
+lib_dir="${STAGEDIR}.debug${PREFIX}/lib/debug"
+sed -e "s,^${STAGEDIR}${PREFIX}/,${lib_dir}/," -e 's,/[^/]*$,,' \
+    ${ELF_FILES} | sort -u | xargs mkdir -p
+
+while read staged_elf_file; do
+	elf_file_name="${staged_elf_file##*/}"
+	lib_dir_dest="${lib_dir}/${staged_elf_file#${STAGEDIR}${PREFIX}/}"
+	# Strip off filename
+	lib_dir_dest="${lib_dir_dest%/*}"
+	# Save symbols to f.debug
+	objcopy --only-keep-debug "${staged_elf_file}" \
+	    "${lib_dir_dest}/${elf_file_name}.debug"
+	# Strip and add a reference to f.debug for finding the symbols.
+	objcopy --strip-debug --strip-unneeded \
+	    --add-gnu-debuglink="${lib_dir_dest}/${elf_file_name}.debug" \
+	    "${staged_elf_file}"
+	msg "Saved symbols for ${staged_elf_file}"
+done < ${ELF_FILES}
+
+rm -f ${ELF_FILES}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201510191704.t9JH4X8Q065065>