Chung-Lin Tang <clt...@codesourcery.com> wrote:
> This patch fixes a case in sh.c:find_barrier(), triggered by a testcase
> in glibc. The scanning starts from a GOT move instruction, records
> itself in 'last_got', but does not find a second GOT move (to reset
> last_got to NULL).
> It finishes by trying to insert a new barrier in the insn stream, sees
> last_got != NULL, and tries to insert at PREV_INSN(last_got), which goes
> above the original start insn.
> The caller, sh_reorg(), then gets the barrier scan target above the orig
> insn, tries (in vain) to find it using a forward scan, and segfaults
> when it goes past the insn stream...
> The attached patch adds an additional equality check, plus some comment
> updates. Cross-tested without regressions, is this okay for trunk?
OK. Thanks for catching this!