Re: Android Native GCC 4.9.2 Build Fails at Dynamic libgcc

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

 



On Sat, Jan 3, 2015 at 6:56 AM, Cyd Haselton <chaselton@xxxxxxxxx> wrote:
> On Sat, Jan 3, 2015 at 4:24 AM, Cyd Haselton <chaselton@xxxxxxxxx> wrote:
>> On Fri, Jan 2, 2015 at 5:55 AM, Andrew Haley <aph@xxxxxxxxxx> wrote:
>>> On 01/02/2015 11:48 AM, Cyd Haselton wrote:
>>>> On Fri, Jan 2, 2015 at 4:38 AM, Andrew Haley <aph@xxxxxxxxxx> 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

So I went ahead and after lots of trial and error managed to correctly
run each of the above commands one by on in the
arm-linux-androideabi/libgcc directory.

The result:

/usr/gcc-4.8.4/bin/ld:libgcc.map:1: syntax error in VERSION script
collect2: error: ld returned 1 exit status

which makes sense as the libgcc.map file is empty...though i'm not
sure why as I ran the commands in the same order as the libgcc build,
which completed successfully. Should I just do make clean && make in
the arm-linux-androideabi/libgcc dir of both 4.8.4 and 4.9.2?



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux