amdgcn build failure

Mike Frysinger vapier@gentoo.org
Sun Mar 20 01:20:04 GMT 2022


On 18 Mar 2022 11:43, Andrew Stubbs wrote:
> Following your commit 96bc16f, merged yesterday, my amdgcn toolchain 
> fails to build. The Newlib built itself completes successfully, but 
> subsequent use of the library is broken.
> 
> The problem seems to be related to the __malloc_lock function, but I 
> can't quite work out why. Here's the error message:
> 
> ld: error: duplicate symbol: __malloc_lock
>  >>> defined at mlock.c:42 (..../newlib/libc/stdlib/mlock.c:42)
>  >>>            libc_a-mlock.o:(__malloc_lock) in archive 
> ..../amdgcn-amdhsa/lib/libc.a
>  >>> defined at malloc_support.c:69 
> (..../newlib/libc/machine/amdgcn/malloc_support.c:69)
>  >>>            libc_a-malloc_support.o:(.text+0x1F8) in archive 
> ..../install/amdgcn-amdhsa/lib/libc.a
> 
> ld: error: duplicate symbol: __malloc_unlock
>  >>> defined at malloc.h:138 (..../newlib/libc/include/malloc.h:138)
>  >>>            libc_a-mlock.o:(__malloc_unlock) in archive 
> ..../amdgcn-amdhsa/lib/libc.a
>  >>> defined at malloc_support.c:96 
> (..../newlib/libc/machine/amdgcn/malloc_support.c:96)
>  >>>            libc_a-malloc_support.o:(.text+0x438) in archive 
> ..../install/amdgcn-amdhsa/lib/libc.a
> collect2: error: ld returned 1 exit status
> 
> (I should mention that the amdgcn port uses the LLVM binary utilities, 
> so the error messages look a little different to GNU ld. I've also 
> elided the long pathnames with "....".)

looks like amdgcn doesn't have a GNU port at all, so i can't really repro
this situation.  i can't explain why it changed.  it might be the overall
ordering changed because of assumptions in the build ...

> Previously only the machine-specific __malloc_lock was used, which is of 
> course the one I want.
> 
> Should those functions be added differently now?

i think you should always use the same name output if you want to override
regardless of my recent change.  the common code defines this in mlock.c,
so i would expect you to put your machine overrides in a mlock.c file in
your machine dir.

this is how all the setjmp, mem*, and str* funcs all work.
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://sourceware.org/pipermail/newlib/attachments/20220319/ddc544d4/attachment.sig>


More information about the Newlib mailing list