GDB fileIO stdout support
This patch fixes gdb fileio support to allow gdb console to be used as stdout. Now we can do something like gdb <inferior file> (gdb) tar ext :3333 (gdb) load (gdb) monitor arm semihosting enable (gdb) monitor arm semihosting_fileio enable (gdb) continue Here: Output from inferior using puts, printf etc will be routed to gdb console. Change-Id: I9cb0dddda1de58038c84f5b035c38229828cd744 Signed-off-by: Omair Javaid <omair.javaid@linaro.org> Reviewed-on: http://openocd.zylin.com/4538 Tested-by: jenkins Reviewed-by: Matthias Welwarsky <matthias@welwarsky.de>
This commit is contained in:
parent
a7da117ad6
commit
0aa8e8cfc3
|
@ -225,6 +225,10 @@ int semihosting_common(struct target *target)
|
||||||
else {
|
else {
|
||||||
int fd = semihosting_get_field(target, 0, fields);
|
int fd = semihosting_get_field(target, 0, fields);
|
||||||
if (semihosting->is_fileio) {
|
if (semihosting->is_fileio) {
|
||||||
|
if (fd == 0 || fd == 1 || fd == 2) {
|
||||||
|
semihosting->result = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
semihosting->hit_fileio = true;
|
semihosting->hit_fileio = true;
|
||||||
fileio_info->identifier = "close";
|
fileio_info->identifier = "close";
|
||||||
fileio_info->param_1 = fd;
|
fileio_info->param_1 = fd;
|
||||||
|
@ -445,8 +449,8 @@ int semihosting_common(struct target *target)
|
||||||
* - –1 if an error occurs.
|
* - –1 if an error occurs.
|
||||||
*/
|
*/
|
||||||
if (semihosting->is_fileio) {
|
if (semihosting->is_fileio) {
|
||||||
LOG_ERROR("SYS_FLEN not supported by semihosting fileio");
|
semihosting->result = -1;
|
||||||
return ERROR_FAIL;
|
semihosting->sys_errno = EINVAL;
|
||||||
}
|
}
|
||||||
retval = semihosting_read_fields(target, 1, fields);
|
retval = semihosting_read_fields(target, 1, fields);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
|
@ -690,9 +694,19 @@ int semihosting_common(struct target *target)
|
||||||
/* TODO: implement the :semihosting-features special file.
|
/* TODO: implement the :semihosting-features special file.
|
||||||
* */
|
* */
|
||||||
if (semihosting->is_fileio) {
|
if (semihosting->is_fileio) {
|
||||||
if (strcmp((char *)fn, ":tt") == 0)
|
if (strcmp((char *)fn, ":semihosting-features") == 0) {
|
||||||
semihosting->result = 0;
|
semihosting->result = -1;
|
||||||
else {
|
semihosting->sys_errno = EINVAL;
|
||||||
|
} else if (strcmp((char *)fn, ":tt") == 0) {
|
||||||
|
if (mode == 0)
|
||||||
|
semihosting->result = 0;
|
||||||
|
else if (mode == 4)
|
||||||
|
semihosting->result = 1;
|
||||||
|
else if (mode == 8)
|
||||||
|
semihosting->result = 2;
|
||||||
|
else
|
||||||
|
semihosting->result = -1;
|
||||||
|
} else {
|
||||||
semihosting->hit_fileio = true;
|
semihosting->hit_fileio = true;
|
||||||
fileio_info->identifier = "open";
|
fileio_info->identifier = "open";
|
||||||
fileio_info->param_1 = addr;
|
fileio_info->param_1 = addr;
|
||||||
|
|
Loading…
Reference in New Issue