diff --git a/chrpath-fix-mips-segfault.patch b/chrpath-fix-mips-segfault.patch new file mode 100644 index 0000000000000000000000000000000000000000..c9239b71b4b47081c92644567b2654a318db645e --- /dev/null +++ b/chrpath-fix-mips-segfault.patch @@ -0,0 +1,31 @@ +--- chrpath-0.18.orig/killrpath.c ++++ chrpath-0.18/killrpath.c +@@ -78,10 +78,26 @@ + dynpos = 0; + for (i = 0; DYNSS(i, d_tag) != DT_NULL; i++) + { +- if (is_e32()) ++ if (is_e32()) { + ((Elf32_Dyn *)dyns)[dynpos] = ((Elf32_Dyn *)dyns)[i]; +- else ++#ifdef DT_MIPS_RLD_MAP_REL ++ /* DT_MIPS_RLD_MAP_REL is relative to the offset of the tag. ++ Adjust it consequently. */ ++ if (DYNSS(i, d_tag) == DT_MIPS_RLD_MAP_REL) ++ ((Elf32_Dyn *)dyns)[dynpos].d_un.d_val = ++ DO_SWAPU32(DYNSU(i, d_un.d_val) + ++ (i - dynpos) * sizeof(Elf32_Dyn)); ++#endif ++ } else { + ((Elf64_Dyn *)dyns)[dynpos] = ((Elf64_Dyn *)dyns)[i]; ++#ifdef DT_MIPS_RLD_MAP_REL ++ /* Ditto */ ++ if (DYNSS(i, d_tag) == DT_MIPS_RLD_MAP_REL) ++ ((Elf64_Dyn *)dyns)[dynpos].d_un.d_val = ++ DO_SWAPU64(DYNSU(i, d_un.d_val) + ++ (i - dynpos) * sizeof(Elf64_Dyn)); ++#endif ++ } + if ( ! elf_dynpath_tag(DYNSS(i, d_tag)) ) + dynpos++; + } diff --git a/chrpath.spec b/chrpath.spec index 63be9934df85bf9b846e0e598b5cc159c9552576..be7b03445627c9e05271e4c504527de9c0e06810 100644 --- a/chrpath.spec +++ b/chrpath.spec @@ -1,10 +1,12 @@ Name: chrpath Version: 0.16 -Release: 13 +Release: 14 Summary: Modify the dynamic library load path (rpath) of compiled programs License: GPL+ URL: https://github.com/openEuler-BaseService/chrpath Source0: https://alioth-archive.debian.org/releases/%{name}/%{name}/%{version}/%{name}-%{version}.tar.gz +# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=820335 +Patch0: chrpath-fix-mips-segfault.patch BuildRequires: gcc @@ -39,6 +41,9 @@ make check %{_mandir}/man1/chrpath.1* %changelog +* Mon Nov 04 2024 Funda Wang - 0.16-14 +- Handle DT_MIPS_RLD_MAP_REL on MIPS (debian bug#820335) + * Tue Oct 25 2022 yanglongkang - 0.16-13 - rebuild for next release