public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug inline-asm/98778] New: asm() accepts certain "i" (symbol) constructs despite -fpie for x86-64
@ 2021-01-21  9:10 jbeulich at suse dot com
  2021-01-21 11:36 ` [Bug inline-asm/98778] " jakub at gcc dot gnu.org
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: jbeulich at suse dot com @ 2021-01-21  9:10 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98778

            Bug ID: 98778
           Summary: asm() accepts certain "i" (symbol) constructs despite
                    -fpie for x86-64
           Product: gcc
           Version: 10.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: inline-asm
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jbeulich at suse dot com
  Target Milestone: ---

While in the example below all 3 variants get refused ("impossible constraint")
with -fpic or with "-m32 -fpie", the ones in cases 0 and 2 get accepted with
just -fpie, producing non-position-independent code (or more precisely
unsuitable relocations).

void efn(void);
void(*efp)(void);

void*test(int i) {
        void*res;

        switch(i) {
        case 0:
                asm("mov %1,%0" : "=r" (res) : "i" (test));
                break;
#ifndef __PIE__
        case 1:
                asm("mov %1,%0" : "=r" (res) : "i" (efn));
                break;
#endif
        case 2:
                asm("mov %1,%0" : "=r" (res) : "i" (&efp));
                break;
        default:
                res = (void*)0;
                break;
        }

        return res;
}

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

* [Bug inline-asm/98778] asm() accepts certain "i" (symbol) constructs despite -fpie for x86-64
  2021-01-21  9:10 [Bug inline-asm/98778] New: asm() accepts certain "i" (symbol) constructs despite -fpie for x86-64 jbeulich at suse dot com
@ 2021-01-21 11:36 ` jakub at gcc dot gnu.org
  2021-01-21 11:40 ` jakub at gcc dot gnu.org
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: jakub at gcc dot gnu.org @ 2021-01-21 11:36 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98778

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jakub at gcc dot gnu.org

--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
I don't think anything guarantees that this should work.

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

* [Bug inline-asm/98778] asm() accepts certain "i" (symbol) constructs despite -fpie for x86-64
  2021-01-21  9:10 [Bug inline-asm/98778] New: asm() accepts certain "i" (symbol) constructs despite -fpie for x86-64 jbeulich at suse dot com
  2021-01-21 11:36 ` [Bug inline-asm/98778] " jakub at gcc dot gnu.org
@ 2021-01-21 11:40 ` jakub at gcc dot gnu.org
  2021-01-21 12:27 ` jbeulich at suse dot com
  2021-09-14  9:37 ` [Bug target/98778] " pinskia at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: jakub at gcc dot gnu.org @ 2021-01-21 11:40 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98778

--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
In particular it is up to the inline asm writer to ensure that the result is
PIC compatible through a wise choice of constraints etc.

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

* [Bug inline-asm/98778] asm() accepts certain "i" (symbol) constructs despite -fpie for x86-64
  2021-01-21  9:10 [Bug inline-asm/98778] New: asm() accepts certain "i" (symbol) constructs despite -fpie for x86-64 jbeulich at suse dot com
  2021-01-21 11:36 ` [Bug inline-asm/98778] " jakub at gcc dot gnu.org
  2021-01-21 11:40 ` jakub at gcc dot gnu.org
@ 2021-01-21 12:27 ` jbeulich at suse dot com
  2021-09-14  9:37 ` [Bug target/98778] " pinskia at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: jbeulich at suse dot com @ 2021-01-21 12:27 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98778

--- Comment #3 from jbeulich at suse dot com ---
(In reply to Jakub Jelinek from comment #2)
> In particular it is up to the inline asm writer to ensure that the result is
> PIC compatible through a wise choice of constraints etc.

Perhaps the description wasn't clear enough (but I think the title
disambiguates it): I don't mean this to be made work. I'd expect an error on
all three constructs, like with -fpic, rather than just on one of them.

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

* [Bug target/98778] asm() accepts certain "i" (symbol) constructs despite -fpie for x86-64
  2021-01-21  9:10 [Bug inline-asm/98778] New: asm() accepts certain "i" (symbol) constructs despite -fpie for x86-64 jbeulich at suse dot com
                   ` (2 preceding siblings ...)
  2021-01-21 12:27 ` jbeulich at suse dot com
@ 2021-09-14  9:37 ` pinskia at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-09-14  9:37 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98778

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|inline-asm                  |target

--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
          else if (!SYMBOL_REF_FAR_ADDR_P (op0)
                   && (SYMBOL_REF_LOCAL_P (op0)
                       || (HAVE_LD_PIE_COPYRELOC
                           && flag_pie
                           && !SYMBOL_REF_WEAK (op0)
                           && !SYMBOL_REF_FUNCTION_P (op0)))
                   && ix86_cmodel != CM_LARGE_PIC)
            return true;


Is why it is accepted. inside legitimate_pic_address_disp_p.

SYMBOL_REF_LOCAL_P is true as it is defined in the TU for PIE case.

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

end of thread, other threads:[~2021-09-14  9:37 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-21  9:10 [Bug inline-asm/98778] New: asm() accepts certain "i" (symbol) constructs despite -fpie for x86-64 jbeulich at suse dot com
2021-01-21 11:36 ` [Bug inline-asm/98778] " jakub at gcc dot gnu.org
2021-01-21 11:40 ` jakub at gcc dot gnu.org
2021-01-21 12:27 ` jbeulich at suse dot com
2021-09-14  9:37 ` [Bug target/98778] " pinskia at gcc dot gnu.org

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