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?