Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix compiling errors while using gcc-7.2.0 for the crosstool-ng toolchain #1163

Closed
wants to merge 5 commits into from
Closed

Fix compiling errors while using gcc-7.2.0 for the crosstool-ng toolchain #1163

wants to merge 5 commits into from

Conversation

brainstorm
Copy link
Contributor

@brainstorm brainstorm commented Oct 25, 2017

Shouldn't break anything on current crosstool-ng gcc<5.2.x toolchains... I guess.

This is the result of following and fixing the stream of errors that this user observed:

https://www.esp32.com/viewtopic.php?f=2&t=3362

Apparently gcc7.2.0 flags as errors that i.e rcsid is declared but not used... I guess I'm missing some more lax gcc flag in crosstool-ng, I'll followup with the accompanying PR there too (crosstool-ng toolchain).

Meanwhile, I'm leaving a working .config for crosstool-ng here (just bumping versions and applying this GCC patch, if someone is interested):

#
# Automatically generated file; DO NOT EDIT.
# Crosstool-NG Configuration
#
CT_CONFIGURE_has_make381=y
CT_CONFIGURE_has_xz=y
CT_CONFIGURE_has_svn=y
CT_MODULES=y

#
# Paths and misc options
#

#
# crosstool-NG behavior
#
# CT_OBSOLETE is not set
CT_EXPERIMENTAL=y
# CT_ALLOW_BUILD_AS_ROOT is not set
# CT_DEBUG_CT is not set

#
# Paths
#
CT_LOCAL_TARBALLS_DIR=""
CT_CUSTOM_LOCATION_ROOT_DIR=""
CT_WORK_DIR="${CT_TOP_DIR}/.build"
CT_PREFIX_DIR="${CT_TOP_DIR}/builds/${CT_TARGET}"
CT_INSTALL_DIR="${CT_PREFIX_DIR}"
CT_RM_RF_PREFIX_DIR=y
CT_REMOVE_DOCS=y
CT_INSTALL_DIR_RO=y
CT_STRIP_HOST_TOOLCHAIN_EXECUTABLES=y
# CT_STRIP_TARGET_TOOLCHAIN_EXECUTABLES is not set

#
# Downloading
#
# CT_FORBID_DOWNLOAD is not set
# CT_FORCE_DOWNLOAD is not set
CT_CONNECT_TIMEOUT=10
# CT_ONLY_DOWNLOAD is not set
# CT_USE_MIRROR is not set

#
# Extracting
#
# CT_FORCE_EXTRACT is not set
CT_OVERIDE_CONFIG_GUESS_SUB=y
# CT_ONLY_EXTRACT is not set
# CT_PATCH_BUNDLED is not set
# CT_PATCH_LOCAL is not set
CT_PATCH_BUNDLED_LOCAL=y
# CT_PATCH_LOCAL_BUNDLED is not set
# CT_PATCH_BUNDLED_FALLBACK_LOCAL is not set
# CT_PATCH_LOCAL_FALLBACK_BUNDLED is not set
# CT_PATCH_NONE is not set
CT_PATCH_ORDER="bundled,local"
CT_PATCH_USE_LOCAL=y
CT_LOCAL_PATCH_DIR="${CT_TOP_DIR}/local-patches"

#
# Build behavior
#
CT_PARALLEL_JOBS=0
CT_LOAD=""
CT_USE_PIPES=y
CT_EXTRA_CFLAGS_FOR_BUILD=""
CT_EXTRA_LDFLAGS_FOR_BUILD=""
CT_EXTRA_CFLAGS_FOR_HOST=""
CT_EXTRA_LDFLAGS_FOR_HOST=""
# CT_CONFIG_SHELL_SH is not set
# CT_CONFIG_SHELL_ASH is not set
CT_CONFIG_SHELL_BASH=y
# CT_CONFIG_SHELL_CUSTOM is not set
CT_CONFIG_SHELL="${bash}"

#
# Logging
#
# CT_LOG_ERROR is not set
# CT_LOG_WARN is not set
CT_LOG_INFO=y
# CT_LOG_EXTRA is not set
# CT_LOG_ALL is not set
# CT_LOG_DEBUG is not set
CT_LOG_LEVEL_MAX="INFO"
# CT_LOG_SEE_TOOLS_WARN is not set
CT_LOG_PROGRESS_BAR=y
CT_LOG_TO_FILE=y
CT_LOG_FILE_COMPRESS=y

#
# Target options
#
CT_ARCH="xtensa"
CT_ARCH_SUPPORTS_BOTH_MMU=y
CT_ARCH_SUPPORTS_32=y
CT_ARCH_DEFAULT_HAS_MMU=y
CT_ARCH_32=y
CT_ARCH_BITNESS=32
CT_TARGET_CFLAGS="-mlongcalls"
CT_TARGET_LDFLAGS=""
# CT_ARCH_alpha is not set
# CT_ARCH_arm is not set
# CT_ARCH_avr is not set
# CT_ARCH_m68k is not set
# CT_ARCH_microblaze is not set
# CT_ARCH_mips is not set
# CT_ARCH_nios2 is not set
# CT_ARCH_powerpc is not set
# CT_ARCH_s390 is not set
# CT_ARCH_sh is not set
# CT_ARCH_sparc is not set
# CT_ARCH_x86 is not set
CT_ARCH_xtensa=y
CT_ARCH_alpha_AVAILABLE=y
CT_ARCH_arm_AVAILABLE=y
CT_ARCH_avr_AVAILABLE=y
CT_ARCH_m68k_AVAILABLE=y
CT_ARCH_microblaze_AVAILABLE=y
CT_ARCH_mips_AVAILABLE=y
CT_ARCH_nios2_AVAILABLE=y
CT_ARCH_powerpc_AVAILABLE=y
CT_ARCH_s390_AVAILABLE=y
CT_ARCH_sh_AVAILABLE=y
CT_ARCH_sparc_AVAILABLE=y
CT_ARCH_x86_AVAILABLE=y
CT_ARCH_xtensa_AVAILABLE=y
CT_ARCH_SUFFIX=""

#
# Generic target options
#
# CT_MULTILIB is not set
CT_ARCH_USE_MMU=y

#
# Target optimisations
#
CT_ARCH_FLOAT=""

#
# xtensa other options
#
CT_XTENSA_CUSTOM=y
# CT_ARCH_xtensa_fsf is not set
CT_ARCH_XTENSA_CUSTOM_NAME="esp32"
CT_ARCH_XTENSA_CUSTOM_OVERLAY_LOCATION="${CT_TOP_DIR}/overlays"

#
# Toolchain options
#

#
# General toolchain options
#
CT_FORCE_SYSROOT=y
CT_USE_SYSROOT=y
CT_SYSROOT_NAME="sysroot"
CT_SYSROOT_DIR_PREFIX=""
# CT_STATIC_TOOLCHAIN is not set
CT_TOOLCHAIN_PKGVERSION=""
CT_TOOLCHAIN_BUGURL=""

#
# Tuple completion and aliasing
#
CT_TARGET_VENDOR="esp32"
CT_TARGET_ALIAS_SED_EXPR=""
CT_TARGET_ALIAS=""

#
# Toolchain type
#
# CT_NATIVE is not set
CT_CROSS=y
# CT_CROSS_NATIVE is not set
# CT_CANADIAN is not set
CT_TOOLCHAIN_TYPE="cross"

#
# Build system
#
CT_BUILD=""
CT_BUILD_PREFIX=""
CT_BUILD_SUFFIX=""

#
# Misc options
#
# CT_TOOLCHAIN_ENABLE_NLS is not set

#
# Operating System
#
CT_BARE_METAL=y
CT_KERNEL="bare-metal"
CT_KERNEL_bare_metal=y
# CT_KERNEL_linux is not set
CT_KERNEL_bare_metal_AVAILABLE=y
CT_KERNEL_linux_AVAILABLE=y
CT_KERNEL_windows_AVAILABLE=y

#
# Common kernel options
#

#
# Binary utilities
#
CT_ARCH_BINFMT_ELF=y
CT_BINUTILS="binutils"
CT_BINUTILS_binutils=y

#
# GNU binutils
#
# CT_CC_BINUTILS_SHOW_LINARO is not set
CT_BINUTILS_V_2_25_1=y
# CT_BINUTILS_V_2_25 is not set
# CT_BINUTILS_V_2_24 is not set
# CT_BINUTILS_V_2_23_2 is not set
# CT_BINUTILS_V_2_23_1 is not set
# CT_BINUTILS_V_2_22 is not set
# CT_BINUTILS_V_2_21_53 is not set
# CT_BINUTILS_V_2_21_1a is not set
# CT_BINUTILS_V_2_20_1a is not set
# CT_BINUTILS_V_2_19_1a is not set
# CT_BINUTILS_V_2_18a is not set
# CT_BINUTILS_CUSTOM is not set
CT_BINUTILS_VERSION="2.25.1"
CT_BINUTILS_2_25_1_or_later=y
CT_BINUTILS_2_25_or_later=y
CT_BINUTILS_2_24_or_later=y
CT_BINUTILS_2_23_or_later=y
CT_BINUTILS_2_22_or_later=y
CT_BINUTILS_2_21_or_later=y
CT_BINUTILS_2_20_or_later=y
CT_BINUTILS_2_19_or_later=y
CT_BINUTILS_2_18_or_later=y
CT_BINUTILS_HAS_HASH_STYLE=y
CT_BINUTILS_HAS_GOLD=y
CT_BINUTILS_HAS_PLUGINS=y
CT_BINUTILS_HAS_PKGVERSION_BUGURL=y
CT_BINUTILS_LINKER_LD=y
CT_BINUTILS_LINKERS_LIST="ld"
CT_BINUTILS_LINKER_DEFAULT="bfd"
# CT_BINUTILS_PLUGINS is not set
CT_BINUTILS_EXTRA_CONFIG_ARRAY=""

#
# binutils other options
#

#
# C-library
#
CT_LIBC="newlib"
CT_LIBC_VERSION="2.2.0"
CT_LIBC_newlib=y
# CT_LIBC_none is not set
CT_LIBC_avr_libc_AVAILABLE=y
CT_LIBC_glibc_AVAILABLE=y
CT_THREADS="none"
CT_LIBC_mingw_AVAILABLE=y
CT_LIBC_musl_AVAILABLE=y
CT_LIBC_newlib_AVAILABLE=y
# CT_CC_NEWLIB_SHOW_LINARO is not set
CT_LIBC_NEWLIB_V_2_2_0=y
# CT_LIBC_NEWLIB_V_2_1_0 is not set
# CT_LIBC_NEWLIB_V_2_0_0 is not set
# CT_LIBC_NEWLIB_V_1_20_0 is not set
# CT_LIBC_NEWLIB_V_1_19_0 is not set
# CT_LIBC_NEWLIB_V_1_18_0 is not set
# CT_LIBC_NEWLIB_V_1_17_0 is not set
# CT_LIBC_NEWLIB_CUSTOM is not set
CT_LIBC_NEWLIB_2_2=y
CT_LIBC_NEWLIB_2_2_or_later=y
CT_LIBC_NEWLIB_2_1_or_later=y
CT_LIBC_NEWLIB_2_0_or_later=y
CT_LIBC_NEWLIB_TARGET_CFLAGS=""
CT_LIBC_none_AVAILABLE=y
CT_LIBC_uClibc_AVAILABLE=y
CT_LIBC_SUPPORT_THREADS_NONE=y
CT_LIBC_PROVIDES_CXA_ATEXIT=y

#
# Common C library options
#
CT_THREADS_NONE=y

#
# newlib other options
#
# CT_LIBC_NEWLIB_IO_C99FMT is not set
# CT_LIBC_NEWLIB_IO_LL is not set
# CT_LIBC_NEWLIB_IO_FLOAT is not set
CT_LIBC_NEWLIB_DISABLE_SUPPLIED_SYSCALLS=y
CT_LIBC_NEWLIB_ENABLE_TARGET_OPTSPACE=y
CT_LIBC_NEWLIB_EXTRA_CONFIG_ARRAY=""

#
# C compiler
#
CT_CC="gcc"
CT_CC_CORE_PASS_2_NEEDED=y
CT_CC_gcc=y
# CT_CC_GCC_SHOW_LINARO is not set
CT_CC_GCC_V_7_2_0=y
# CT_CC_GCC_V_5_5_0=y
# CT_CC_GCC_V_5_2_0=y
# CT_CC_GCC_V_4_9_3 is not set
# CT_CC_GCC_V_4_8_5 is not set
# CT_CC_GCC_V_4_7_4 is not set
# CT_CC_GCC_V_4_6_4 is not set
# CT_CC_GCC_V_4_5_4 is not set
# CT_CC_GCC_V_4_4_7 is not set
# CT_CC_GCC_V_4_3_6 is not set
# CT_CC_GCC_V_4_2_4 is not set
# CT_CC_GCC_CUSTOM is not set
CT_CC_GCC_4_2_or_later=y
CT_CC_GCC_4_3_or_later=y
CT_CC_GCC_4_4_or_later=y
CT_CC_GCC_4_5_or_later=y
CT_CC_GCC_4_6_or_later=y
CT_CC_GCC_4_7_or_later=y
CT_CC_GCC_4_8_or_later=y
CT_CC_GCC_4_9_or_later=y
CT_CC_GCC_5=y
CT_CC_GCC_5_or_later=y
CT_CC_GCC_HAS_GRAPHITE=y
CT_CC_GCC_USE_GRAPHITE=y
CT_CC_GCC_HAS_LTO=y
CT_CC_GCC_USE_LTO=y
CT_CC_GCC_HAS_PKGVERSION_BUGURL=y
CT_CC_GCC_HAS_BUILD_ID=y
CT_CC_GCC_HAS_LNK_HASH_STYLE=y
CT_CC_GCC_USE_GMP_MPFR=y
CT_CC_GCC_USE_MPC=y
CT_CC_GCC_HAS_LIBQUADMATH=y
CT_CC_GCC_HAS_LIBSANITIZER=y
CT_CC_GCC_VERSION="7.2.0"
# CT_CC_LANG_FORTRAN is not set
CT_CC_GCC_ENABLE_CXX_FLAGS="-fno-rtti -ffunction-sections"
CT_CC_GCC_CORE_EXTRA_CONFIG_ARRAY="--enable-threads=posix"
CT_CC_GCC_EXTRA_CONFIG_ARRAY="--disable-libstdcxx-verbose --enable-threads=posix --enable-gcov-custom-rtio"
CT_CC_GCC_EXTRA_ENV_ARRAY=""
# CT_CC_GCC_TARGET_FINAL is not set
# CT_CC_GCC_STATIC_LIBSTDCXX is not set
# CT_CC_GCC_SYSTEM_ZLIB is not set

#
# Optimisation features
#

#
# Settings for libraries running on target
#
CT_CC_GCC_ENABLE_TARGET_OPTSPACE=y
# CT_CC_GCC_LIBMUDFLAP is not set
# CT_CC_GCC_LIBGOMP is not set
# CT_CC_GCC_LIBSSP is not set
# CT_CC_GCC_LIBQUADMATH is not set

#
# Misc. obscure options.
#
# CT_CC_CXA_ATEXIT is not set
# CT_CC_GCC_DISABLE_PCH is not set
# CT_CC_GCC_LDBL_128 is not set
# CT_CC_GCC_BUILD_ID is not set
CT_CC_GCC_LNK_HASH_STYLE_DEFAULT=y
# CT_CC_GCC_LNK_HASH_STYLE_SYSV is not set
# CT_CC_GCC_LNK_HASH_STYLE_GNU is not set
# CT_CC_GCC_LNK_HASH_STYLE_BOTH is not set
CT_CC_GCC_LNK_HASH_STYLE=""
CT_CC_GCC_DEC_FLOAT_AUTO=y
# CT_CC_GCC_DEC_FLOAT_BID is not set
# CT_CC_GCC_DEC_FLOAT_DPD is not set
# CT_CC_GCC_DEC_FLOATS_NO is not set
CT_CC_SUPPORT_CXX=y
CT_CC_SUPPORT_FORTRAN=y
CT_CC_SUPPORT_JAVA=y
CT_CC_SUPPORT_ADA=y
CT_CC_SUPPORT_OBJC=y
CT_CC_SUPPORT_OBJCXX=y
CT_CC_SUPPORT_GOLANG=y

#
# Additional supported languages:
#
CT_CC_LANG_CXX=y
CT_CC_LANG_OTHERS=""

#
# Debug facilities
#
# CT_DEBUG_dmalloc is not set
# CT_DEBUG_duma is not set
CT_DEBUG_gdb=y
CT_GDB_CROSS=y
# CT_GDB_CROSS_STATIC is not set
# CT_GDB_CROSS_SIM is not set
CT_GDB_CROSS_PYTHON=y
CT_GDB_CROSS_EXTRA_CONFIG_ARRAY=""

#
# In bare-metal, you'll need to   
#

#
# provide your own gdbserver stub.
#

#
# gdb version
#
# CT_DEBUG_GDB_SHOW_LINARO is not set
CT_GDB_V_7_10=y
# CT_GDB_V_7_9_1 is not set
# CT_GDB_V_7_9 is not set
# CT_GDB_V_7_8_2 is not set
# CT_GDB_V_7_8_1 is not set
# CT_GDB_V_7_8 is not set
# CT_GDB_V_7_7_1 is not set
# CT_GDB_V_7_7 is not set
# CT_GDB_V_7_6_1 is not set
# CT_GDB_V_7_5_1 is not set
# CT_GDB_V_7_4_1 is not set
# CT_GDB_V_7_4 is not set
# CT_GDB_V_7_3_1 is not set
# CT_GDB_V_7_3a is not set
# CT_GDB_V_7_2a is not set
# CT_GDB_V_7_1a is not set
# CT_GDB_V_7_0_1a is not set
# CT_GDB_V_7_0a is not set
# CT_GDB_V_6_8a is not set
# CT_GDB_CUSTOM is not set
CT_GDB_7_2_or_later=y
CT_GDB_7_0_or_later=y
CT_GDB_HAS_PKGVERSION_BUGURL=y
CT_GDB_HAS_PYTHON=y
CT_GDB_INSTALL_GDBINIT=y
CT_GDB_VERSION="7.10"
# CT_DEBUG_ltrace is not set
# CT_DEBUG_strace is not set

#
# Companion libraries
#
CT_COMPLIBS_NEEDED=y
CT_GMP_NEEDED=y
CT_MPFR_NEEDED=y
CT_ISL_NEEDED=y
CT_MPC_NEEDED=y
CT_EXPAT_NEEDED=y
CT_NCURSES_NEEDED=y
CT_COMPLIBS=y
CT_GMP=y
CT_MPFR=y
CT_ISL=y
CT_MPC=y
CT_EXPAT=y
CT_NCURSES=y
CT_GMP_V_6_1_2=y
# CT_GMP_V_5_1_3 is not set
# CT_GMP_V_5_1_1 is not set
# CT_GMP_V_5_0_2 is not set
# CT_GMP_V_5_0_1 is not set
# CT_GMP_V_4_3_2 is not set
# CT_GMP_V_4_3_1 is not set
# CT_GMP_V_4_3_0 is not set
CT_GMP_5_0_2_or_later=y
CT_GMP_VERSION="6.1.2"
CT_MPFR_V_3_1_6=y
# CT_MPFR_V_3_1_2 is not set
# CT_MPFR_V_3_1_0 is not set
# CT_MPFR_V_3_0_1 is not set
# CT_MPFR_V_3_0_0 is not set
# CT_MPFR_V_2_4_2 is not set
# CT_MPFR_V_2_4_1 is not set
# CT_MPFR_V_2_4_0 is not set
CT_MPFR_VERSION="3.1.6"
CT_ISL_V_0_18=y
#CT_ISL_V_0_14=y
# CT_ISL_V_0_12_2 is not set
CT_ISL_V_0_14_or_later=y
CT_ISL_V_0_12_or_later=y
CT_ISL_VERSION="0.18"
#CT_ISL_VERSION="0.14"
CT_MPC_V_1_0_3=y
# CT_MPC_V_1_0_2 is not set
# CT_MPC_V_1_0_1 is not set
# CT_MPC_V_1_0 is not set
# CT_MPC_V_0_9 is not set
# CT_MPC_V_0_8_2 is not set
# CT_MPC_V_0_8_1 is not set
# CT_MPC_V_0_7 is not set
CT_MPC_VERSION="1.0.3"
CT_EXPAT_V_2_2_4=y
CT_EXPAT_VERSION="2.2.4"
CT_NCURSES_V_6_0=y
CT_NCURSES_VERSION="6.0"
# CT_NCURSES_NEW_ABI is not set

#
# Companion libraries common options
#
# CT_COMPLIBS_CHECK is not set

#
# Companion tools
#

#
# READ HELP before you say 'Y' below !!!
#
# CT_COMP_TOOLS is not set

#
# Test suite
#
# CT_TEST_SUITE_GCC is not set

@CLAassistant
Copy link

CLAassistant commented Oct 25, 2017

CLA assistant check
All committers have signed the CLA.

@projectgus
Copy link
Contributor

That's very interesting @brainstorm , thanks.

Although they look like "good" fixes for readability, the changes to cJSON & argtable are tweaks to upstream code. We have a policy of only modifying upstream code when we can't help it, because it makes it harder to apply updates to that code in the future.

Rather than modifying these files, do you mind adding custom CFLAGS additions to the component.mk files to disable the offending warnings? You can see some examples of how to do this in components/libsodium/component.mk and components/lwip/component.mk.

(Also feel free to approaach the upstream maintainers about fixes, as well!)

Very interested to know how you get on with gcc 7.2.0.

@@ -569,7 +569,7 @@ static const uint8_t * _mdns_read_fqdn(const uint8_t * packet, const uint8_t * s
&& (strcmp(buf, MDNS_DEFAULT_DOMAIN) != 0)
&& (strcmp(buf, "ip6") != 0)
&& (strcmp(buf, "in-addr") != 0)) {
snprintf((char*)name, MDNS_NAME_BUF_LEN, "%s.%s", name->host, buf);
snprintf((char*)name, MDNS_NAME_BUF_LEN+1, "%s.%s", name->host, buf);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think this is correct, the destination is only MDNS_NAME_BUF_LEN size.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I ran into a version of this one: https://bugzilla.redhat.com/show_bug.cgi?id=1431678

How would you express/fix it?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe using strncat instead?

Copy link
Contributor

@projectgus projectgus Oct 27, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm actually having trouble reproducing this with my version of gcc 7.2 for some reason. But I don't have a lot of time to spend on this either.

The gcc changelog suggests that the other approach is to check the return value of snprintf to make sure the output wasn't truncated. This seems like the correct fix:
https://gcc.gnu.org/gcc-7/changes.html (search for -Wformat-truncated)

In case of failure, I think the correct behaviour should be to set name[0] = 0 and return NULL. @me-no-dev can you please confirm?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That could work but it is essentially copying name->host on top of itself instead of appending

Copy link
Contributor

@projectgus projectgus Oct 27, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah right, I missed that this behaviour was appending in place. strlcat() may make the most sense then, with a check that the additional length will fit in the assigned buffer.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@projectgus @negativekelvin Do you guys mean sth like this?:

-                snprintf((char*)name, MDNS_NAME_BUF_LEN+1, "%s.%s", name->host, buf);
+              //snprintf((char*)name, MDNS_NAME_BUF_LEN, "%s.%s", name->host, buf);
+                strlcat(name->host, (char*)'.', sizeof(name->host));
+                strlcat(name->host, buf, sizeof(name->host));

Here's a good read from Theo: https://www.sudo.ws/todd/papers/strlcpy.html

I hope I applied it correctly for now :-S... is the check for truncation necessary in this case?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, like this looks good to me.

@projectgus
Copy link
Contributor

@brainstorm Are you still working on this?

@brainstorm
Copy link
Contributor Author

I'll be retaking this today among other things at some random café in Chapel Street, Melbourne ;)

@@ -569,7 +569,9 @@ static const uint8_t * _mdns_read_fqdn(const uint8_t * packet, const uint8_t * s
&& (strcmp(buf, MDNS_DEFAULT_DOMAIN) != 0)
&& (strcmp(buf, "ip6") != 0)
&& (strcmp(buf, "in-addr") != 0)) {
snprintf((char*)name, MDNS_NAME_BUF_LEN, "%s.%s", name->host, buf);
//snprintf((char*)name, MDNS_NAME_BUF_LEN, "%s.%s", name->host, buf);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please delete this instead of commenting it (git has the history)

@@ -569,7 +569,9 @@ static const uint8_t * _mdns_read_fqdn(const uint8_t * packet, const uint8_t * s
&& (strcmp(buf, MDNS_DEFAULT_DOMAIN) != 0)
&& (strcmp(buf, "ip6") != 0)
&& (strcmp(buf, "in-addr") != 0)) {
snprintf((char*)name, MDNS_NAME_BUF_LEN, "%s.%s", name->host, buf);
//snprintf((char*)name, MDNS_NAME_BUF_LEN, "%s.%s", name->host, buf);
strlcat(name->host, (char*)'.', sizeof(name->host));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you mean "." instead of (char *)'.'. The latter is a pointer to the ASCII value of dot, which is certainly not valid memory. :)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Certainly, fixed ;)

@paulreimer
Copy link
Contributor

I would also like to verify this PR + a toolchain built using gcc 7, and including these changes.

However, I am not sure what patch is required to generate the psram-workaround portion to obtain something similar to libstdc++-psram-workaround.a.

@brainstorm
Copy link
Contributor Author

@paulreimer I guess you are looking for this one? Not sure if it will generate the .a accordingly though, haven't delved yet into psram with the esp32 at all:

https://github.com/espressif/crosstool-NG/blob/e28a01150aebd2382dc11c97a652aee1371a5922/local-patches/gcc/5.2.0/0007-xtensa-add-workaround-for-pSRAM-cache-issue-in-ESP32.patch

Try to apply it against gcc 7.x and let me know (perhaps via issuing a PR to this same branch)?

@projectgus
Copy link
Contributor

@paulreimer

Just to confirm what @brainstorm said, if the toolchain has the patch linked above and you compile with the -mfix-esp32-psram-cache-issue flag then the resulting binary should be PSRAM-safe.

Angus

@projectgus projectgus added the Status: Pending blocked by some other factor label Dec 3, 2017
@projectgus
Copy link
Contributor

Thanks for the updates, @brainstorm . I've pushed this into our internal review & merge queue.

@brainstorm
Copy link
Contributor Author

brainstorm commented Dec 3, 2017

Excellent! Please let me know when you push the accompanying crosstool-ng PR... (hopefully upstream?) so I can put together the Dockcross container for xtensa:

dockcross/dockcross#26

@projectgus
Copy link
Contributor

No problems. As I explained a bit in the linked PR, we probably won't be doing anything to merge gcc 7 toolchain support until upstream decides to act on this themselves. But you're of course welcome to keep working on this (or talk to the upstreams) independently.

igrr pushed a commit that referenced this pull request Dec 7, 2017
…chain

* Change snprintf for strlcat does not complain w/gcc7.2.0 and it is safer, thanks @projectgus
* Use proper quotes for character literals

Merges #1163
igrr pushed a commit that referenced this pull request Dec 7, 2017
* Fixes compilation errors/warnings with gcc 7.2.0

Merges #1163
@projectgus
Copy link
Contributor

Squashed and cherry-picked in the above two commits. Thanks @brainstorm !

@projectgus projectgus closed this Dec 7, 2017
@brainstorm brainstorm deleted the ct-ng-gcc7.2.0 branch December 7, 2017 02:15
@projectgus projectgus mentioned this pull request Dec 7, 2017
igrr pushed a commit that referenced this pull request Dec 29, 2017
…chain

* Change snprintf for strlcat does not complain w/gcc7.2.0 and it is safer, thanks @projectgus
* Use proper quotes for character literals

Merges #1163
igrr pushed a commit that referenced this pull request Dec 29, 2017
* Fixes compilation errors/warnings with gcc 7.2.0

Merges #1163
@igrr igrr removed the Status: Pending blocked by some other factor label Aug 9, 2018
david-cermak pushed a commit to david-cermak/esp-protocols that referenced this pull request Mar 24, 2022
…chain

* Change snprintf for strlcat does not complain w/gcc7.2.0 and it is safer, thanks @projectgus
* Use proper quotes for character literals

Merges espressif/esp-idf#1163


* Original commit: espressif/esp-idf@519edc3
gabsuren pushed a commit to gabsuren/esp-protocols-1 that referenced this pull request Mar 25, 2022
…chain

* Change snprintf for strlcat does not complain w/gcc7.2.0 and it is safer, thanks @projectgus
* Use proper quotes for character literals

Merges espressif/esp-idf#1163


* Original commit: espressif/esp-idf@519edc3
gabsuren pushed a commit to gabsuren/esp-protocols-1 that referenced this pull request Apr 8, 2022
…chain

* Change snprintf for strlcat does not complain w/gcc7.2.0 and it is safer, thanks @projectgus
* Use proper quotes for character literals

Merges espressif/esp-idf#1163


* Original commit: espressif/esp-idf@519edc3
gabsuren pushed a commit to gabsuren/esp-protocols-1 that referenced this pull request May 17, 2022
…chain

* Change snprintf for strlcat does not complain w/gcc7.2.0 and it is safer, thanks @projectgus
* Use proper quotes for character literals

Merges espressif/esp-idf#1163


* Original commit: espressif/esp-idf@519edc3
gabsuren pushed a commit to gabsuren/esp-protocols-1 that referenced this pull request May 27, 2022
…chain

* Change snprintf for strlcat does not complain w/gcc7.2.0 and it is safer, thanks @projectgus
* Use proper quotes for character literals

Merges espressif/esp-idf#1163


* Original commit: espressif/esp-idf@519edc3
gabsuren pushed a commit to gabsuren/esp-protocols-1 that referenced this pull request May 27, 2022
…chain

* Change snprintf for strlcat does not complain w/gcc7.2.0 and it is safer, thanks @projectgus
* Use proper quotes for character literals

Merges espressif/esp-idf#1163


* Original commit: espressif/esp-idf@519edc3
gabsuren pushed a commit to gabsuren/esp-protocols-1 that referenced this pull request May 27, 2022
…chain

* Change snprintf for strlcat does not complain w/gcc7.2.0 and it is safer, thanks @projectgus
* Use proper quotes for character literals

Merges espressif/esp-idf#1163


* Original commit: espressif/esp-idf@519edc3
0xFEEDC0DE64 pushed a commit to 0xFEEDC0DE64/esp-protocols that referenced this pull request Jun 30, 2022
…chain

* Change snprintf for strlcat does not complain w/gcc7.2.0 and it is safer, thanks @projectgus
* Use proper quotes for character literals

Merges espressif/esp-idf#1163


* Original commit: espressif/esp-idf@519edc3
euripedesrocha pushed a commit to euripedesrocha/esp-protocols that referenced this pull request Oct 17, 2022
…chain

* Change snprintf for strlcat does not complain w/gcc7.2.0 and it is safer, thanks @projectgus
* Use proper quotes for character literals

Merges espressif/esp-idf#1163


* Original commit: espressif/esp-idf@519edc3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants