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

Uroš Bizjak <ubizjak at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |rth at gcc dot gnu.org,
                   |                            |ubizjak at gmail dot com

--- Comment #1 from Uroš Bizjak <ubizjak at gmail dot com> ---
The problem here is, that some inline asm tries to print the symbol name using
"offsetable" memory constraint. This generates:

(gdb) p debug_rtx (insn)
(insn:TI 58 57 59 (asm_operands/v ("990: nop
.pushsection .note.stapsdt,"?","note"
.balign 4
.4byte 992f-991f,994f-993f,3
991: .asciz "stapsdt"
992: .balign 4
993: .8byte 990b
.8byte _.stapsdt.base
.8byte 0
.asciz "libc"
.asciz "memory_mallopt_mxfast"
.asciz "%n0@%1 %n2@%3"
994: .balign 4
.popsection
") ("") 0 [
            (const_int 4 [0x4])
            (reg:SI 11 $11 [orig:103 value ] [103])
            (const_int -8 [0xfffffffffffffff8])
            (mem/c:DI (symbol_ref:DI ("global_max_fast") [flags 0x6] <var_decl
0x20000eaf430 global_max_fast>) [5 global_max_fast+0 S8 A64])
        ]
         [
            (asm_input:SI ("n") malloc.c:4764)
            (asm_input:SI ("nor") malloc.c:4764)
            (asm_input:SI ("n") malloc.c:4764)
            (asm_input:DI ("nor") malloc.c:4764)
        ]
         [] malloc.c:4764) malloc.c:4764 -1
     (nil))
$15 = void

which in fact contains invalid unsplit symbol reference to "global_max_fast".

So, we can either allow unsplit symbol references using following patch:

--cut here--
Index: alpha.c
===================================================================
--- alpha.c     (revision 210950)
+++ alpha.c     (working copy)
@@ -5450,7 +5450,6 @@ print_operand_address (FILE *file, rtx addr)
       offset = INTVAL (addr);
       break;

-#if TARGET_ABI_OPEN_VMS
     case SYMBOL_REF:
       fprintf (file, "%s", XSTR (addr, 0));
       return;
@@ -5463,7 +5462,6 @@ print_operand_address (FILE *file, rtx addr)
               INTVAL (XEXP (XEXP (addr, 0), 1)));
       return;

-#endif
     default:
       gcc_unreachable ();
     }
--cut here--

or your souce should be fixed to avoid memory operands in inline asm.

Reply via email to