Android Native GCC 4.9.2 Build Fails at Dynamic libgcc

Cyd Haselton chaselton@gmail.com
Sat Jan 3 12:56:00 GMT 2015


On Sat, Jan 3, 2015 at 4:24 AM, Cyd Haselton <chaselton@gmail.com> wrote:
> On Fri, Jan 2, 2015 at 5:55 AM, Andrew Haley <aph@redhat.com> wrote:
>> On 01/02/2015 11:48 AM, Cyd Haselton wrote:
>>> On Fri, Jan 2, 2015 at 4:38 AM, Andrew Haley <aph@redhat.com> wrote:
>>>> On 01/02/2015 10:32 AM, Cyd Haselton wrote:
>>>>
>>>> Okay, so if the commands are identical you need to run them by hand in
>>>> the correct directory to see what is different.  if the command which
>>>> failed in 4.9 is exactly the same as the command which succeeded
>>>> in 4.8 its input files must be different, and in particular dlopen()
>>>> must be defined in one of the input files or the user of dlopen()
>>>> must not be there in 4.8.
>>>>
>>> Thanks to the inability to write to extednal storage there is not much
>>> space to work with on my android device.  Keeping both the 4.8.4 and
>>> the 4.9.2 builds plus the build GCC on device eats up nearly all of
>>> it.
>>
>> Sure, but it never even occurred to me that having gone this far you'd
>> delete the build tree!  That's the problem with trying to debug
>> problems like this by mail.  If you can login to the device then you
>> can copy a tree from it, I would have thought.
>>
>>> That being said...
>>>
>>> I still have the build logs and therefore the commands  for the libgcc
>>> link, but the list of input files is huge. I can review them, but if I
>>> need to post them here should I use a link to a file or just copy and
>>> paste everything?
>>
>> Neither.  Sorry, I think you need to be able to run the commands by
>> hand.  I can't think of any other way: we really need to be able to
>> compare the working and non-working trees.
>>
>> Andrew.
>
> 4.8.4 build to libgcc is complete. There's a small problem...there are
> a number of commands run after the libgcc objects are build but before
> they are linked.  Simply running the last command throws a lot of
> "multiple definition" errors so i'm pasting the series of commands
> here MINUS the huge list of objects.  Which one of these should I run
> manually?
>
> cat libgcc-std.ver ../../../gcc-4.8.4/libgcc/config/libgcc-glibc.ver
> ../../../gcc-4.8.4/libgcc/config/arm/libgcc-bpabi.ver \
>     | sed -e '/^[ ]*#/d' \
>  -e 's/^%\(if\|else\|elif\|endif\|define\)/#\1/' \
>     | /bld/gcc/builddir-4.8/./gcc/xgcc -B/bld/gcc/builddir-4.8/./gcc/
> -B/usr/gcc-4.8.4/arm-linux-androideabi/bin/
> -B/usr/gcc-4.8.4/arm-linux-androideabi/lib/ -isystem
> /usr/gcc-4.8.4/arm-linux-androideabi/include -isystem
> /usr/gcc-4.8.4/arm-linux-androideabi/sys-include
> --sysroot=/usr/gcc-4.8.4/sysroot   -g -O2 -Wall -O -mandroid -mbionic
> -O2  -g -O2 -Wall -O -mandroid -mbionic -DIN_GCC   -W -Wall
> -Wno-narrowing -Wwrite-strings -Wcast-qual -Wstrict-prototypes
> -Wmissing-prototypes -Wold-style-definition  -isystem ./include
> -fPIC -fno-inline -g -DIN_LIBGCC2 -fbuilding-libgcc
> -fno-stack-protector   -fPIC -fno-inline -I. -I. -I../.././gcc
> -I../../../gcc-4.8.4/libgcc -I../../../gcc-4.8.4/libgcc/.
> -I../../../gcc-4.8.4/libgcc/../gcc
> -I../../../gcc-4.8.4/libgcc/../include  -DHAVE_CC_TLS  -E
> -xassembler-with-cpp -; \
> } | gawk -f ../../../gcc-4.8.4/libgcc/mkmap-symver.awk  > tmp-libgcc.map
> mv tmp-libgcc.map libgcc.map
> # @multilib_flags@ is still needed because this may use
> # /bld/gcc/builddir-4.8/./gcc/xgcc -B/bld/gcc/builddir-4.8/./gcc/
> -B/usr/gcc-4.8.4/arm-linux-androideabi/bin/
> -B/usr/gcc-4.8.4/arm-linux-androideabi/lib/ -isystem
> /usr/gcc-4.8.4/arm-linux-androideabi/include -isystem
> /usr/gcc-4.8.4/arm-linux-androideabi/sys-include
> --sysroot=/usr/gcc-4.8.4/sysroot   and -O2  -g -O2 -Wall -O -mandroid
> -mbionic -DIN_GCC   -W -Wall -Wno-narrowing -Wwrite-strings
> -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes
> -Wold-style-definition  -isystem ./include   -fPIC -fno-inline -g
> -DIN_LIBGCC2 -fbuilding-libgcc -fno-stack-protector  directly.
> # @multilib_dir@ is not really necessary, but sometimes it has
> # more uses than just a directory name.
> /android_root/system/bin/sh ../../../gcc-4.8.4/libgcc/../mkinstalldirs .
> /bld/gcc/builddir-4.8/./gcc/xgcc -B/bld/gcc/builddir-4.8/./gcc/
> -B/usr/gcc-4.8.4/arm-linux-androideabi/bin/
> -B/usr/gcc-4.8.4/arm-linux-androideabi/lib/ -isystem
> /usr/gcc-4.8.4/arm-linux-androideabi/include -isystem
> /usr/gcc-4.8.4/arm-linux-androideabi/sys-include
> --sysroot=/usr/gcc-4.8.4/sysroot   -O2  -g -O2 -Wall -O -mandroid
> -mbionic -DIN_GCC   -W -Wall -Wno-narrowing -Wwrite-strings
> -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes
> -Wold-style-definition  -isystem ./include   -fPIC -fno-inline -g
> -DIN_LIBGCC2 -fbuilding-libgcc -fno-stack-protector  -shared
> -nodefaultlibs -Wl,--soname=libgcc_s.so.1
> -Wl,--version-script=libgcc.map -o ./libgcc_s.so.1.tmp -g -O2 -Wall -O
> -mandroid -mbionic -B./ *.o  libgcc.a -lc && rm -f ./libgcc_s.so && if
> [ -f ./libgcc_s.so.1 ]; then mv -f ./libgcc_s.so.1
> ./libgcc_s.so.1.backup; else true; fi && mv ./libgcc_s.so.1.tmp
> ./libgcc_s.so.1 && (echo "/* GNU ld script"; echo "   Use the shared
> library, but some functions are only in"; echo "   the static library.
> */"; echo "GROUP ( libgcc_s.so.1 -lgcc )" ) > ./libgcc_s.so



Crap...I missed a command.  The corrected series of
commands...post-libgcc-object-build... is at the end of this email.
Again, please let me know which of the commands I should run...or if
ishould run all of them...sooner rather than later. Having both build
dirs on device seriously limits other tasks I can perform.

In the command below, '*.o'is a placeholder for a huge list of objects
in the arm-linux-androideabi/libgcc tree

# Early copyback; see "all" above for the rationale.  The
# early copy is necessary so that the gcc -B options find
# the right startup files when linking shared libgcc.
/android_root/system/bin/sh ../../../gcc-4.9.2/libgcc/../mkinstalldirs
../.././gcc
parts="crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o"; \
for file in $parts; do \
  rm -f ../.././gcc/$file; \
  /bin/install -c -m 644 $file ../.././gcc/; \
  case $file in \
    *.a) \
      /usr/gcc-4.9.2/bin/ranlib ../.././gcc/$file ;; \
  esac; \
done
sed -e 's/__PFX__/__/g' \
    -e 's/__FIXPTPFX__/__gnu_/g' <
../../../gcc-4.9.2/libgcc/libgcc-std.ver.in > libgcc-std.ver
{ /bld/gcc/builddir-4.9/./gcc/nm -pg *.o
cat libgcc-std.ver ../../../gcc-4.8.4/libgcc/config/libgcc-glibc.ver
../../../gcc-4.8.4/libgcc/config/arm/libgcc-bpabi.ver \
    | sed -e '/^[ ]*#/d' \
 -e 's/^%\(if\|else\|elif\|endif\|define\)/#\1/' \
    | /bld/gcc/builddir-4.8/./gcc/xgcc -B/bld/gcc/builddir-4.8/./gcc/
-B/usr/gcc-4.8.4/arm-linux-androideabi/bin/
-B/usr/gcc-4.8.4/arm-linux-androideabi/lib/ -isystem
/usr/gcc-4.8.4/arm-linux-androideabi/include -isystem
/usr/gcc-4.8.4/arm-linux-androideabi/sys-include
--sysroot=/usr/gcc-4.8.4/sysroot   -g -O2 -Wall -O -mandroid -mbionic
-O2  -g -O2 -Wall -O -mandroid -mbionic -DIN_GCC   -W -Wall
-Wno-narrowing -Wwrite-strings -Wcast-qual -Wstrict-prototypes
-Wmissing-prototypes -Wold-style-definition  -isystem ./include
-fPIC -fno-inline -g -DIN_LIBGCC2 -fbuilding-libgcc
-fno-stack-protector   -fPIC -fno-inline -I. -I. -I../.././gcc
-I../../../gcc-4.8.4/libgcc -I../../../gcc-4.8.4/libgcc/.
-I../../../gcc-4.8.4/libgcc/../gcc
-I../../../gcc-4.8.4/libgcc/../include  -DHAVE_CC_TLS  -E
-xassembler-with-cpp -; \
} | gawk -f ../../../gcc-4.8.4/libgcc/mkmap-symver.awk  > tmp-libgcc.map
mv tmp-libgcc.map libgcc.map
# @multilib_flags@ is still needed because this may use
# /bld/gcc/builddir-4.8/./gcc/xgcc -B/bld/gcc/builddir-4.8/./gcc/
-B/usr/gcc-4.8.4/arm-linux-androideabi/bin/
-B/usr/gcc-4.8.4/arm-linux-androideabi/lib/ -isystem
/usr/gcc-4.8.4/arm-linux-androideabi/include -isystem
/usr/gcc-4.8.4/arm-linux-androideabi/sys-include
--sysroot=/usr/gcc-4.8.4/sysroot   and -O2  -g -O2 -Wall -O -mandroid
-mbionic -DIN_GCC   -W -Wall -Wno-narrowing -Wwrite-strings
-Wcast-qual -Wstrict-prototypes -Wmissing-prototypes
-Wold-style-definition  -isystem ./include   -fPIC -fno-inline -g
-DIN_LIBGCC2 -fbuilding-libgcc -fno-stack-protector  directly.
# @multilib_dir@ is not really necessary, but sometimes it has
# more uses than just a directory name.
/android_root/system/bin/sh ../../../gcc-4.8.4/libgcc/../mkinstalldirs .
/bld/gcc/builddir-4.8/./gcc/xgcc -B/bld/gcc/builddir-4.8/./gcc/
-B/usr/gcc-4.8.4/arm-linux-androideabi/bin/
-B/usr/gcc-4.8.4/arm-linux-androideabi/lib/ -isystem
/usr/gcc-4.8.4/arm-linux-androideabi/include -isystem
/usr/gcc-4.8.4/arm-linux-androideabi/sys-include
--sysroot=/usr/gcc-4.8.4/sysroot   -O2  -g -O2 -Wall -O -mandroid
-mbionic -DIN_GCC   -W -Wall -Wno-narrowing -Wwrite-strings
-Wcast-qual -Wstrict-prototypes -Wmissing-prototypes
-Wold-style-definition  -isystem ./include   -fPIC -fno-inline -g
-DIN_LIBGCC2 -fbuilding-libgcc -fno-stack-protector  -shared
-nodefaultlibs -Wl,--soname=libgcc_s.so.1
-Wl,--version-script=libgcc.map -o ./libgcc_s.so.1.tmp -g -O2 -Wall -O
-mandroid -mbionic -B./ *.o  libgcc.a -lc && rm -f ./libgcc_s.so && if
[ -f ./libgcc_s.so.1 ]; then mv -f ./libgcc_s.so.1
./libgcc_s.so.1.backup; else true; fi && mv ./libgcc_s.so.1.tmp
./libgcc_s.so.1 && (echo "/* GNU ld script"; echo "   Use the shared
library, but some functions are only in"; echo "   the static library.
*/"; echo "GROUP ( libgcc_s.so.1 -lgcc )" ) > ./libgcc_s.so



More information about the Gcc-help mailing list