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

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

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

--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
This is because llvm doesn't support location views in .loc as directive, so
HAVE_AS_DWARF2_DEBUG_VIEW is false on gcn during configure.
And the fallback added in r8-6657 uses DW_LNS_fixed_advance_pc which needs a
2-byte operand.
So, either we switch gcn to use binutils, or convince LLVM to support location
views in .loc as directive, or somehow from insn length figure out there might
be a too large distance and try to do something different in that case.
Though, the comment says:
  /* Output a Fixed Advance PC; the target PC is the label index; the
     base PC is the previous LI_adv_address or LI_set_address entry.
     We only use this when emitting debug views without assembler
     support, at explicit user request.  Ideally, we should only use
     it when the offset might be zero but we can't tell: it's the only
     way to maybe change the PC without resetting the view number.  */
and the LI_set_address says
          /* ??? Unfortunately, we have little choice here currently, and
             must always use the most general form.  GCC does not know the
             address delta itself, so we can't use DW_LNS_advance_pc.  Many
             ports do have length attributes which will give an upper bound
             on the address range.  We could perhaps use length attributes
             to determine when it is safe to use DW_LNS_fixed_advance_pc.  */
So, if we can reach > 65535 differences in address for LI_adv_address, wonder
if we don't need to use LI_set_address instead (but dunno whether that resets
view number or not).

Reply via email to