commit: 341fa332fd0514a8697cd229b6086370f927d5df Author: David Seifert <soap <AT> gentoo <DOT> org> AuthorDate: Sat Jul 17 09:27:25 2021 +0000 Commit: David Seifert <soap <AT> gentoo <DOT> org> CommitDate: Sat Jul 17 09:27:25 2021 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=341fa332
media-libs/fdk-aac: Fix failed inlining Closes: https://bugs.gentoo.org/798045 Signed-off-by: David Seifert <soap <AT> gentoo.org> media-libs/fdk-aac/fdk-aac-2.0.2.ebuild | 2 + .../files/fdk-aac-2.0.2-always_inline.patch | 72 ++++++++++++++++++++++ 2 files changed, 74 insertions(+) diff --git a/media-libs/fdk-aac/fdk-aac-2.0.2.ebuild b/media-libs/fdk-aac/fdk-aac-2.0.2.ebuild index b003c4ad8fd..8e0360997fd 100644 --- a/media-libs/fdk-aac/fdk-aac-2.0.2.ebuild +++ b/media-libs/fdk-aac/fdk-aac-2.0.2.ebuild @@ -26,6 +26,8 @@ SLOT="0/2" IUSE="static-libs examples" +PATCHES=( "${FILESDIR}"/${P}-always_inline.patch ) + src_prepare() { default [[ ${PV} == *9999* ]] && eautoreconf diff --git a/media-libs/fdk-aac/files/fdk-aac-2.0.2-always_inline.patch b/media-libs/fdk-aac/files/fdk-aac-2.0.2-always_inline.patch new file mode 100644 index 00000000000..afb2dbe1026 --- /dev/null +++ b/media-libs/fdk-aac/files/fdk-aac-2.0.2-always_inline.patch @@ -0,0 +1,72 @@ +From 7f328b93ee2aa8bb4e94613b6ed218e7525d8dc0 Mon Sep 17 00:00:00 2001 +From: David Seifert <s...@gentoo.org> +Date: Sat, 10 Jul 2021 13:06:57 +0200 +Subject: [PATCH] Do not force inlining of indirect functions + +* A function called indirectly cannot be decorated + with `__attribute((always_inline))`, as this is + guaranteed to only work with direct calls: + https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63220#c1 + +Bug: https://bugs.gentoo.org/798045 +--- + libFDK/include/fft.h | 4 ++-- + libFDK/src/fft.cpp | 6 +++--- + 2 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/libFDK/include/fft.h b/libFDK/include/fft.h +index d394046..4ef62b4 100644 +--- a/libFDK/include/fft.h ++++ b/libFDK/include/fft.h +@@ -139,7 +139,7 @@ void ifft(int length, FIXP_DBL *pInput, INT *scalefactor); + * bit scale headroom. The values are interleaved, real/imag pairs. + */ + LNK_SECTION_CODE_L1 +-static FDK_FORCEINLINE void fft_4(FIXP_DBL *x) { ++static inline void fft_4(FIXP_DBL *x) { + FIXP_DBL a00, a10, a20, a30, tmp0, tmp1; + + a00 = (x[0] + x[4]) >> 1; /* Re A + Re B */ +@@ -168,7 +168,7 @@ static FDK_FORCEINLINE void fft_4(FIXP_DBL *x) { + + #ifndef FUNCTION_fft_8 + LNK_SECTION_CODE_L1 +-static FDK_FORCEINLINE void fft_8(FIXP_DBL *x) { ++static inline void fft_8(FIXP_DBL *x) { + FIXP_SPK w_PiFOURTH = {{FIXP_SGL(0x5A82), FIXP_SGL(0x5A82)}}; + + FIXP_DBL a00, a10, a20, a30; +diff --git a/libFDK/src/fft.cpp b/libFDK/src/fft.cpp +index 4e6fdd2..c9ee784 100644 +--- a/libFDK/src/fft.cpp ++++ b/libFDK/src/fft.cpp +@@ -170,7 +170,7 @@ amm-i...@iis.fraunhofer.de + + /* Performs the FFT of length 2. Input vector unscaled, output vector scaled + * with factor 0.5 */ +-static FDK_FORCEINLINE void fft2(FIXP_DBL *RESTRICT pDat) { ++static inline void fft2(FIXP_DBL *RESTRICT pDat) { + FIXP_DBL r1, i1; + FIXP_DBL r2, i2; + +@@ -196,7 +196,7 @@ static FDK_FORCEINLINE void fft2(FIXP_DBL *RESTRICT pDat) { + + #ifndef FUNCTION_fft3 + /* Performs the FFT of length 3 according to the algorithm after winograd. */ +-static FDK_FORCEINLINE void fft3(FIXP_DBL *RESTRICT pDat) { ++static inline void fft3(FIXP_DBL *RESTRICT pDat) { + FIXP_DBL r1, r2; + FIXP_DBL s1, s2; + FIXP_DBL pD; +@@ -233,7 +233,7 @@ static FDK_FORCEINLINE void fft3(FIXP_DBL *RESTRICT pDat) { + + /* performs the FFT of length 5 according to the algorithm after winograd */ + /* This version works with a prescale of 2 instead of 3 */ +-static FDK_FORCEINLINE void fft5(FIXP_DBL *RESTRICT pDat) { ++static inline void fft5(FIXP_DBL *RESTRICT pDat) { + FIXP_DBL r1, r2, r3, r4; + FIXP_DBL s1, s2, s3, s4; + FIXP_DBL t; +-- +2.32.0 +