public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] gcc: Use ld -r when checking for HAVE_LD_RO_RW_SECTION_MIXING
@ 2022-11-28 13:59 Joakim Nohlgård
  2022-11-28 16:53 ` Jeff Law
  0 siblings, 1 reply; 3+ messages in thread
From: Joakim Nohlgård @ 2022-11-28 13:59 UTC (permalink / raw)
  To: gcc-patches; +Cc: Joakim Nohlgård

The check for HAVE_LD_RO_RW_SECTION_MIXING fails on targets where ld
does not support shared objects, even though the answer to the test
should be 'read-write'. One such target is riscv64-unknown-elf. Failing
this test results in a libgcc crtbegin.o which has a writable .eh_frame
section leading to the default linker scripts placing the .eh_frame
section in a writable memory segment, or a linker warning about writable
sections in a read-only segment when using ld scripts that place
.eh_frame unconditionally in ROM.

gcc/ChangeLog:

	* configure: Regenerate.
	* configure.ac: Use ld -r in the check for HAVE_LD_RO_RW_SECTION_MIXING

Signed-off-by: Joakim Nohlgård <joakim@nohlgard.se>
---
 gcc/configure.ac | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gcc/configure.ac b/gcc/configure.ac
index 7c55bff6cb0..4f36ed4aff3 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -3153,9 +3153,9 @@ elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x -a x$gcc_cv_objdump != x ; then
   if $gcc_cv_as -o conftest1.o conftest1.s > /dev/null 2>&1 \
      && $gcc_cv_as -o conftest2.o conftest2.s > /dev/null 2>&1 \
      && $gcc_cv_as -o conftest3.o conftest3.s > /dev/null 2>&1 \
-     && $gcc_cv_ld -shared -o conftest1.so conftest1.o \
+     && $gcc_cv_ld -r -o conftest.o conftest1.o \
 	conftest2.o conftest3.o > /dev/null 2>&1; then
-    gcc_cv_ld_ro_rw_mix=`$gcc_cv_objdump -h conftest1.so \
+    gcc_cv_ld_ro_rw_mix=`$gcc_cv_objdump -h conftest.o \
 			 | sed -e '/myfoosect/!d' -e N`
     if echo "$gcc_cv_ld_ro_rw_mix" | grep CONTENTS > /dev/null; then
       if echo "$gcc_cv_ld_ro_rw_mix" | grep READONLY > /dev/null; then
-- 
2.38.1


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] gcc: Use ld -r when checking for HAVE_LD_RO_RW_SECTION_MIXING
  2022-11-28 13:59 [PATCH] gcc: Use ld -r when checking for HAVE_LD_RO_RW_SECTION_MIXING Joakim Nohlgård
@ 2022-11-28 16:53 ` Jeff Law
  2022-12-05 13:46   ` Joakim Nohlgård
  0 siblings, 1 reply; 3+ messages in thread
From: Jeff Law @ 2022-11-28 16:53 UTC (permalink / raw)
  To: Joakim Nohlgård, gcc-patches


On 11/28/22 06:59, Joakim Nohlgård wrote:
> The check for HAVE_LD_RO_RW_SECTION_MIXING fails on targets where ld
> does not support shared objects, even though the answer to the test
> should be 'read-write'. One such target is riscv64-unknown-elf. Failing
> this test results in a libgcc crtbegin.o which has a writable .eh_frame
> section leading to the default linker scripts placing the .eh_frame
> section in a writable memory segment, or a linker warning about writable
> sections in a read-only segment when using ld scripts that place
> .eh_frame unconditionally in ROM.
>
> gcc/ChangeLog:
>
> 	* configure: Regenerate.
> 	* configure.ac: Use ld -r in the check for HAVE_LD_RO_RW_SECTION_MIXING

I'm not sure that simply replacing -shared with -r is the right fix 
here.  ISTM that if the -shared tests fails, then we can/should try the 
-r variant.    Am I missing something here?


jeff



^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] gcc: Use ld -r when checking for HAVE_LD_RO_RW_SECTION_MIXING
  2022-11-28 16:53 ` Jeff Law
@ 2022-12-05 13:46   ` Joakim Nohlgård
  0 siblings, 0 replies; 3+ messages in thread
From: Joakim Nohlgård @ 2022-12-05 13:46 UTC (permalink / raw)
  To: Jeff Law; +Cc: gcc-patches

On Mon, Nov 28, 2022 at 5:53 PM Jeff Law <jeffreyalaw@gmail.com> wrote:
>
>
> On 11/28/22 06:59, Joakim Nohlgård wrote:
> > The check for HAVE_LD_RO_RW_SECTION_MIXING fails on targets where ld
> > does not support shared objects, even though the answer to the test
> > should be 'read-write'. One such target is riscv64-unknown-elf. Failing
> > this test results in a libgcc crtbegin.o which has a writable .eh_frame
> > section leading to the default linker scripts placing the .eh_frame
> > section in a writable memory segment, or a linker warning about writable
> > sections in a read-only segment when using ld scripts that place
> > .eh_frame unconditionally in ROM.
> >
> > gcc/ChangeLog:
> >
> >       * configure: Regenerate.
> >       * configure.ac: Use ld -r in the check for HAVE_LD_RO_RW_SECTION_MIXING
>
> I'm not sure that simply replacing -shared with -r is the right fix
> here.  ISTM that if the -shared tests fails, then we can/should try the
> -r variant.    Am I missing something here?
>
I have posted a v2 patch. The new patch tries ld -shared first and
falling back to ld -r if that fails.

I believe the original reason for using ld -shared in the first place
was that it was a convenient way to let the conftest1,2,3 code be as
simple as possible. Using ld without any flags would require a program
entry point (_start) at the very minimum. Using ld -r has the same
effect as the ld -shared link in this case, where we just want to
merge sections with the same name from different input files and check
what section flags were propagated to the output file.

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2022-12-05 13:46 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-28 13:59 [PATCH] gcc: Use ld -r when checking for HAVE_LD_RO_RW_SECTION_MIXING Joakim Nohlgård
2022-11-28 16:53 ` Jeff Law
2022-12-05 13:46   ` Joakim Nohlgård

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).