SYSBIOS: 6_35_03_47 and 6_35_04_50, UDP: and 6_37_00_20 (bundled with TI-RTOS v1.21.00.09)
ti/sysbios/family/arm/lm4/Timer.c:968
Bool Timer_masterDisable(Void)
{
/* read PRIMASK bit to R0 and call CPSID to disable interrupts */
asm(" mrs r0, PRIMASK\n"
" cpsid i\n"
" bx lr\n");
/*
* The following return statement keeps the compiler from complaining
* about a missing return value. The "bx lr" above does the actual return
* and the below statement is not executed.
*/
return (0);
}
compiles to incorrect code (return before stack restore) that leads to an exception on TM4C123GXL:
(gdb) disas 0xaefe
Dump of assembler code for function ti_sysbios_family_arm_lm4_Timer_masterDisable__I:
0x0000aef4 <+0>: push {r7}
0x0000aef6 <+2>: add r7, sp, #0
0x0000aef8 <+4>: mrs r0, PRIMASK
0x0000aefc <+8>: cpsid i
0x0000aefe <+10>: bx lr
0x0000af00 <+12>: mov.w r3, #0
0x0000af04 <+16>: mov r0, r3
0x0000af06 <+18>: mov sp, r7
0x0000af08 <+20>: pop {r7}
0x0000af0a <+22>: bx lr
End of assembler dump.
One possible fix:
Bool Timer_masterDisable(Void)
{
int r;
/* read PRIMASK bit and call CPSID to disable interrupts */
asm(" mrs %[r], PRIMASK\n"
" cpsid i\n"
: [r] "=&r" (r)
:
);
return r;
}
gcc:
$ arm-none-eabi-gcc -v Using built-in specs. COLLECT_GCC=arm-none-eabi-gcc COLLECT_LTO_WRAPPER=/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/lto-wrapper Target: arm-none-eabi Configured with: /build/buildd/gcc-arm-none-eabi-4-7-2013q3/src/gcc/configure --target=arm-none-eabi --prefix=/build/buildd/gcc-arm-none-eabi-4-7-2013q3/install-native --libexecdir=/build/buildd/gcc-arm-none-eabi-4-7-2013q3/install-native/lib --infodir=/build/buildd/gcc-arm-none-eabi-4-7-2013q3/install-native/share/doc/gcc-arm-none-eabi/info --mandir=/build/buildd/gcc-arm-none-eabi-4-7-2013q3/install-native/share/doc/gcc-arm-none-eabi/man --htmldir=/build/buildd/gcc-arm-none-eabi-4-7-2013q3/install-native/share/doc/gcc-arm-none-eabi/html --pdfdir=/build/buildd/gcc-arm-none-eabi-4-7-2013q3/install-native/share/doc/gcc-arm-none-eabi/pdf --enable-languages=c,c++ --disable-decimal-float --disable-libffi --disable-libgomp --disable-libmudflap --disable-libquadmath --disable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --disable-tls --with-gnu-as --with-gnu-ld --with-newlib --with-headers=yes --with-python-dir=share/gcc-arm-none-eabi --with-sysroot=/build/buildd/gcc-arm-none-eabi-4-7-2013q3/install-native/arm-none-eabi --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --with-pkgversion='GNU Tools for ARM Embedded Processors' --with-multilib-list=armv6-m,armv7-m,armv7e-m,armv7-r Thread model: single gcc version 4.7.4 20130913 (release) [ARM/embedded-4_7-branch revision 202601] (GNU Tools for ARM Embedded Processors)