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

--- Comment #9 from Alexander Monakov <amonakov at gcc dot gnu.org> ---
(In reply to Xi Ruoyao from comment #8)
> Is there any pointer how to implement this instead?

It may be sufficient to change

(define_insn "@tablejump<mode>"
  [(set (pc)
        (match_operand:P 0 "register_operand" "e"))
   (use (label_ref (match_operand 1 "" "")))]
  ""
  "jr\t%0"
  [(set_attr "type" "jump")
   (set_attr "mode" "none")])

such that instead of providing the string template "jr\t%0" you instead do

{ return loongarch_output_tablejump(...); }

as already done for division, some moves, branches, ... and in that function
you emit .pushsection ... .popsection as necessary, in addition to "jr\t%0".

But are you sure it is really necessary? I see that objtool already has support
for inspecting relocations, and that seems sufficient for reaching the jump
table from the jump instruction on Loongarch.

I noticed that this will be a topic of discussion on the upcoming kernel BoF on
the GNU Cauldron, in context of objtool on arm64:

https://inbox.sourceware.org/gcc/87h6akzwdq....@oracle.com/T/

and was previously discussed on kernel mailing lists, with some particularly
illuminating responses from Michael Matz:

https://lore.kernel.org/linux-arm-kernel/yylmhuxtuanza...@hirez.programming.kicks-ass.net/T/#m10f5b79259ad7fe62129ac7db790fe53f7ed8d8e

Reply via email to