diff mbox series

[v2,1/1] package/supertux: fix build with RELRO

Message ID 20200914203329.3432074-1-fontaine.fabrice@gmail.com
State Accepted
Headers show
Series [v2,1/1] package/supertux: fix build with RELRO | expand

Commit Message

Fabrice Fontaine Sept. 14, 2020, 8:33 p.m. UTC
Disable static building of external/squirrel to fix the following build
failure with RELRO:

/home/peko/autobuild/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/x86_64-buildroot-linux-musl/8.3.0/../../../../x86_64-buildroot-linux-musl/bin/ld: CMakeFiles/sq_static.dir/sq.c.o: relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a PIE object; recompile with -fPIC
/home/peko/autobuild/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/x86_64-buildroot-linux-musl/8.3.0/../../../../x86_64-buildroot-linux-musl/bin/ld: final link failed: nonrepresentable section on output
collect2: error: ld returned 1 exit status

Fixes:
 - http://autobuild.buildroot.org/results/46e8f5e622ce450a89bc6d70f4bfd38182557901
 - http://autobuild.buildroot.org/results/a43720492d817e4555d728546da9114e3ccba952

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
---
Changes v1 -> v2 (after review of Thomas Petazzoni):
 - Disable static building of external/squirrel instead of adding -fPIC

 ...ass-DISABLE_STATIC-to-external-squir.patch | 52 +++++++++++++++++++
 1 file changed, 52 insertions(+)
 create mode 100644 package/supertux/0001-CMakeLists.txt-pass-DISABLE_STATIC-to-external-squir.patch

Comments

Thomas Petazzoni Sept. 19, 2020, 7:15 p.m. UTC | #1
On Mon, 14 Sep 2020 22:33:29 +0200
Fabrice Fontaine <fontaine.fabrice@gmail.com> wrote:

> Disable static building of external/squirrel to fix the following build
> failure with RELRO:
> 
> /home/peko/autobuild/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/x86_64-buildroot-linux-musl/8.3.0/../../../../x86_64-buildroot-linux-musl/bin/ld: CMakeFiles/sq_static.dir/sq.c.o: relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a PIE object; recompile with -fPIC
> /home/peko/autobuild/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/x86_64-buildroot-linux-musl/8.3.0/../../../../x86_64-buildroot-linux-musl/bin/ld: final link failed: nonrepresentable section on output
> collect2: error: ld returned 1 exit status
> 
> Fixes:
>  - http://autobuild.buildroot.org/results/46e8f5e622ce450a89bc6d70f4bfd38182557901
>  - http://autobuild.buildroot.org/results/a43720492d817e4555d728546da9114e3ccba952
> 
> Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
> ---
> Changes v1 -> v2 (after review of Thomas Petazzoni):
>  - Disable static building of external/squirrel instead of adding -fPIC

Applied to master, thanks. Could you discuss this with upstream? I'm
not sure they will accept the patch as-is, but perhaps they will
suggest some more elaborate solution ?

Thanks!

Thomas
Peter Korsgaard Sept. 29, 2020, 1:45 p.m. UTC | #2
>>>>> "Fabrice" == Fabrice Fontaine <fontaine.fabrice@gmail.com> writes:

 > Disable static building of external/squirrel to fix the following build
 > failure with RELRO:

 > /home/peko/autobuild/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/x86_64-buildroot-linux-musl/8.3.0/../../../../x86_64-buildroot-linux-musl/bin/ld:
 > CMakeFiles/sq_static.dir/sq.c.o: relocation R_X86_64_32 against
 > `.rodata.str1.8' can not be used when making a PIE object; recompile
 > with -fPIC
 > /home/peko/autobuild/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/x86_64-buildroot-linux-musl/8.3.0/../../../../x86_64-buildroot-linux-musl/bin/ld:
 > final link failed: nonrepresentable section on output
 > collect2: error: ld returned 1 exit status

 > Fixes:
 >  - http://autobuild.buildroot.org/results/46e8f5e622ce450a89bc6d70f4bfd38182557901
 >  - http://autobuild.buildroot.org/results/a43720492d817e4555d728546da9114e3ccba952

 > Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
 > ---
 > Changes v1 -> v2 (after review of Thomas Petazzoni):
 >  - Disable static building of external/squirrel instead of adding -fPIC

Committed to 2020.02.x, 2020.05.x and 2020.08.x, thanks.
Romain Naour Oct. 3, 2020, 7:40 p.m. UTC | #3
Hello Fabrice,

Le 29/09/2020 à 15:45, Peter Korsgaard a écrit :
>>>>>> "Fabrice" == Fabrice Fontaine <fontaine.fabrice@gmail.com> writes:
> 
>  > Disable static building of external/squirrel to fix the following build
>  > failure with RELRO:
> 
>  > /home/peko/autobuild/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/x86_64-buildroot-linux-musl/8.3.0/../../../../x86_64-buildroot-linux-musl/bin/ld:
>  > CMakeFiles/sq_static.dir/sq.c.o: relocation R_X86_64_32 against
>  > `.rodata.str1.8' can not be used when making a PIE object; recompile
>  > with -fPIC
>  > /home/peko/autobuild/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/x86_64-buildroot-linux-musl/8.3.0/../../../../x86_64-buildroot-linux-musl/bin/ld:
>  > final link failed: nonrepresentable section on output
>  > collect2: error: ld returned 1 exit status
> 
>  > Fixes:
>  >  - http://autobuild.buildroot.org/results/46e8f5e622ce450a89bc6d70f4bfd38182557901
>  >  - http://autobuild.buildroot.org/results/a43720492d817e4555d728546da9114e3ccba952
> 
>  > Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
>  > ---
>  > Changes v1 -> v2 (after review of Thomas Petazzoni):
>  >  - Disable static building of external/squirrel instead of adding -fPIC
> 
> Committed to 2020.02.x, 2020.05.x and 2020.08.x, thanks.
> 

This patch break supertux because libsquirrel.so.0 and libsqstdlib.so.0 are
missing in TARGET_DIR.

I believe, such bundled libraries are meant to be linked statically into supertux.

We need to revert this patch.

Best regards,
Romain
Fabrice Fontaine Oct. 3, 2020, 7:52 p.m. UTC | #4
Hello Romain,

Le sam. 3 oct. 2020 à 21:40, Romain Naour <romain.naour@gmail.com> a écrit :
>
> Hello Fabrice,
>
> Le 29/09/2020 à 15:45, Peter Korsgaard a écrit :
> >>>>>> "Fabrice" == Fabrice Fontaine <fontaine.fabrice@gmail.com> writes:
> >
> >  > Disable static building of external/squirrel to fix the following build
> >  > failure with RELRO:
> >
> >  > /home/peko/autobuild/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/x86_64-buildroot-linux-musl/8.3.0/../../../../x86_64-buildroot-linux-musl/bin/ld:
> >  > CMakeFiles/sq_static.dir/sq.c.o: relocation R_X86_64_32 against
> >  > `.rodata.str1.8' can not be used when making a PIE object; recompile
> >  > with -fPIC
> >  > /home/peko/autobuild/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/x86_64-buildroot-linux-musl/8.3.0/../../../../x86_64-buildroot-linux-musl/bin/ld:
> >  > final link failed: nonrepresentable section on output
> >  > collect2: error: ld returned 1 exit status
> >
> >  > Fixes:
> >  >  - http://autobuild.buildroot.org/results/46e8f5e622ce450a89bc6d70f4bfd38182557901
> >  >  - http://autobuild.buildroot.org/results/a43720492d817e4555d728546da9114e3ccba952
> >
> >  > Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
> >  > ---
> >  > Changes v1 -> v2 (after review of Thomas Petazzoni):
> >  >  - Disable static building of external/squirrel instead of adding -fPIC
> >
> > Committed to 2020.02.x, 2020.05.x and 2020.08.x, thanks.
> >
>
> This patch break supertux because libsquirrel.so.0 and libsqstdlib.so.0 are
> missing in TARGET_DIR.
>
> I believe, such bundled libraries are meant to be linked statically into supertux.
>
> We need to revert this patch.
Understood, I'll revert this patch.
I opened an issue upstream: https://github.com/SuperTux/supertux/issues/1536
One option would be to disable building of sq binary (but I don't know
yet if it is upstreamable).
>
> Best regards,
> Romain
Best Regards,

Fabrice
Romain Naour Oct. 3, 2020, 8:02 p.m. UTC | #5
Hello Fabrice,

Le 03/10/2020 à 21:52, Fabrice Fontaine a écrit :
> Hello Romain,
> 
> Le sam. 3 oct. 2020 à 21:40, Romain Naour <romain.naour@gmail.com> a écrit :
>>
>> Hello Fabrice,
>>
>> Le 29/09/2020 à 15:45, Peter Korsgaard a écrit :
>>>>>>>> "Fabrice" == Fabrice Fontaine <fontaine.fabrice@gmail.com> writes:
>>>
>>>  > Disable static building of external/squirrel to fix the following build
>>>  > failure with RELRO:
>>>
>>>  > /home/peko/autobuild/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/x86_64-buildroot-linux-musl/8.3.0/../../../../x86_64-buildroot-linux-musl/bin/ld:
>>>  > CMakeFiles/sq_static.dir/sq.c.o: relocation R_X86_64_32 against
>>>  > `.rodata.str1.8' can not be used when making a PIE object; recompile
>>>  > with -fPIC
>>>  > /home/peko/autobuild/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/x86_64-buildroot-linux-musl/8.3.0/../../../../x86_64-buildroot-linux-musl/bin/ld:
>>>  > final link failed: nonrepresentable section on output
>>>  > collect2: error: ld returned 1 exit status
>>>
>>>  > Fixes:
>>>  >  - http://autobuild.buildroot.org/results/46e8f5e622ce450a89bc6d70f4bfd38182557901
>>>  >  - http://autobuild.buildroot.org/results/a43720492d817e4555d728546da9114e3ccba952
>>>
>>>  > Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
>>>  > ---
>>>  > Changes v1 -> v2 (after review of Thomas Petazzoni):
>>>  >  - Disable static building of external/squirrel instead of adding -fPIC
>>>
>>> Committed to 2020.02.x, 2020.05.x and 2020.08.x, thanks.
>>>
>>
>> This patch break supertux because libsquirrel.so.0 and libsqstdlib.so.0 are
>> missing in TARGET_DIR.
>>
>> I believe, such bundled libraries are meant to be linked statically into supertux.
>>
>> We need to revert this patch.
> Understood, I'll revert this patch.
> I opened an issue upstream: https://github.com/SuperTux/supertux/issues/1536
> One option would be to disable building of sq binary (but I don't know
> yet if it is upstreamable).

Sorry, I haven't looked how to fix the initial issue yet.

But it seems that some bundled libraries are built as a shared libraries:
[ 70%] Linking CXX shared library libsquirrel.so

We need to force CMake to build them as static libraries.

This fix is not good, but thank you for all other issues you fixed in Buildroot :)

Best regards,
Romain


>>
>> Best regards,
>> Romain
> Best Regards,
> 
> Fabrice
>
diff mbox series

Patch

diff --git a/package/supertux/0001-CMakeLists.txt-pass-DISABLE_STATIC-to-external-squir.patch b/package/supertux/0001-CMakeLists.txt-pass-DISABLE_STATIC-to-external-squir.patch
new file mode 100644
index 0000000000..43652d0906
--- /dev/null
+++ b/package/supertux/0001-CMakeLists.txt-pass-DISABLE_STATIC-to-external-squir.patch
@@ -0,0 +1,52 @@ 
+From 95590485d7cd95611eeac1fc06226d45f235c63a Mon Sep 17 00:00:00 2001
+From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
+Date: Sun, 13 Sep 2020 22:09:49 +0200
+Subject: [PATCH] CMakeLists.txt: pass DISABLE_STATIC to external/squirrel
+
+external/squirrel will always build a static binary and library except
+if DISABLE_STATIC is defined so define it to avoid the following build
+failure with RELRO_FULL:
+
+/home/peko/autobuild/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/x86_64-buildroot-linux-musl/8.3.0/../../../../x86_64-buildroot-linux-musl/bin/ld: CMakeFiles/sq_static.dir/sq.c.o: relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a PIE object; recompile with -fPIC
+/home/peko/autobuild/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/x86_64-buildroot-linux-musl/8.3.0/../../../../x86_64-buildroot-linux-musl/bin/ld: final link failed: nonrepresentable section on output
+collect2: error: ld returned 1 exit status
+
+Fixes:
+ - http://autobuild.buildroot.org/results/46e8f5e622ce450a89bc6d70f4bfd38182557901
+ - http://autobuild.buildroot.org/results/a43720492d817e4555d728546da9114e3ccba952
+
+Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
+---
+ CMakeLists.txt | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 1ae0d653b..bb4358b01 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -411,6 +411,7 @@ ExternalProject_Add(squirrel
+   -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
+   -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
+   -DCMAKE_INSTALL_PREFIX=${SQUIRREL_PREFIX}
++  -DDISABLE_STATIC=ON
+   -DINSTALL_INC_DIR=include)
+ 
+ if(WIN32)
+@@ -424,10 +425,10 @@ if(WIN32)
+   #For debug run purposes
+   configure_file("${CMAKE_CURRENT_SOURCE_DIR}/mk/msvc/run_supertux.bat.in" "${PROJECT_BINARY_DIR}/run_supertux.bat")
+ else()
+-  add_library(squirrel_lib STATIC IMPORTED)
+-  set_target_properties(squirrel_lib PROPERTIES IMPORTED_LOCATION "${SQUIRREL_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}squirrel_static${CMAKE_STATIC_LIBRARY_SUFFIX}")
+-  add_library(sqstdlib_lib STATIC IMPORTED)
+-  set_target_properties(sqstdlib_lib PROPERTIES IMPORTED_LOCATION "${SQUIRREL_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}sqstdlib_static${CMAKE_STATIC_LIBRARY_SUFFIX}")
++  add_library(squirrel_lib SHARED IMPORTED)
++  set_target_properties(squirrel_lib PROPERTIES IMPORTED_LOCATION "${SQUIRREL_PREFIX}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}squirrel${CMAKE_SHARED_LIBRARY_SUFFIX}")
++  add_library(sqstdlib_lib SHARED IMPORTED)
++  set_target_properties(sqstdlib_lib PROPERTIES IMPORTED_LOCATION "${SQUIRREL_PREFIX}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}sqstdlib${CMAKE_SHARED_LIBRARY_SUFFIX}")
+ endif()
+ 
+ include_directories(SYSTEM ${SQUIRREL_PREFIX}/include)
+-- 
+2.28.0
+