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

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
So the assembler error is for code trying to handle

  /* Do relax().  */
  {
...
    /* Most horrible, but gcc may give us some exception data that
       is impossible to assemble, of the form

       .align 4
       .byte 0, 0
       .uleb128 end - start
       start:
       .space 128*128 - 1
       .align 4
       end:

       If the leb128 is two bytes in size, then end-start is 128*128,
       which requires a three byte leb128.  If the leb128 is three
       bytes in size, then end-start is 128*128-1, which requires a
       two byte leb128.  We work around this dilemma by inserting
       an extra 4 bytes of alignment just after the .align.  This
       works because the data after the align is accessed relative to
       the end label.

       This counter is used in a tiny state machine to detect
       whether a leb128 followed by an align is impossible to
       relax.  */
...
    /* Until nothing further to relax.  */
    while (stretched && -- max_iterations);

    if (stretched)
      as_fatal (_("Infinite loop encountered whilst attempting to compute the
addresses of symbols in section %s"),
                segment_name (segment));

so it does look like an error on the compiler side.  Though maybe
impossible to avoid.  I'll try to attach a reproducer.

Reply via email to