• Lichao Liu's avatar
    MIPS: Loongson-2EF: disable fix-loongson3-llsc in compiler · 2984b3f8
    Lichao Liu authored
    Firstly, Loongson-2EF support ll/sc instructions, but
    doesn't need fix-loongson3-llsc compile option.
    
    Secondly, fix-loongson3-llsc will cause kernel startup
    fail at futex_init, because compiler will add 'sync' before
    'll', which will affect __ex_table.
    futex_init will pass NULL uaddr parameter to
    futex_atomic_cmpxchg_inatomic.
    futex_atomic_cmpxchg_inatomic will access uaddr directly,
    which will cause page fault exception, the exception should be
    handled by __ex_table's nextinsn if the exception insn exsit in
    __ex_table. Because __ex_table is affected by compiler,
    the exception can not be handled, and
    futex_atomic_cmpxchg_inatomic will crash.
    
    Error code as below:
    __ex_table.insn = 1b, which is 'sync' compiled with
    fix-loongson3-llsc, but the actual exception instrction is ll.
    So, do_page_fault will not find the correct inst in __ex_table, and
    can not handle this exception.
    
            "1: "user_ll("%1", "%3")"               \n"
            "   bne %1, %z4, 3f             \n"
            "   .set    pop                 \n"
            "   move    $1, %z5                 \n"
            "   .set    "MIPS_ISA_ARCH_LEVEL"           \n"
            "2: "user_sc("$1", "%2")"               \n"
            "   beqz    $1, 1b                  \n"
            "3: " __SYNC_ELSE(full, loongson3_war, __WEAK_LLSC_MB) "\n"
            "   .insn                       \n"
            "   .set    pop                 \n"
            "   .section .fixup,\"ax\"              \n"
            "4: li  %0, %6                  \n"
            "   j   3b                  \n"
            "   .previous                   \n"
            "   .section __ex_table,\"a\"           \n"
            "   "__UA_ADDR "\t1b, 4b                \n"
            "   "__UA_ADDR "\t2b, 4b                \n"
            "   .previous
    Signed-off-by: default avatarLichao Liu <liulichao@loongson.cn>
    Reviewed-by: default avatarJiaxun Yang <jiaxun.yang@flygoat.com>
    Signed-off-by: default avatarThomas Bogendoerfer <tsbogend@alpha.franken.de>
    2984b3f8
Platform 2.03 KB