In a recent bout of ‘They Changed It, Now It Sucks’, GCC 4.7 won't add interworking instructions to ARM assembly code unless you add a .type
directive to the function boilerplate. Following some code from devkitARM 38 announcement:
@ code dirctive goes here.
.align 2
.global foo
.type foo STT_FUNC @ Add this line right here
foo:
@ etc
UPDATE 2012-05-20
Had some time to work on this. When I first saw that I was going to have to do this, I though ‘Oh naw, I'm going to have to update every single ASM function I have?’ But then I noticed that I had already done so, more or less. One of the things I realized some time after the 1.4 release was that copy-pasting the standard boiler-plate code for ASM functions was stupid, so I created macros to do that instead. I was pleasantly surprised to see that I had already upgraded all tonclib functions with that macro, so all I had to do was add the single line in a single place and recompile. Fuck yeah, macros.
The only troublesome thing was that the inline ASM I used in swi_demo failed horrifically, so I just removed those.
The current status is that all the code's okay again, but the text parts still need to be updated.