* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. *
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. *
***************************************************************************/
#ifdef HAVE_CONFIG_H
const struct rtos_register_stacking *stacking_info;
};
-static const struct ChibiOS_params ChibiOS_params_list[] = {
+static struct ChibiOS_params ChibiOS_params_list[] = {
{
"cortex_m", /* target_name */
0,
/* Sometimes the stacking can not be determined only by looking at the
* target name but only a runtime.
*
- * For example, this is the case for cortex-m4 targets and ChibiOS which
+ * For example, this is the case for Cortex-M4 targets and ChibiOS which
* only stack the FPU registers if it is enabled during ChibiOS build.
*
* Terminating which stacking is used is target depending.
struct ChibiOS_params *param;
param = (struct ChibiOS_params *) rtos->rtos_specific_params;
- /* Check for armv7m with *enabled* FPU, i.e. a Cortex M4 */
+ /* Check for armv7m with *enabled* FPU, i.e. a Cortex-M4 */
struct armv7m_common *armv7m_target = target_to_armv7m(rtos->target);
if (is_armv7m(armv7m_target)) {
if (armv7m_target->fp_feature == FPv4_SP) {
/* Check if CP10 and CP11 are set to full access.
* In ChibiOS this is done in ResetHandler() in crt0.c */
if (cpacr & 0x00F00000) {
- /* Found target with enabled FPU */
- /* FIXME: Need to figure out how to specify the FPU registers */
- LOG_ERROR("ChibiOS ARM v7m targets with enabled FPU "
- " are NOT supported");
- return -1;
+ LOG_DEBUG("Enabled FPU detected.");
+ param->stacking_info = &rtos_chibios_arm_v7m_stacking_w_fpu;
+ return 0;
}
}
static int ChibiOS_get_symbol_list_to_lookup(symbol_table_elem_t *symbol_list[])
{
- *symbol_list = ChibiOS_symbol_list;
+ *symbol_list = malloc(sizeof(ChibiOS_symbol_list));
+
+ if (*symbol_list == NULL)
+ return ERROR_FAIL;
+
+ memcpy(*symbol_list, ChibiOS_symbol_list, sizeof(ChibiOS_symbol_list));
return 0;
}