diff --git a/Sming/Arch/Esp32/Components/esp32/component.mk b/Sming/Arch/Esp32/Components/esp32/component.mk index dd0531e585..2bf48d5e6c 100644 --- a/Sming/Arch/Esp32/Components/esp32/component.mk +++ b/Sming/Arch/Esp32/Components/esp32/component.mk @@ -242,11 +242,6 @@ FLASH_BOOT_CHUNKS := 0x1000=$(FLASH_BOOT_LOADER) SDK_DEFAULT_PATH := $(COMPONENT_PATH)/sdk -##@Debugging - -CACHE_VARS += GDB_CMDLINE -GDB_CMDLINE = trap '' INT; $(GDB) -x $(ARCH_TOOLS)/gdbinit $(TARGET_OUT) - ##@Partitions SDK_PARTITION_PATH := $(SDK_DEFAULT_PATH)/partitions diff --git a/Sming/Arch/Esp32/Components/gdbstub/README.rst b/Sming/Arch/Esp32/Components/gdbstub/README.rst new file mode 100644 index 0000000000..fc316ca478 --- /dev/null +++ b/Sming/Arch/Esp32/Components/gdbstub/README.rst @@ -0,0 +1,8 @@ +GDB Stub for Esp32 +================== + +This defines the command line to use when ``make gdb`` is run. + +Esp32 debugging is handled via JTAG interface. + +No additional code is required as serial debugging is not (currently) implemented. diff --git a/Sming/Arch/Esp32/Components/gdbstub/component.mk b/Sming/Arch/Esp32/Components/gdbstub/component.mk new file mode 100644 index 0000000000..6790f9d714 --- /dev/null +++ b/Sming/Arch/Esp32/Components/gdbstub/component.mk @@ -0,0 +1,6 @@ +DEBUG_VARS += GDBSTUB_DIR +GDBSTUB_DIR := $(COMPONENT_PATH) + +# Full GDB command line +CACHE_VARS += GDB_CMDLINE +GDB_CMDLINE = trap '' INT; $(GDB) -x $(ARCH_TOOLS)/gdbinit $(TARGET_OUT) diff --git a/Sming/Arch/Esp32/Components/gdbstub/gdb_syscall.cpp b/Sming/Arch/Esp32/Components/gdbstub/gdb_syscall.cpp new file mode 100644 index 0000000000..91367581e6 --- /dev/null +++ b/Sming/Arch/Esp32/Components/gdbstub/gdb_syscall.cpp @@ -0,0 +1,7 @@ +#include + +int gdb_syscall(const GdbSyscallInfo& info) +{ + errno = ENODEV; + return -1; +} diff --git a/Sming/Arch/Esp32/Tools/gdbinit b/Sming/Arch/Esp32/Components/gdbstub/gdbinit similarity index 100% rename from Sming/Arch/Esp32/Tools/gdbinit rename to Sming/Arch/Esp32/Components/gdbstub/gdbinit diff --git a/Sming/Arch/Esp32/Components/gdbstub/gdbstub.c b/Sming/Arch/Esp32/Components/gdbstub/gdbstub.c new file mode 100644 index 0000000000..4b22298076 --- /dev/null +++ b/Sming/Arch/Esp32/Components/gdbstub/gdbstub.c @@ -0,0 +1,29 @@ +#include + +void gdb_enable(bool state) +{ +} + +GdbState gdb_present(void) +{ + return eGDB_NotPresent; +} + +void __attribute__((weak)) gdb_on_attach(bool attached) +{ +} + +void gdb_detach(void) +{ +} + + + +unsigned __gdb_no_op(void) +{ + return 0; +} + +//#define NOOP __attribute__((weak, alias("__gdb_no_op"))) +// +//void gdb_on_attach(bool attached) NOOP; diff --git a/Sming/Arch/Esp32/Components/sming-arch/component.mk b/Sming/Arch/Esp32/Components/sming-arch/component.mk index 88a4d356c4..70ecd54254 100644 --- a/Sming/Arch/Esp32/Components/sming-arch/component.mk +++ b/Sming/Arch/Esp32/Components/sming-arch/component.mk @@ -20,6 +20,7 @@ COMPONENT_DEPENDS := \ fatfs \ esp_spiffs \ esp32 \ + gdbstub \ esptool # diff --git a/Sming/Arch/Esp8266/Components/gdbstub/gdbhostio.cpp b/Sming/Arch/Esp8266/Components/gdbstub/gdbhostio.cpp index 891a74cd32..40e6c6c342 100644 --- a/Sming/Arch/Esp8266/Components/gdbstub/gdbhostio.cpp +++ b/Sming/Arch/Esp8266/Components/gdbstub/gdbhostio.cpp @@ -59,6 +59,7 @@ void ATTR_GDBEXTERNFN gdbHandleHostIo(char* commandBuffer, unsigned cmdLen) unsigned flags = GdbPacket::readHexValue(data); ++data; // Skip , unsigned mode = GdbPacket::readHexValue(data); // Skip mode (not used) + (void)mode; FileOpenFlags openFlags; if((flags & 0xff) == O_RDWR) { diff --git a/Sming/Arch/Esp8266/Components/gdbstub/gdbsyscall.cpp b/Sming/Arch/Esp8266/Components/gdbstub/gdbsyscall.cpp index 76f76a0535..e24afb0383 100644 --- a/Sming/Arch/Esp8266/Components/gdbstub/gdbsyscall.cpp +++ b/Sming/Arch/Esp8266/Components/gdbstub/gdbsyscall.cpp @@ -203,20 +203,26 @@ bool ATTR_GDBEXTERNFN gdb_syscall_complete(const char* data) ++data; isNeg = true; } - int len = GdbPacket::readHexValue(data); + int retcode = GdbPacket::readHexValue(data); if(isNeg) { - len = -len; + retcode = -retcode; } + syscall_info.result = retcode; char ctrl_c_flag = '\0'; if(*data == ',') { ++data; - unsigned err = GdbPacket::readHexValue(data); - syscall_info.result = -err; - } else { - syscall_info.result = len; + errno = GdbPacket::readHexValue(data); + if(*data == ',') { + ++data; + ctrl_c_flag = *data; + if(ctrl_c_flag) { + bitSet(gdb_state.flags, DBGFLAG_CTRL_BREAK); + } + } + } else { switch(syscall_info.command) { case eGDBSYS_gettimeofday: { auto tv = syscall_info.gettimeofday.tv; @@ -244,14 +250,6 @@ bool ATTR_GDBEXTERNFN gdb_syscall_complete(const char* data) } } - if(*data == ',') { - ++data; - ctrl_c_flag = *data; - if(ctrl_c_flag) { - bitSet(gdb_state.flags, DBGFLAG_CTRL_BREAK); - } - } - if(syscall_info.callback != nullptr) { System.queueCallback(TaskCallback(syscall_info.callback), &syscall_info); } diff --git a/Sming/Arch/Esp8266/Components/libc/component.mk b/Sming/Arch/Esp8266/Components/libc/component.mk index e09a8fe3b7..8d7698360d 100644 --- a/Sming/Arch/Esp8266/Components/libc/component.mk +++ b/Sming/Arch/Esp8266/Components/libc/component.mk @@ -1,14 +1,14 @@ COMPONENT_SRCDIRS := COMPONENT_INCDIRS := include -COMPONENT_SRCFILES := libc.c +COMPONENT_SRCDIRS := src COMPONENT_DOXYGEN_INPUT := include/sys ifeq ($(USE_NEWLIB),1) -COMPONENT_SRCFILES += libc_replacements.c +COMPONENT_SRCDIRS += src/newlib EXTRA_LIBS += m c gcc else -COMPONENT_SRCFILES += pgmspace.c +COMPONENT_SRCDIRS += src/oldlib LIBDIRS += $(COMPONENT_PATH)/lib EXTRA_LIBS += microc microgcc setjmp endif diff --git a/Sming/Arch/Esp8266/Components/libc/libc.c b/Sming/Arch/Esp8266/Components/libc/src/libc.c similarity index 100% rename from Sming/Arch/Esp8266/Components/libc/libc.c rename to Sming/Arch/Esp8266/Components/libc/src/libc.c diff --git a/Sming/Arch/Esp8266/Components/libc/libc_replacements.c b/Sming/Arch/Esp8266/Components/libc/src/newlib/libc_replacements.c similarity index 100% rename from Sming/Arch/Esp8266/Components/libc/libc_replacements.c rename to Sming/Arch/Esp8266/Components/libc/src/newlib/libc_replacements.c diff --git a/Sming/Arch/Esp8266/Components/libc/pgmspace.c b/Sming/Arch/Esp8266/Components/libc/src/oldlib/pgmspace.c similarity index 100% rename from Sming/Arch/Esp8266/Components/libc/pgmspace.c rename to Sming/Arch/Esp8266/Components/libc/src/oldlib/pgmspace.c diff --git a/Sming/Arch/Esp8266/Components/libc/src/oldlib/strerror.c b/Sming/Arch/Esp8266/Components/libc/src/oldlib/strerror.c new file mode 100644 index 0000000000..149954c15e --- /dev/null +++ b/Sming/Arch/Esp8266/Components/libc/src/oldlib/strerror.c @@ -0,0 +1,22 @@ +/**** + * Sming Framework Project - Open Source framework for high efficiency native ESP8266 development. + * Created 2015 by Skurydin Alexey + * http://github.com/SmingHub/Sming + * All files of the Sming Core are provided under the LGPL v3 license. + * + * strerror.c - microc library doesn't contain strerror_r + * + ****/ + +#include + +int __xpg_strerror_r(int err, char* buf, size_t bufSize) +{ + m_snprintf(buf, bufSize, "ERROR #%u", err); + if(buf != NULL && bufSize > 0) { + buf[bufSize - 1] = '\0'; + } + return 0; +} + +int strerror_r(int err, char* buf, size_t bufSize) __attribute__((weak, alias("__xpg_strerror_r"))); diff --git a/Sming/Arch/Host/Components/gdbstub/gdb_syscall.cpp b/Sming/Arch/Host/Components/gdbstub/gdb_syscall.cpp index ae3c54f47a..91367581e6 100644 --- a/Sming/Arch/Host/Components/gdbstub/gdb_syscall.cpp +++ b/Sming/Arch/Host/Components/gdbstub/gdb_syscall.cpp @@ -2,5 +2,6 @@ int gdb_syscall(const GdbSyscallInfo& info) { + errno = ENODEV; return -1; }