I think this is also related to 913. I'll try without my patch (which
we've been having to use since then).

Rick

On Sat, 2020-05-23 at 23:47 +0300, Nadav Har'El wrote:
> Some compilers apparently optimize code in fastlz/ to call memset(),
> so
> the uncompressing boot loader, fastlz/lzloader.cc, needs to implement
> this function. The current implementation called the "builtin"
> memset,
> which, if you look at the compilation result, actually calls memset()
> and results in endless recursion and a hanging boot... This started
> happening on Fedora 32 with Gcc 10, for example.
> 
> So let's implement memset() using the base_memset() we already have
> in
> libc/string/memset.c.
> 
> Fixes #1084.
> 
> Signed-off-by: Nadav Har'El <[email protected]>
> ---
>  fastlz/lzloader.cc | 15 ++++++++++-----
>  1 file changed, 10 insertions(+), 5 deletions(-)
> 
> diff --git a/fastlz/lzloader.cc b/fastlz/lzloader.cc
> index f65fb2be..7eae2191 100644
> --- a/fastlz/lzloader.cc
> +++ b/fastlz/lzloader.cc
> @@ -21,11 +21,16 @@ extern char _binary_loader_stripped_elf_lz_start;
>  extern char _binary_loader_stripped_elf_lz_end;
>  extern char _binary_loader_stripped_elf_lz_size;
>  
> -// std libraries used by fastlz.
> -extern "C" void *memset(void *s, int c, size_t n)
> -{
> -    return __builtin_memset(s, c, n);
> -}
> +// The code in fastlz.cc does not call memset(), but some version of
> gcc
> +// implement some assignments by calling memset(), so we need to
> implement
> +// a memset() function. This is not performance-critical so let's
> stick to
> +// the basic implementation we have in libc/string/memset.c. To
> avoid
> +// compiling this source file a second time (the loader needs
> different
> +// compile parameters), we #include it here instead.
> +extern "C" void *memset(void *s, int c, size_t n);
> +#define memset_base memset
> +#include "libc/string/memset.c"
> +#undef memset_base
>  
>  extern "C" void uncompress_loader()
>  {
> -- 
> 2.26.2
> 

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/osv-dev/d18a6dd80dcdad104b8ed7cc0348e0ebc36dfd19.camel%40rossfell.co.uk.

Reply via email to