tech-toolchain archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

vax binutils 2.39 gas problems



It looks vax builds fail in many sources that use __asm() statements
after switching vax to using new binutils 2.39.

Daily buildlog says:
 https://releng.netbsd.org/builds/HEAD/202301261240Z/vax.build.failed
> dependall ===> lib/../external/gpl3/gcc/lib/libgcc/libgcov
> /home/source/ab/HEAD/src/external/gpl3/gcc/dist/libgcc/libgcc2.c: Assembler messages:
> /home/source/ab/HEAD/src/external/gpl3/gcc/dist/libgcc/libgcc2.c:553: Error: unknown pseudo-op: `.'


In src/sys/arch/vax/boot/boot (to commit my local fix) I got:
---
#   compile  sa/loadfile.o
/s/cvs/src/obj.vax/tooldir.NetBSD-9.3-i386/bin/vax--netbsdelf-gcc -O2 \
-ffreestanding -fno-pic -fno-unwind-tables    -std=gnu99  -Wall \
-Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith \
-Wno-sign-compare  -Wsystem-headers   -Wno-traditional \
  -Wa,--fatal-warnings  -Werror  \
  -I/s/cvs/src/sys/arch/vax/boot/boot/../../../../lib/libsa \
--sysroot=/s/cvs/src/obj.vax/destdir.vax -DSUPPORT_BOOTPARAMS \
-DSUPPORT_BOOTP -DSUPPORT_DHCP -D_STANDALONE -DNO_MID_CHECK \
-DLIBSA_CREAD_NOCRC -I/s/cvs/src/sys/arch/vax/boot/boot/../../../../lib/libkern/../../../common/lib/libc/quad \
-I/s/cvs/src/sys/arch/vax/boot/boot/../../../../lib/libkern/../../../common/lib/libc/string \
-I/s/cvs/src/sys/arch/vax/boot/boot/../../../../lib/libkern/../../../common/lib/libc/arch/vax/string \
-I/s/cvs/src/sys/arch/vax/boot/boot/../../../../lib/libkern/../../../common/lib/libc/arch/vax/atomic \
-I/s/cvs/src/sys/arch/vax/boot/boot/../../../../lib/libkern/../../../common/lib/libc/hash/sha3 \
-I../../. -I/s/cvs/src/sys/arch/vax/boot/boot/../../../../ \
-I/s/cvs/src/sys/arch/vax/boot/boot/../../ \
-I/s/cvs/src/sys/arch/vax/boot/boot/../common -I/s/cvs/src/sys/arch/vax/boot/boot/../../include \
-DRELOC=0x7d0000 -D_STANDALONE \
-I/s/cvs/src/sys/arch/vax/boot/boot/../../../../lib/libsa/../../../common/dist/zlib \
 -DCOMPAT_UFS  -D__INTERNAL_LIBSA_CREAD  -Wno-pointer-sign -c  \
  /s/cvs/src/sys/arch/vax/boot/boot/../../../../lib/libsa/loadfile.c \
-o loadfile.o
loadfile.s: Assembler messages:
loadfile.s:99: Warning: missing closing `"'
loadfile.s:99: Fatal error: Ignoring statement due to "Unknown operator"

*** Failed target:  loadfile.o
---

The asm file around line 99 in loadfile.S per -save_temps:
---
 87  .L8:
 88  	pushab .LC2
 89  	calls $1,(%r6)
 90  	movzbl $79,errno
 91  	movzbl $79,%r0
 92  	ret
 93  .L34:
 94  #APP
 95  # 47 "../.././machine/byte_swap.h" 1
 96  	rotl	$-8, %r0, %r2	
 97  insv	%r2, $16, $8, %r2	
 98  rotl	$8, %r0, %r1	
 99  movb	%r1, %r2
100  # 0 "" 2
101  #NO_APP
102  	cmpw %r2,$263
103  	jeql .L12
104  #APP
105  # 47 "../.././machine/byte_swap.h" 1
106  	rotl	$-8, %r0, %r2	
107  insv	%r2, $16, $8, %r2	
108  rotl	$8, %r0, %r1	
109  movb	%r1, %r2
110  # 0 "" 2
111  #NO_APP
---

So it's come from inline asm in byte_swap.h:

---
static __inline uint32_t __attribute__((__unused__))
__byte_swap_u32_variable(uint32_t x)
{
	uint32_t y;

	__asm volatile(
		"rotl $-8, %1, %0 \n"
		"insv %0, $16, $8, %0 \n"
		"rotl $8, %1, %%r1 \n"
		"movb %%r1, %0"
		: "=&r" (y)
		: "r" (x)
		: "r1", "cc");

	return (y);
}
---

If I changed the following line in the inline function
> 		"movb %%r1, %0"
to
> 		"movb %%r1, %0  "
gas no longer complained it, so it smells corrupted buffer.

I have checked several changes in binutils/dist/gas/config/tc-vax.c
but I cannot find an obvious one.

Any ideas?

---
Izumi Tsutsui


Home | Main Index | Thread Index | Old Index