https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112563

--- Comment #11 from ro at CeBiTec dot Uni-Bielefeld.DE <ro at CeBiTec dot 
Uni-Bielefeld.DE> ---
> --- Comment #10 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
> (In reply to r...@cebitec.uni-bielefeld.de from comment #9)
[...]
>> I've now come up with an alternative.  It's a bit ugly, but it gets the
>> work done:
>> 
>> diff --git a/libsanitizer/sanitizer_common/sanitizer_redefine_builtins.h
>> b/libsanitizer/sanitizer_common/sanitizer_redefine_builtins.h
>> --- a/libsanitizer/sanitizer_common/sanitizer_redefine_builtins.h
>> +++ b/libsanitizer/sanitizer_common/sanitizer_redefine_builtins.h
>> @@ -17,6 +17,17 @@
>>  // The asm hack only works with GCC and Clang.
>>  #    if !defined(_WIN32)
>>  
>> +// FIXME: Explain.
>> +#    if defined(__sparc__)
>> +#    define ASM_MEM_DEF(FUNC) \
>> +        __asm__(".global " #FUNC "\n" \
>> +                ".type " #FUNC ",function\n" \
>
> Not @function ?

No, this should be #function: that's the only variant sparc as
understands, and gas does for compatibility.

>> +                ".weak " #FUNC "\n" \
>> +                #FUNC ":\n");
>> +ASM_MEM_DEF(__sanitizer_internal_memcpy)
>> +ASM_MEM_DEF(__sanitizer_internal_memmove)
>> +ASM_MEM_DEF(__sanitizer_internal_memset)
>> +#    endif
>>  asm("memcpy = __sanitizer_internal_memcpy");
>>  asm("memmove = __sanitizer_internal_memmove");
>>  asm("memset = __sanitizer_internal_memset");
>> 
>> I've run libsanitizer builds on sparc without this patch (gas only since
>> as fails) and with it (as and gas).  It fixes the as build failure and
>> leaves the same number of calls to mem* functions in libasan.so as an
>> unpatched tree with gas.
>
> If it works, nice.  Can you file it on github.com/llvm/llvm-project as an 
> issue
> and see if upstream is willing to accept it?  I think they'll want some

Can do, either as an issue or directly as a pull request.  I'll run it
through a full llvm build, too, first.

> indentation changes (if defined(__sparc__) is below the _WIN32 #if, so they
> probably want it
> indented more and the define even more.  And dunno if defined(__sparc__) or
> SANITIZER_SPARC should be used.

I know: LLVM has clang/tools/clang-format/clang-format-diff.py to handle
this.  I usually run my patches through that first, unlike it messes up
the existing formatting as was the case for pull request #72973.

The patches also needs an explanatory comment; this was just a proof of
concept.  It might be even better to restrict the hack to __sparc__ &&
__sun__ && __svr4__ to avoid interfering with Linux/sparc64.

Reply via email to