armv4_5: fix segmentation fault in command 'arm reg'
[fw/openocd] / src / target / oocd_trace.c
index 240f867cabaad84bd72ec84132f59e7239b75acf..f38916a0baf1b942a76fe53fd16a408ca60f8f9d 100644 (file)
@@ -13,9 +13,7 @@
  *   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.,                                       *
- *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
  ***************************************************************************/
 
 #ifdef HAVE_CONFIG_H
@@ -38,6 +36,8 @@ static int oocd_trace_read_reg(struct oocd_trace *oocd_trace, int reg, uint32_t
 
        cmd = 0x10 | (reg & 0x7);
        bytes_written = write(oocd_trace->tty_fd, &cmd, 1);
+       if (bytes_written < 1)
+               return ERROR_FAIL;
 
        bytes_to_read = 4;
        while (bytes_to_read > 0) {
@@ -62,6 +62,9 @@ static int oocd_trace_write_reg(struct oocd_trace *oocd_trace, int reg, uint32_t
        data[4] = (value & 0xff000000) >> 24;
 
        bytes_written = write(oocd_trace->tty_fd, data, 5);
+       if (bytes_written < 5)
+               return ERROR_FAIL;
+
        LOG_DEBUG("reg #%i: 0x%8.8x", reg, value);
 
        return ERROR_OK;
@@ -78,6 +81,8 @@ static int oocd_trace_read_memory(struct oocd_trace *oocd_trace, uint8_t *data,
 
        cmd = 0x20;
        bytes_written = write(oocd_trace->tty_fd, &cmd, 1);
+       if (bytes_written < 1)
+               return ERROR_FAIL;
 
        bytes_to_read = size * 16;
        while (bytes_to_read > 0) {
@@ -272,7 +277,7 @@ COMMAND_HANDLER(handle_oocd_trace_config_command)
        target = get_current_target(CMD_CTX);
        arm = target_to_arm(target);
        if (!is_arm(arm)) {
-               command_print(CMD_CTX, "current target isn't an ARM");
+               command_print(CMD, "current target isn't an ARM");
                return ERROR_FAIL;
        }
 
@@ -301,17 +306,17 @@ COMMAND_HANDLER(handle_oocd_trace_status_command)
 
        arm = target_to_arm(target);
        if (!is_arm(arm)) {
-               command_print(CMD_CTX, "current target isn't an ARM");
+               command_print(CMD, "current target isn't an ARM");
                return ERROR_FAIL;
        }
 
        if (!arm->etm) {
-               command_print(CMD_CTX, "current target doesn't have an ETM configured");
+               command_print(CMD, "current target doesn't have an ETM configured");
                return ERROR_FAIL;
        }
 
        if (strcmp(arm->etm->capture_driver->name, "oocd_trace") != 0) {
-               command_print(CMD_CTX, "current target's ETM capture driver isn't 'oocd_trace'");
+               command_print(CMD, "current target's ETM capture driver isn't 'oocd_trace'");
                return ERROR_FAIL;
        }
 
@@ -320,9 +325,9 @@ COMMAND_HANDLER(handle_oocd_trace_status_command)
        oocd_trace_read_reg(oocd_trace, OOCD_TRACE_STATUS, &status);
 
        if (status & 0x8)
-               command_print(CMD_CTX, "trace clock locked");
+               command_print(CMD, "trace clock locked");
        else
-               command_print(CMD_CTX, "no trace clock");
+               command_print(CMD, "no trace clock");
 
        return ERROR_OK;
 }
@@ -339,17 +344,17 @@ COMMAND_HANDLER(handle_oocd_trace_resync_command)
 
        arm = target_to_arm(target);
        if (!is_arm(arm)) {
-               command_print(CMD_CTX, "current target isn't an ARM");
+               command_print(CMD, "current target isn't an ARM");
                return ERROR_FAIL;
        }
 
        if (!arm->etm) {
-               command_print(CMD_CTX, "current target doesn't have an ETM configured");
+               command_print(CMD, "current target doesn't have an ETM configured");
                return ERROR_FAIL;
        }
 
        if (strcmp(arm->etm->capture_driver->name, "oocd_trace") != 0) {
-               command_print(CMD_CTX, "current target's ETM capture driver isn't 'oocd_trace'");
+               command_print(CMD, "current target's ETM capture driver isn't 'oocd_trace'");
                return ERROR_FAIL;
        }
 
@@ -358,8 +363,10 @@ COMMAND_HANDLER(handle_oocd_trace_resync_command)
        cmd_array[0] = 0xf0;
 
        bytes_written = write(oocd_trace->tty_fd, cmd_array, 1);
+       if (bytes_written < 1)
+               return ERROR_FAIL;
 
-       command_print(CMD_CTX, "requesting traceclock resync");
+       command_print(CMD, "requesting traceclock resync");
        LOG_DEBUG("resyncing traceclk pll");
 
        return ERROR_OK;