rtos: removed chSysInit from detection of ChibiOS (#121)
authorAndy Pomfret <cooperised@gmail.com>
Tue, 8 Mar 2016 13:52:36 +0000 (13:52 +0000)
committerAndreas Fritiofson <andreas.fritiofson@gmail.com>
Sat, 13 Aug 2016 08:21:23 +0000 (09:21 +0100)
Using the presence of the 'chSysInit' symbol for detection of
ChibiOS is dangerous because this symbol may not be available
if link-time optimisation is used.

This patch removes this reliance, so the symbols 'ch' and 'ch_debug'
are the only things required for ChibiOS detection.

If 'ch' is present but 'ch_debug' is not, an info message suggests
that Chibios might be present without its registry being enabled.
This message has been reworded a little to make it slightly more
equivocal because the chances of a false positive message are
increased.

Addresses bug #121, "ChibiOS rtos detection fails with LTO enabled".

Change-Id: I5ef224735c06446751adee010ce75be4f30f0403
Signed-off-by: Andy Pomfret <cooperised@gmail.com>
Reviewed-on: http://openocd.zylin.com/3381
Tested-by: jenkins
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
src/rtos/ChibiOS.c

index fbb6ea25cefa4947eb307bab641f781824b173e2..2d8866439a5f1a295ed7df88de4ce4c965bb35b1 100644 (file)
@@ -128,15 +128,13 @@ struct rtos_type ChibiOS_rtos = {
 enum ChibiOS_symbol_values {
        ChibiOS_VAL_rlist = 0,
        ChibiOS_VAL_ch = 1,
-       ChibiOS_VAL_ch_debug = 2,
-       ChibiOS_VAL_chSysInit = 3
+       ChibiOS_VAL_ch_debug = 2
 };
 
 static symbol_table_elem_t ChibiOS_symbol_list[] = {
        { "rlist", 0, true},            /* Thread ready list */
        { "ch", 0, true},                       /* System data structure */
        { "ch_debug", 0, false},        /* Memory Signature containing offsets of fields in rlist */
-       { "chSysInit", 0, false},       /* Necessary part of API, used for ChibiOS detection */
        { NULL, 0, false}
 };
 
@@ -518,12 +516,11 @@ static int ChibiOS_detect_rtos(struct target *target)
 {
        if ((target->rtos->symbols != NULL) &&
                        ((target->rtos->symbols[ChibiOS_VAL_rlist].address != 0) ||
-                        (target->rtos->symbols[ChibiOS_VAL_ch].address != 0)) &&
-                       (target->rtos->symbols[ChibiOS_VAL_chSysInit].address != 0)) {
+                        (target->rtos->symbols[ChibiOS_VAL_ch].address != 0))) {
 
                if (target->rtos->symbols[ChibiOS_VAL_ch_debug].address == 0) {
-                       LOG_INFO("It looks like the target is running ChibiOS without "
-                                       "ch_debug.");
+                       LOG_INFO("It looks like the target may be running ChibiOS "
+                                       "without ch_debug.");
                        return 0;
                }