On Tuesday 9. January 2018 00.46.53 Adam Lackorzynski wrote:
On Mon Jan 08, 2018 at 01:14:09 +0100, Paul Boddie wrote:
I'm aiming to follow up with the binutils maintainers about this, but I just wondered if any of this sounded problematic or familiar.
No, not familiar. It works with the older tool set, i.e. would be interesting whether the more recent ones are not ok here or the code needs to change.
I posted another message to the Debian bug I filed, but what I did discover was that if I wrap the core of the assembly language routine within a C-level function, the toolchain doesn't have a problem with the function, even if I set the visibility to internal:
void __attribute__((visibility("internal"))) thread2(void) { asm ( ".set push; .set noreorder;" L4UTIL_THREAD_START_SETUP_GP "la $t9, thread2_worker_function\n" " jal $t9 \n" " nop \n" ".set pop" ); }
So, I am assuming that the compiler gets confused by the freestanding assembly language definition of the function, and the object goes missing in some way that then leads to the error. Of course, the above introduces other operations that are superfluous, but perhaps not harmful, due to the general boilerplate included in C-level functions.
Anyway, I'll see if I get any response from the other discussion.
Thanks for responding!
Paul