forked from rpms/glibc
Enable power10 multilib
* Mon Dec 12 2022 Tulio Magno Quites Machado Filho <tuliom@redhat.com> - 2.34-56 - Enable power10 multilib (#1870019) Resolves: #1870019
This commit is contained in:
parent
e8ace71c20
commit
78832d4e7a
46
glibc.spec
46
glibc.spec
@ -69,6 +69,13 @@
|
|||||||
%undefine with_valgrind
|
%undefine with_valgrind
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
# Build the POWER10 runtime on POWER, but only for downstream.
|
||||||
|
%ifarch ppc64le
|
||||||
|
%define buildpower10 0%{?rhel} > 0
|
||||||
|
%else
|
||||||
|
%define buildpower10 0
|
||||||
|
%endif
|
||||||
|
|
||||||
# The annobin annotations cause binutils to produce broken ARM EABI
|
# The annobin annotations cause binutils to produce broken ARM EABI
|
||||||
# unwinding information. Symptom is a hang/test failure for
|
# unwinding information. Symptom is a hang/test failure for
|
||||||
# malloc/tst-malloc-stats-cancellation. See
|
# malloc/tst-malloc-stats-cancellation. See
|
||||||
@ -148,7 +155,7 @@ end \
|
|||||||
Summary: The GNU libc libraries
|
Summary: The GNU libc libraries
|
||||||
Name: glibc
|
Name: glibc
|
||||||
Version: %{glibcversion}
|
Version: %{glibcversion}
|
||||||
Release: 55%{?dist}
|
Release: 56%{?dist}
|
||||||
|
|
||||||
# In general, GPLv2+ is used by programs, LGPLv2+ is used for
|
# In general, GPLv2+ is used by programs, LGPLv2+ is used for
|
||||||
# libraries.
|
# libraries.
|
||||||
@ -1688,6 +1695,15 @@ build()
|
|||||||
# Default set of compiler options.
|
# Default set of compiler options.
|
||||||
build
|
build
|
||||||
|
|
||||||
|
%if %{buildpower10}
|
||||||
|
(
|
||||||
|
GCC="$GCC -mcpu=power10 -mtune=power10"
|
||||||
|
GXX="$GXX -mcpu=power10 -mtune=power10"
|
||||||
|
core_with_options="--with-cpu=power10"
|
||||||
|
build power10
|
||||||
|
)
|
||||||
|
%endif
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Install glibc...
|
# Install glibc...
|
||||||
##############################################################################
|
##############################################################################
|
||||||
@ -1755,23 +1771,27 @@ install_different()
|
|||||||
mkdir -p "$destdir"
|
mkdir -p "$destdir"
|
||||||
mkdir -p "$libdestdir"
|
mkdir -p "$libdestdir"
|
||||||
# Walk all of the libraries we installed...
|
# Walk all of the libraries we installed...
|
||||||
for lib in libc math/libm nptl/libpthread rt/librt nptl_db/libthread_db
|
for lib in libc math/libm
|
||||||
do
|
do
|
||||||
libbase=${lib#*/}
|
libbase=${lib#*/}
|
||||||
# Take care that `libbaseso' has a * that needs expanding so
|
# Take care that `libbaseso' has a * that needs expanding so
|
||||||
# take care with quoting.
|
# take care with quoting.
|
||||||
libbaseso=$(basename %{glibc_sysroot}/%{_lib}/${libbase}-*.so)
|
libbaseso=$(basename %{glibc_sysroot}/%{_lib}/${libbase}.so.*)
|
||||||
# Only install if different from default build library.
|
# Only install if different from default build library.
|
||||||
if cmp -s ${lib}.so ../build-%{target}/${lib}.so; then
|
if cmp -s ${lib}.so ../build-%{target}/${lib}.so; then
|
||||||
ln -sf "$subdir_up"/$libbaseso $libdestdir/$libbaseso
|
ln -sf "$subdir_up"/$libbaseso $libdestdir/$libbaseso
|
||||||
else
|
else
|
||||||
cp -a ${lib}.so $libdestdir/$libbaseso
|
cp -a ${lib}.so $libdestdir/$libbaseso
|
||||||
fi
|
fi
|
||||||
dlib=$libdestdir/$(basename %{glibc_sysroot}/%{_lib}/${libbase}.so.*)
|
|
||||||
ln -sf $libbaseso $dlib
|
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
%if %{buildpower10}
|
||||||
|
pushd build-%{target}-power10
|
||||||
|
install_different "$RPM_BUILD_ROOT/%{_libdir}/glibc-hwcaps" power10 ..
|
||||||
|
popd
|
||||||
|
%endif
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Remove the files we don't want to distribute
|
# Remove the files we don't want to distribute
|
||||||
##############################################################################
|
##############################################################################
|
||||||
@ -2466,6 +2486,16 @@ pushd build-%{target}
|
|||||||
run_tests
|
run_tests
|
||||||
popd
|
popd
|
||||||
|
|
||||||
|
%if %{buildpower10}
|
||||||
|
# Run this test only if the server supports Power10 instructions.
|
||||||
|
if LD_SHOW_AUXV=1 /bin/true | grep -E "AT_HWCAP2:[^$]*arch_3_1" > /dev/null; then
|
||||||
|
echo ====================TESTING -mcpu=power10=============
|
||||||
|
pushd build-%{target}-power10
|
||||||
|
run_tests
|
||||||
|
popd
|
||||||
|
fi
|
||||||
|
%endif
|
||||||
|
|
||||||
echo ====================TESTING END=====================
|
echo ====================TESTING END=====================
|
||||||
PLTCMD='/^Relocation section .*\(\.rela\?\.plt\|\.rela\.IA_64\.pltoff\)/,/^$/p'
|
PLTCMD='/^Relocation section .*\(\.rela\?\.plt\|\.rela\.IA_64\.pltoff\)/,/^$/p'
|
||||||
echo ====================PLT RELOCS LD.SO================
|
echo ====================PLT RELOCS LD.SO================
|
||||||
@ -2712,6 +2742,9 @@ fi
|
|||||||
|
|
||||||
%files -f glibc.filelist
|
%files -f glibc.filelist
|
||||||
%dir %{_prefix}/%{_lib}/audit
|
%dir %{_prefix}/%{_lib}/audit
|
||||||
|
%if %{buildpower10}
|
||||||
|
%dir /%{_libdir}/glibc-hwcaps/power10
|
||||||
|
%endif
|
||||||
%verify(not md5 size mtime) %config(noreplace) /etc/nsswitch.conf
|
%verify(not md5 size mtime) %config(noreplace) /etc/nsswitch.conf
|
||||||
%verify(not md5 size mtime) %config(noreplace) /etc/ld.so.conf
|
%verify(not md5 size mtime) %config(noreplace) /etc/ld.so.conf
|
||||||
%verify(not md5 size mtime) %config(noreplace) /etc/rpc
|
%verify(not md5 size mtime) %config(noreplace) /etc/rpc
|
||||||
@ -2803,6 +2836,9 @@ fi
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Dec 12 2022 Tulio Magno Quites Machado Filho <tuliom@redhat.com> - 2.34-56
|
||||||
|
- Earlier removal of alternative multilibs (#2149994)
|
||||||
|
|
||||||
* Mon Dec 12 2022 Tulio Magno Quites Machado Filho <tuliom@redhat.com> - 2.34-55
|
* Mon Dec 12 2022 Tulio Magno Quites Machado Filho <tuliom@redhat.com> - 2.34-55
|
||||||
- Earlier removal of alternative multilibs (#2149994)
|
- Earlier removal of alternative multilibs (#2149994)
|
||||||
|
|
||||||
|
@ -18,7 +18,13 @@ set -ex
|
|||||||
workdir="$(mktemp -d -t find_debuginfo.XXXXXX)"
|
workdir="$(mktemp -d -t find_debuginfo.XXXXXX)"
|
||||||
|
|
||||||
ldso_tmp="$workdir/ld.so"
|
ldso_tmp="$workdir/ld.so"
|
||||||
libc_tmp="$workdir/libc.so"
|
libc_tmp_dir="$workdir/"
|
||||||
|
|
||||||
|
# Return the path where a libc should be saved temporarily. This path is
|
||||||
|
# based on its original path received in $1.
|
||||||
|
libc_tmp_path() {
|
||||||
|
echo "$libc_tmp_dir"`dirname "$1"`"/libc.so"
|
||||||
|
}
|
||||||
|
|
||||||
# Prefer a separately installed debugedit over the RPM-integrated one.
|
# Prefer a separately installed debugedit over the RPM-integrated one.
|
||||||
if command -v debugedit >/dev/null ; then
|
if command -v debugedit >/dev/null ; then
|
||||||
@ -50,38 +56,56 @@ for ldso_candidate in `find "$sysroot_path" -maxdepth 2 \
|
|||||||
done
|
done
|
||||||
|
|
||||||
# libc.so.6 always uses this name, so it is simpler to locate.
|
# libc.so.6 always uses this name, so it is simpler to locate.
|
||||||
libc_path=
|
libc_path=`find "$sysroot_path" -name libc.so.6`
|
||||||
for libc_candidate in `find "$sysroot_path" -maxdepth 2 -name libc.so.6`; do
|
|
||||||
if test -z "$libc_path" ; then
|
|
||||||
libc_path="$libc_candidate"
|
|
||||||
else
|
|
||||||
echo "error: multiple libc.so.6 candidates: $libc_path, $libc_candidate"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
|
|
||||||
# Preserve the original files.
|
# Preserve the original files.
|
||||||
cp "$ldso_path" "$ldso_tmp"
|
cp "$ldso_path" "$ldso_tmp"
|
||||||
cp "$libc_path" "$libc_tmp"
|
for lib in $libc_path ; do
|
||||||
|
libtmp=`libc_tmp_path $lib`
|
||||||
|
mkdir -p `dirname "$libtmp"`
|
||||||
|
cp "$lib" "$libtmp"
|
||||||
|
done
|
||||||
|
|
||||||
# Run the debuginfo extraction.
|
# Run the debuginfo extraction.
|
||||||
"$script_path" "$@"
|
"$script_path" "$@"
|
||||||
|
|
||||||
# libc.so.6: Extract the .gnu_debuglink section
|
for lib in $libc_path ; do
|
||||||
objcopy -j.gnu_debuglink --set-section-flags .gnu_debuglink=alloc \
|
libtmp=`libc_tmp_path "$lib"`
|
||||||
-O binary "$libc_path" "$libc_tmp.debuglink"
|
# libc.so.6: Extract the .gnu_debuglink section
|
||||||
|
objcopy -j.gnu_debuglink --set-section-flags .gnu_debuglink=alloc \
|
||||||
|
-O binary "$lib" "$libtmp.debuglink"
|
||||||
|
# Restore the original files.
|
||||||
|
cp "$libtmp" "$lib"
|
||||||
|
|
||||||
# Restore the original files.
|
# Reduce the size of libc notes. Primarily for annobin.
|
||||||
|
objcopy --merge-notes "$lib"
|
||||||
|
|
||||||
|
# libc.so.6: Restore the .gnu_debuglink section
|
||||||
|
objcopy --add-section .gnu_debuglink="$libtmp.debuglink" "$lib"
|
||||||
|
|
||||||
|
# libc.so.6: Reduce to valuable symbols. Eliminate file symbols,
|
||||||
|
# annobin symbols, and symbols used by the glibc build to implement
|
||||||
|
# hidden aliases (__EI_*). We would also like to remove __GI_*
|
||||||
|
# symbols, but even listing them explicitly (as in -K __GI_strlen)
|
||||||
|
# still causes strip to remove them, so there is no filtering of
|
||||||
|
# __GI_* here. (Debuginfo is gone after this, so no need to optimize
|
||||||
|
# it.)
|
||||||
|
strip -w \
|
||||||
|
-K '*' \
|
||||||
|
-K '!*.c' \
|
||||||
|
-K '!*.os' \
|
||||||
|
-K '!.annobin_*' \
|
||||||
|
-K '!__EI_*' \
|
||||||
|
-K '!__PRETTY_FUNCTION__*' \
|
||||||
|
"$lib"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Restore the original ld.so.
|
||||||
cp "$ldso_tmp" "$ldso_path"
|
cp "$ldso_tmp" "$ldso_path"
|
||||||
cp "$libc_tmp" "$libc_path"
|
|
||||||
|
|
||||||
# Reduce the size of notes. Primarily for annobin.
|
# Reduce the size of notes. Primarily for annobin.
|
||||||
objcopy --merge-notes "$ldso_path"
|
objcopy --merge-notes "$ldso_path"
|
||||||
objcopy --merge-notes "$libc_path"
|
|
||||||
|
|
||||||
# libc.so.6: Restore the .gnu_debuglink section
|
|
||||||
objcopy --add-section .gnu_debuglink="$libc_tmp.debuglink" "$libc_path"
|
|
||||||
|
|
||||||
# ld.so does not have separated debuginfo and so the debuginfo file
|
# ld.so does not have separated debuginfo and so the debuginfo file
|
||||||
# generated by find-debuginfo is redundant. Therefore, remove it.
|
# generated by find-debuginfo is redundant. Therefore, remove it.
|
||||||
@ -98,22 +122,6 @@ for ldso_debug_candidate in `find "$sysroot_path" -maxdepth 2 \
|
|||||||
done
|
done
|
||||||
rm -f "$ldso_debug"
|
rm -f "$ldso_debug"
|
||||||
|
|
||||||
# libc.so.6: Reduce to valuable symbols. Eliminate file symbols,
|
|
||||||
# annobin symbols, and symbols used by the glibc build to implement
|
|
||||||
# hidden aliases (__EI_*). We would also like to remove __GI_*
|
|
||||||
# symbols, but even listing them explicitly (as in -K __GI_strlen)
|
|
||||||
# still causes strip to remove them, so there is no filtering of
|
|
||||||
# __GI_* here. (Debuginfo is gone after this, so no need to optimize
|
|
||||||
# it.)
|
|
||||||
strip -w \
|
|
||||||
-K '*' \
|
|
||||||
-K '!*.c' \
|
|
||||||
-K '!*.os' \
|
|
||||||
-K '!.annobin_*' \
|
|
||||||
-K '!__EI_*' \
|
|
||||||
-K '!__PRETTY_FUNCTION__*' \
|
|
||||||
"$libc_path"
|
|
||||||
|
|
||||||
# ld.so: Rewrite the source file paths to match the extracted
|
# ld.so: Rewrite the source file paths to match the extracted
|
||||||
# locations. First compute the arguments for invoking debugedit.
|
# locations. First compute the arguments for invoking debugedit.
|
||||||
# See find-debuginfo.sh.
|
# See find-debuginfo.sh.
|
||||||
|
Loading…
Reference in New Issue
Block a user