blob: bc2fa79cf08be6bc4d93aea1126e6e61ec4ae7c6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
#!/bin/bash
# Copyright 1999-2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$
source "${PORTAGE_BIN_PATH:-/usr/lib/portage/bin}"/isolated-functions.sh
banner=false
SKIP_STRIP=false
if hasq nostrip ${FEATURES} || \
hasq strip ${RESTRICT}
then
SKIP_STRIP=true
banner=true
hasq installsources ${FEATURES} || exit 0
fi
STRIP=${STRIP:-${CHOST}-strip}
type -P -- ${STRIP} > /dev/null || STRIP=strip
OBJCOPY=${OBJCOPY:-${CHOST}-objcopy}
type -P -- ${OBJCOPY} > /dev/null || OBJCOPY=objcopy
# We'll leave out -R .note for now until we can check out the relevance
# of the section when it has the ALLOC flag set on it ...
export SAFE_STRIP_FLAGS="--strip-unneeded"
export PORTAGE_STRIP_FLAGS=${PORTAGE_STRIP_FLAGS-${SAFE_STRIP_FLAGS} -R .comment}
if hasq installsources ${FEATURES} && ! type -P debugedit >/dev/null ; then
ewarn "FEATURES=installsources is enabled but the debugedit binary could not"
ewarn "be found. This feature will not work unless debugedit is installed!"
fi
save_elf_sources() {
hasq installsources ${FEATURES} || return 0
hasq installsources ${RESTRICT} && return 0
type -P debugedit >/dev/null || return 0
local x=$1
local sources_dir=/usr/src/debug/${CATEGORY}/${PF}
debugedit -b "${WORKDIR}" -d "${sources_dir}" \
-l "${T}"/debug.sources "${x}"
if [[ -s ${T}/debug.sources ]] ; then
[[ -d ${D}${sources_dir} ]] || mkdir -p "${D}${sources_dir}"
grep -zv '/<built-in>$' "${T}"/debug.sources | \
(cd "${WORKDIR}"; LANG=C sort -z -u | \
rsync -rtL0 --files-from=- "${WORKDIR}/" "${D}${sources_dir}/" )
fi
}
save_elf_debug() {
hasq splitdebug ${FEATURES} || return 0
local x=$1
local y="${D}usr/lib/debug/${x:${#D}}.debug"
# dont save debug info twice
[[ ${x} == *".debug" ]] && return 0
mkdir -p $(dirname "${y}")
${OBJCOPY} --only-keep-debug "${x}" "${y}"
${OBJCOPY} --add-gnu-debuglink="${y}" "${x}"
[[ -g ${x} ]] && chmod go-r "${y}"
[[ -u ${x} ]] && chmod go-r "${y}"
chmod a-x,o-w "${y}"
}
# The existance of the section .symtab tells us that a binary is stripped.
# We want to log already stripped binaries, as this may be a QA violation.
# They prevent us from getting the splitdebug data.
if ! hasq binchecks ${RESTRICT} && \
! hasq strip ${RESTRICT} ; then
f=$(scanelf -yqRBF '#k%F' -k '!.symtab' "$@")
if [[ -n ${f} ]] ; then
vecho -e "\a\n"
eqawarn "QA Notice: Pre-stripped files found:"
eqawarn "${f}"
echo "${f}" > "${T}"/scanelf-already-stripped.log
fi
fi
# Now we look for unstripped binaries.
for x in \
$(scanelf -yqRBF '#k%F' -k '.symtab' "$@") \
$(find "$@" -type f -name '*.a')
do
if ! ${banner} ; then
vecho "strip: ${STRIP} ${PORTAGE_STRIP_FLAGS}"
banner=true
fi
f=$(file "${x}") || continue
[[ -z ${f} ]] && continue
if ! ${SKIP_STRIP} ; then
# The noglob funk is to support STRIP_MASK="/*/booga" and to keep
# the for loop from expanding the globs.
# The eval echo is to support STRIP_MASK="/*/{booga,bar}" sex.
set -o noglob
strip_this=true
for m in $(eval echo ${STRIP_MASK}) ; do
[[ ${x} == ${m} ]] && strip_this=false && break
done
set +o noglob
else
strip_this=false
fi
# only split debug info for final linked objects
# or kernel modules as debuginfo for intermediatary
# files (think crt*.o from gcc/glibc) is useless and
# actually causes problems. install sources for all
# elf types though cause that stuff is good.
if [[ ${f} == *"current ar archive"* ]] ; then
vecho " ${x:${#D}}"
if ${strip_this} ; then
# hmm, can we split debug/sources for .a ?
${STRIP} -g "${x}"
fi
elif [[ ${f} == *"SB executable"* || ${f} == *"SB shared object"* ]] ; then
vecho " ${x:${#D}}"
save_elf_sources "${x}"
if ${strip_this} ; then
save_elf_debug "${x}"
${STRIP} ${PORTAGE_STRIP_FLAGS} "${x}"
fi
elif [[ ${f} == *"SB relocatable"* ]] ; then
vecho " ${x:${#D}}"
save_elf_sources "${x}"
if ${strip_this} ; then
[[ ${x} == *.ko ]] && save_elf_debug "${x}"
${STRIP} ${SAFE_STRIP_FLAGS} "${x}"
fi
fi
done
|