Skip to content

Commit

Permalink
Second (and final) attempt at fixing this issue. (#2675)
Browse files Browse the repository at this point in the history
Whilst using a function to 'hide' the stack return appears to work, integration tests fail in a couple of scenarios (FlashString, RapidXML) because of the way stack space gets used.
For Host builds, the most pragmatic solution is to make `_F(s)` return `s` directly.
That means it gives a `const char*` rather than `char*`, and any attempt to pass this to a function requiring a regular `char*` will fail.
  • Loading branch information
mikee47 authored Oct 13, 2023
1 parent a0585b2 commit c3834dc
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 13 deletions.
7 changes: 0 additions & 7 deletions Sming/Wiring/FakePgmSpace.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,3 @@ int memcmp_aligned(const void* ptr1, const void* ptr2, unsigned len)
auto tail2 = pgm_read_dword(reinterpret_cast<const uint8_t*>(ptr2) + len_aligned);
return memcmp(&tail1, &tail2, len - len_aligned);
}

#ifdef ARCH_HOST
char* smg_return_local(char* buf)
{
return buf;
}
#endif
10 changes: 4 additions & 6 deletions Sming/Wiring/FakePgmSpace.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,12 +76,8 @@ extern "C" {
}))

#ifdef ARCH_HOST
// Internal function to prevent 'dangling pointer' compiler warning
extern char* smg_return_local(char* buf);
#define _F(str) (str)
#else
#define smg_return_local(buf) (buf)
#endif

/**
* @brief Declare and use a flash string inline.
* @param str
Expand All @@ -91,9 +87,11 @@ extern char* smg_return_local(char* buf);
(__extension__({ \
DEFINE_PSTR_LOCAL(__pstr__, str); \
LOAD_PSTR(buf, __pstr__); \
smg_return_local(buf); \
buf; \
}))

#endif

/**
* @brief copy memory aligned to word boundaries
* @param dst
Expand Down

0 comments on commit c3834dc

Please sign in to comment.