Discussion:
Building for armv6/ARM1136J-S using ABE
Bill Davis
2015-09-11 17:54:30 UTC
Permalink
Hi,

I've tried probably a dozen different ABE build command lines with various combinations of cpu/arch/tune on the latest tree and on the 2014.09 release and am unable to build for the armv6/1136J-S.

Before bothering the list, I scoured the gzipped archive back through 2013, and there is little mention of any problems OR successes with armv6. I am wondering if armv6 is supported, and if so, what is the secret sauce ABE command line to build successfully for the 1136J-S.

Some of the builds I tried were missing tarball components, others fail later on such as the one below that gets through building gcc and bombs building the eabi.

--------------------
'abe.sh -target arm-linux-gnueabi -build all -set cpu=arm1136j-s' produces the following, see further below for the gcc version data:


arm-linux-gnueabi-gcc ../sysdeps/arm/aeabi_memclr.c -c -std=gnu99

-fgnu89-inline -O2 -Wall -Werror -Winline -Wno-error=undef -Wundef

-Wwrite-strings -fmerge-all-constants -frounding-math -g

-Wstrict-prototypes -I../include

-I/home/billd/_build/builds/x86_64-unknown-linux-gnu/arm-linux-gnueabi/glibc.git~release-2.21-master/csu

-I/home/billd/_build/builds/x86_64-unknown-linux-gnu/arm-linux-gnueabi/glibc.git~release-2.21-master

-I../sysdeps/unix/sysv/linux/arm -I../sysdeps/arm/nptl

-I../sysdeps/unix/sysv/linux/include -I../sysdeps/unix/sysv/linux

-I../sysdeps/nptl -I../sysdeps/pthread -I../sysdeps/gnu

-I../sysdeps/unix/inet -I../sysdeps/unix/sysv -I../sysdeps/unix/arm

-I../sysdeps/unix -I../sysdeps/posix -I../sysdeps/arm/armv6

-I../sysdeps/arm/include -I../sysdeps/arm -I../sysdeps/wordsize-32

-I../sysdeps/ieee754/flt-32 -I../sysdeps/ieee754/dbl-64

-I../sysdeps/ieee754 -I../sysdeps/generic -I.. -I../libio -I. -nostdinc

-isystem

/home/billd/_build/builds/destdir/x86_64-unknown-linux-gnu/lib/gcc/arm-linux-gnueabi/5.1.1/include

-isystem

/home/billd/_build/builds/destdir/x86_64-unknown-linux-gnu/lib/gcc/arm-linux-gnueabi/5.1.1/include-fixed

-isystem /home/billd/_build/sysroots/arm-linux-gnueabi/usr/include

-D_LIBC_REENTRANT -include

/home/billd/_build/builds/x86_64-unknown-linux-gnu/arm-linux-gnueabi/glibc.git~release-2.21-master/libc-modules.h

-DMODULE_NAME=libc -include ../include/libc-symbols.h -o

/home/billd/_build/builds/x86_64-unknown-linux-gnu/arm-linux-gnueabi/glibc.git~release-2.21-master/csu/aeabi_memclr.o

-MD -MP -MF

/home/billd/_build/builds/x86_64-unknown-linux-gnu/arm-linux-gnueabi/glibc.git~release-2.21-master/csu/aeabi_memclr.o.dt

-MT

/home/billd/_build/builds/x86_64-unknown-linux-gnu/arm-linux-gnueabi/glibc.git~release-2.21-master/csu/aeabi_memclr.o

/tmp/ccTT8UgL.s: Assembler messages:

/tmp/ccTT8UgL.s:492: Error: lo register required -- `add

pc,r3,#(0xffff0fc0-0xffff0fff)'

/tmp/ccTT8UgL.s:490: Error: invalid immediate: -61441 is out of range

make[2]: ***

[/home/billd/_build/builds/x86_64-unknown-linux-gnu/arm-linux-gnueabi/glibc.git~release-2.21-master/csu/libc-start.o]

Error 1



--- here is the gcc -v output for the build above. ----

./arm-linux-gnueabi-gcc -v

Using built-in specs.

COLLECT_GCC=./arm-linux-gnueabi-gcc

COLLECT_LTO_WRAPPER=/home/billd/_build/builds/destdir/x86_64-unknown-linux-gnu/libexec/gcc/arm-linux-gnueabi/5.1.1/lto-wrapper

Target: arm-linux-gnueabi

Configured with:

'/home/billd/_build/snapshots/gcc.git~linaro-gcc-5-branch/configure'

SHELL=/bin/bash --with-bugurl=https://bugs.linaro.org

--with-mpc=/home/billd/_build/builds/destdir/x86_64-unknown-linux-gnu

--with-mpfr=/home/billd/_build/builds/destdir/x86_64-unknown-linux-gnu

--with-gmp=/home/billd/_build/builds/destdir/x86_64-unknown-linux-gnu

--with-gnu-as --with-gnu-ld --disable-libstdcxx-pch --disable-libmudflap

--with-cpu=arm1136j-s --with-cloog=no --with-ppl=no --with-isl=no

--disable-nls --enable-c99 --with-fpu=vfpv3-d16 --with-float=softfp

--with-mode=thumb --disable-multilib --enable-multiarch --disable-libssp

--disable-libquadmath --disable-threads --without-headers --with-newlib

--disable-libmudflap --disable-bootstrap --disable-decimal-float

--disable-libgomp --disable-libatomic --disable-libsanitizer

--disable-plugins --disable-libitm MAKEINFO=echo --enable-languages=c

--with-sysroot=/home/billd/_build/builds/sysroot-arm-linux-gnueabi

--disable-shared --with-glibc-version=2.18

--build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu

--target=arm-linux-gnueabi

--prefix=/home/billd/_build/builds/destdir/x86_64-unknown-linux-gnu

Thread model: single

gcc version 5.1.1 20150608 (Linaro GCC 5.1-2015.06-1~dev)
Charles Baylis
2015-09-11 22:18:49 UTC
Permalink
Since arm1136j-s does not support Thumb-2, you need to make sure that
GCC is not configured with --with-mode=thumb.

I don't think there is currently a way to achieve this on the abe
command line at present. However, you can work around the problem by
removing each occurrence of --with-mode=thumb from config/gcc.conf.

Feel free to raise a bug on abe at http://bugs.linaro.org for this.

Charles
Hi,
I’ve tried probably a dozen different ABE build command lines with various
combinations of cpu/arch/tune on the latest tree and on the 2014.09 release
and am unable to build for the armv6/1136J-S.
Before bothering the list, I scoured the gzipped archive back through 2013,
and there is little mention of any problems OR successes with armv6. I am
wondering if armv6 is supported, and if so, what is the secret sauce ABE
command line to build successfully for the 1136J-S.
Some of the builds I tried were missing tarball components, others fail
later on such as the one below that gets through building gcc and bombs
building the eabi.
--------------------
‘abe.sh –target arm-linux-gnueabi –build all –set cpu=arm1136j-s’ produces
arm-linux-gnueabi-gcc ../sysdeps/arm/aeabi_memclr.c -c -std=gnu99
-fgnu89-inline -O2 -Wall -Werror -Winline -Wno-error=undef -Wundef
-Wwrite-strings -fmerge-all-constants -frounding-math -g
-Wstrict-prototypes -I../include
-I/home/billd/_build/builds/x86_64-unknown-linux-gnu/arm-linux-gnueabi/glibc.git~release-2.21-master/csu
-I/home/billd/_build/builds/x86_64-unknown-linux-gnu/arm-linux-gnueabi/glibc.git~release-2.21-master
-I../sysdeps/unix/sysv/linux/arm -I../sysdeps/arm/nptl
-I../sysdeps/unix/sysv/linux/include -I../sysdeps/unix/sysv/linux
-I../sysdeps/nptl -I../sysdeps/pthread -I../sysdeps/gnu
-I../sysdeps/unix/inet -I../sysdeps/unix/sysv -I../sysdeps/unix/arm
-I../sysdeps/unix -I../sysdeps/posix -I../sysdeps/arm/armv6
-I../sysdeps/arm/include -I../sysdeps/arm -I../sysdeps/wordsize-32
-I../sysdeps/ieee754/flt-32 -I../sysdeps/ieee754/dbl-64
-I../sysdeps/ieee754 -I../sysdeps/generic -I.. -I../libio -I. -nostdinc
-isystem
/home/billd/_build/builds/destdir/x86_64-unknown-linux-gnu/lib/gcc/arm-linux-gnueabi/5.1.1/include
-isystem
/home/billd/_build/builds/destdir/x86_64-unknown-linux-gnu/lib/gcc/arm-linux-gnueabi/5.1.1/include-fixed
-isystem /home/billd/_build/sysroots/arm-linux-gnueabi/usr/include
-D_LIBC_REENTRANT -include
/home/billd/_build/builds/x86_64-unknown-linux-gnu/arm-linux-gnueabi/glibc.git~release-2.21-master/libc-modules.h
-DMODULE_NAME=libc -include ../include/libc-symbols.h -o
/home/billd/_build/builds/x86_64-unknown-linux-gnu/arm-linux-gnueabi/glibc.git~release-2.21-master/csu/aeabi_memclr.o
-MD -MP -MF
/home/billd/_build/builds/x86_64-unknown-linux-gnu/arm-linux-gnueabi/glibc.git~release-2.21-master/csu/aeabi_memclr.o.dt
-MT
/home/billd/_build/builds/x86_64-unknown-linux-gnu/arm-linux-gnueabi/glibc.git~release-2.21-master/csu/aeabi_memclr.o
/tmp/ccTT8UgL.s:492: Error: lo register required -- `add
pc,r3,#(0xffff0fc0-0xffff0fff)'
/tmp/ccTT8UgL.s:490: Error: invalid immediate: -61441 is out of range
make[2]: ***
[/home/billd/_build/builds/x86_64-unknown-linux-gnu/arm-linux-gnueabi/glibc.git~release-2.21-master/csu/libc-start.o]
Error 1
--- here is the gcc –v output for the build above. ----
./arm-linux-gnueabi-gcc -v
Using built-in specs.
COLLECT_GCC=./arm-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/home/billd/_build/builds/destdir/x86_64-unknown-linux-gnu/libexec/gcc/arm-linux-gnueabi/5.1.1/lto-wrapper
Target: arm-linux-gnueabi
'/home/billd/_build/snapshots/gcc.git~linaro-gcc-5-branch/configure'
SHELL=/bin/bash --with-bugurl=https://bugs.linaro.org
--with-mpc=/home/billd/_build/builds/destdir/x86_64-unknown-linux-gnu
--with-mpfr=/home/billd/_build/builds/destdir/x86_64-unknown-linux-gnu
--with-gmp=/home/billd/_build/builds/destdir/x86_64-unknown-linux-gnu
--with-gnu-as --with-gnu-ld --disable-libstdcxx-pch --disable-libmudflap
--with-cpu=arm1136j-s --with-cloog=no --with-ppl=no --with-isl=no
--disable-nls --enable-c99 --with-fpu=vfpv3-d16 --with-float=softfp
--with-mode=thumb --disable-multilib --enable-multiarch --disable-libssp
--disable-libquadmath --disable-threads --without-headers --with-newlib
--disable-libmudflap --disable-bootstrap --disable-decimal-float
--disable-libgomp --disable-libatomic --disable-libsanitizer
--disable-plugins --disable-libitm MAKEINFO=echo --enable-languages=c
--with-sysroot=/home/billd/_build/builds/sysroot-arm-linux-gnueabi
--disable-shared --with-glibc-version=2.18
--build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu
--target=arm-linux-gnueabi
--prefix=/home/billd/_build/builds/destdir/x86_64-unknown-linux-gnu
Thread model: single
gcc version 5.1.1 20150608 (Linaro GCC 5.1-2015.06-1~dev)
_______________________________________________
linaro-toolchain mailing list
https://lists.linaro.org/mailman/listinfo/linaro-toolchain
Jim Wilson
2015-09-11 22:23:44 UTC
Permalink
I’ve tried probably a dozen different ABE build command lines with various
combinations of cpu/arch/tune on the latest tree and on the 2014.09 release
and am unable to build for the armv6/1136J-S.
FYI there is a wiki page that talks about ABE
https://wiki.linaro.org/ABE
In particular, it mentions the "temporary" workaround needed to get
files to download.

My experience is that ABE tends to work fine if you are using the same
way as tcwg, and it can behave poorly if you are trying to use it a
different way. tcwg doesn't build for armv6.
/tmp/ccTT8UgL.s:492: Error: lo register required -- `add
pc,r3,#(0xffff0fc0-0xffff0fff)'
/tmp/ccTT8UgL.s:490: Error: invalid immediate: -61441 is out of range
This is a glibc problem building csu/libc-start.c. It calls some
atomic functions, and we end up in
sysdeps/unix/sysv/linux/arm/bits/atomic.h. At the bottom, it has a
definition for __arm_assisted_compare_and_exchange_val_32_acq. There
is one for thumb2, and one for arm, but no definition for thumb1.

abe by default builds the compiler --with-mode=thumb. You are
building for an armv6 part that does not have thumb2 support, so your
compiler is emitting thumb1 code by default, which won't work. I
don't think it is a good idea to try to build everything as thumb1
code. I would suggest disabling --with-mode=thumb in the gcc
configure options.

I see that Charles Baylis has responded while I was writing this up,
and explains that you have to edit abe/config/gcc.conf to git rid of
the --with-mode=thumb option.

Jim
Bill Davis
2015-09-14 18:05:21 UTC
Permalink
Charles / Jim,

Removing --with-mode=thumb from the ABE gcc.conf does indeed solve my problem. Thank you! I went ahead and opened a ticket.

Best,

Bill Davis

-----Original Message-----
From: Jim Wilson [mailto:***@linaro.org]
Sent: Friday, September 11, 2015 6:24 PM
To: Bill Davis
Cc: linaro-***@lists.linaro.org
Subject: Re: Building for armv6/ARM1136J-S using ABE
I’ve tried probably a dozen different ABE build command lines with various
combinations of cpu/arch/tune on the latest tree and on the 2014.09 release
and am unable to build for the armv6/1136J-S.
FYI there is a wiki page that talks about ABE
https://wiki.linaro.org/ABE
In particular, it mentions the "temporary" workaround needed to get
files to download.

My experience is that ABE tends to work fine if you are using the same
way as tcwg, and it can behave poorly if you are trying to use it a
different way. tcwg doesn't build for armv6.
/tmp/ccTT8UgL.s:492: Error: lo register required -- `add
pc,r3,#(0xffff0fc0-0xffff0fff)'
/tmp/ccTT8UgL.s:490: Error: invalid immediate: -61441 is out of range
This is a glibc problem building csu/libc-start.c. It calls some
atomic functions, and we end up in
sysdeps/unix/sysv/linux/arm/bits/atomic.h. At the bottom, it has a
definition for __arm_assisted_compare_and_exchange_val_32_acq. There
is one for thumb2, and one for arm, but no definition for thumb1.

abe by default builds the compiler --with-mode=thumb. You are
building for an armv6 part that does not have thumb2 support, so your
compiler is emitting thumb1 code by default, which won't work. I
don't think it is a good idea to try to build everything as thumb1
code. I would suggest disabling --with-mode=thumb in the gcc
configure options.

I see that Charles Baylis has responded while I was writing this up,
and explains that you have to edit abe/config/gcc.conf to git rid of
the --with-mode=thumb option.

Jim

Loading...