newlib: Compiler se confunde cuando se construye la compatibilidad de 32 bits

Estoy compilando newlib para que pueda continuar la construcción de mi cross-compiler, pero Newlib se está confundiendo con el soporte de 32 bits que también incluí en mi cross-compiler.

Ya tengo mi compilador compilado e instalado, pero falta una biblioteca estándar junto con libgcc, por lo que la mayoría de los programas no compilarán, pero los programas que no utilizan funciones estándar compilarán mientras la -nostdlib argumentación se utiliza

Si me estás pidiendo: "¡Deberías usar glibc en su lugar!", Responderé: Requiere archivos fuente de Linux, pero el código fuente de Linux no juega bien en Windows, porque Windows piensa que algunos archivos son los mismos debido al sistema de archivos insensible en caso.

Los errores son:

x86_64-linux-gnu-gcc  -m32 -DPACKAGE_NAME=\"newlib\" -DPACKAGE_TARNAME=\"newlib\" -DPACKAGE_VERSION=\"4.0.0\" -DPACKAGE_STRING=\"newlib\ 4.0.0\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -I. -I../../../../../../../newlib/newlib/libc/machine/x86_64 -fno-builtin -DMISSING_SYSCALL_NAMES -DHAVE_INIT_FINI     -fno-builtin -DMISSING_SYSCALL_NAMES -DHAVE_INIT_FINI   -nostdlib  -m32 -c -o lib_a-setjmp.o `test -f 'setjmp.S' || echo '../../../../../../../newlib/newlib/libc/machine/x86_64/'`setjmp.S
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S: Assembler messages:
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:25: Error: bad register name `%rbx'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:26: Error: bad register name `%rbp'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:27: Error: bad register name `%r12'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:28: Error: bad register name `%r13'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:29: Error: bad register name `%r14'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:30: Error: bad register name `%r15'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:31: Error: bad register name `%rsp)'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:32: Error: bad register name `%rax'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:33: Error: bad register name `%rsp)'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:34: Error: bad register name `%rax'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:35: Error: bad register name `%rax'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:39: Error: bad register name `%rsi'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:41: Error: bad register name `%rdi)'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:44: Error: bad register name `%rdi)'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:45: Error: bad register name `%rdi)'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:46: Error: bad register name `%rdi)'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:47: Error: bad register name `%rdi)'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:48: Error: bad register name `%rdi)'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:49: Error: bad register name `%rdi)'
../../../../../../../newlib/newlib/libc/machine/x86_64/setjmp.S:50: Error: bad register name `%rdi)'

Aquí está todo el registro:

Original (algunos partes están en español)
Traducción en inglés

Mi compilador es: MinGW-w64 x86-64 (de MSYS2)
El cross-compiler que intento construir es: Linux x86-64

Pregunta hecha hace 3 años, 4 meses, 27 días - Por logicluminary


3 Respuestas:

  • Lo arreglé. Simplemente deshabilitado multilib, porque simplemente puedo construir otro compilador de 32 bits.

    Respondida el Dec 18, 2020 a las 10:57 - por quantumcoderd26d

    Votos positivos: 0 | Votos negativos: 0

  • El error que estás viendo indica que el ensamblador no reconoce los nombres de los registros de 64 bits (%rbx, %rbp, etc.) cuando estás intentando compilar con la bandera -m32 para generar código de 32 bits.

    La causa principal de este error es que estás compilando el código fuente de setjmp.S que está destinado a ser ensamblado para la arquitectura de 64 bits, pero estás tratando de compilarlo con la configuración de 32 bits, lo que provoca la confusión con los registros de 64 bits.

    Para solucionar este problema, asegúrate de compilar el código fuente de setjmp.S utilizando la configuración de 64 bits en lugar de 32 bits. Si tu cross-compiler es para la arquitectura de Linux x86-64, entonces no deberías usar la bandera -m32 al compilar el código fuente de newlib.

    Intenta realizar la compilación sin la opción -m32 o cualquier otra opción que fuerce a compilar como código de 32 bits, de esta forma se evitará el error relacionado con los registros de 64 bits.

    Respondida el Dec 19, 2020 a las 10:54 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • c:``` a

    恕ust/

    Respondida el Dec 19, 2020 a las 11:05 - por Gemini

    Votos positivos: 0 | Votos negativos: 0