public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* issue with behavior change of gcc -r between gcc-8 and gcc-9
@ 2020-04-01 17:48 Olivier Hainque
  2020-04-01 20:01 ` Olivier Hainque
  2020-04-02  8:37 ` Allan Sandfeld Jensen
  0 siblings, 2 replies; 6+ messages in thread
From: Olivier Hainque @ 2020-04-01 17:48 UTC (permalink / raw)
  To: GCC Patches, allan.jensen; +Cc: Joseph Myers, Joel Brobecker, Jerome Lambourg

Hello,

While working on the migration of our production
ports to gcc-9, we stumbled on a problem with the
behavioral changed introduced by

  commit 0b7fb27b698da38fd13108ecc914613f85f66f9d
  Author: Allan Sandfeld Jensen <allan.jensen@qt.io>
  Date:   Fri Sep 21 01:38:24 2018 +0600

    Fix and document -r option
    
    The option has existed and been working for years,
    make sure it implies the right extra options, and list
    it in the documentation.

The core of the change is summarized by:

            * gcc.c (LINK_COMMAND_SPEC): Handle -r like -nostdlib.

The change is problematic for VxWorks. We initially thought we
could get around it, but our ideas unfortunately didn't work out.

VxWorks offers various ways to get executable code on a target,
one of which consists in downloading a so called "Downloadable Kernel
Module", essentially a partially linked blob, then letting the
runtime environment finalize the link and prepare the module to run.

Preparing the module to run involves running global constructors,
for c++ and eh table registration purposes in particular.

For this to work, we have sets of crtstuff startfiles and a variety
of inclusion policies.

The bottom line is that we really rely on the possibility to
have startfiles included as part of partial links, which the
change above forbids in a pretty irreversible manner (as far
as I can see).

I'm not entirely clear on the problem the change was trying
to solve.  IIUC, the essential goal was to remove the need to
pass particular options in addition to -r to remove bits
from a link closure.

Personally, I don't think that need was problematic. As
the commit log says, the option has existed and been working
for years.

-r 's business was to arrange for the linker not to
complain because the closure is incomplete, leaving us
with complete control of the closure.

It doesn't seem to me there was a really strong motivation
to suddenly have -r influence the closure the way it now does.

Would it be possible to revert to the previous behavior
and document it ?

Or maybe allow it to be controllable by the target ports ?

Or provide something to bring back the flexibility we had
if we really believe the default should change ? (I'm not
convinced)

Thanks in advance for your feedback!

With Kind Regards,

Olivier


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

end of thread, other threads:[~2020-04-06  9:47 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-01 17:48 issue with behavior change of gcc -r between gcc-8 and gcc-9 Olivier Hainque
2020-04-01 20:01 ` Olivier Hainque
2020-04-01 20:42   ` Iain Sandoe
2020-04-01 21:04     ` Olivier Hainque
2020-04-02  8:37 ` Allan Sandfeld Jensen
2020-04-06  9:47   ` Olivier Hainque

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).