Consider the following code: typedef unsigned int UINT32; typedef unsigned char BOOL; #define __SWI_BIOS_ContainerUsage 1234
#define __swicall1(type,name,type1,arg1) \ static inline type name(type1 arg1) { \ register long __r0 __asm__ ("r0") = (long)arg1; \ register long __res __asm__ ("r0"); \ __asm__ __volatile__ ("swi\t%2\n\t" \ : "=r" (__res) \ : "0" (__r0), "i" (__SWI_##name) \ : "r1", "r2", "r3", "ip", "lr", "cc", \ "memory"); \ return((type)__res); \ } __swicall1(UINT32,BIOS_ContainerUsage,BOOL,verbose); int sprintf(char *p, const char *frmt, ...); void testme(char *tmp) { sprintf(tmp, " %d%% Containers\n", BIOS_ContainerUsage(1)); sprintf(tmp, " %d%% Containers\n", 2 * BIOS_ContainerUsage(1)); } -- Summary: Compiler generates incorrect code when calling functions Product: gcc Version: 4.1.0 Status: UNCONFIRMED Severity: blocker Priority: P3 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: Eric dot Doenges at betty-tv dot com GCC host triplet: powerpc-apple-darwin8.5.0 GCC target triplet: arm-elf-unknown http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27305