|
Message-ID: <alpine.LNX.2.20.13.2103160242430.17743@monopod.intra.ispras.ru> Date: Tue, 16 Mar 2021 02:49:59 +0300 (MSK) From: Alexander Monakov <amonakov@...ras.ru> To: musl@...ts.openwall.com cc: Markus Wichmann <nullplan@....net> Subject: Re: [PATCH v2] add qsort_r. On Tue, 9 Mar 2021, Rich Felker wrote: > I tested sh4, sh2/fdpic, rv64, s390x, or1k, m68k, and mips (32-bit) > and they all do the tail call properly. But mips64 (n64 and n32) both > fail to. According to the GCC source, it's some thing to allow lazy > binding. MIPS64 does not use a real PLT, but actually has GOT entries > that might go through a lazy resolver and that expect %gp (call-saved) > to be valid on entry. I think you botched something in your MIPS64 testing, probably making a direct call instead of an indirect call. An indirect call should not go to a lazy resolver (because then if you take the address once and reuse it many times, you risk entering the resolver multiple times). Here's a Compiler Explorer link demonstrating that indirect call compiles to a simple jump on MIPS64: https://godbolt.org/z/vroTs9 > musl does not, and will never, do lazy binding, so this is purely > counterproductive for musl and we should probably teach GCC not to do > it. The current logic is: > > /* Sibling calls should not prevent lazy binding. Lazy-binding stubs > require $gp to be valid on entry, so sibcalls can only use stubs > if $gp is call-clobbered. */ > if (decl decl will be NULL for an indirect call > && TARGET_CALL_SAVED_GP > && !TARGET_ABICALLS_PIC0 > && !targetm.binds_local_p (decl)) > return false; > > TARGET_CALL_SAVED_GP is rightly true (it's the ABI). > > TARGET_ABICALLS_PIC0 is rightly false (I'm pretty sure that's a bogus > alt ABI, and defined as TARGET_ABSOLUTE_ABICALLS && TARGET_PLT). > > It probably needs an addition condition && TARGET_LAZY_BINDING that we > can define as false. Alternatively the issue could just be fixed not > to go through lazy resolver anywhere. > > I opened a bug for it here: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99491 > > > Rich >
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.