1*4882a593SmuzhiyunSubject: [PATCH 1/1] elftosb: force host C++ compiler 2*4882a593Smuzhiyun 3*4882a593SmuzhiyunBecause Freescale provides *.cpp sources and elftosb links again libstdc++, 4*4882a593Smuzhiyunforce to use the host c++ compiler. 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunThis patch avoids the following error occurs: 7*4882a593Smuzhiyun 8*4882a593Smuzhiyungcc AESKey.o Blob.o crc.o DataSource.o DataTarget.o ELFSourceFile.o EncoreBootImage.o EvalContext.o GHSSecInfo.o GlobMatcher.o HexValues.o Logging.o Operation.o OptionDictionary.o options.o OutputSection.o Random.o RijndaelCBCMAC.o rijndael.o SHA1.o SourceFile.o SRecordSourceFile.o stdafx.o StELFFile.o StExecutableImage.o StSRecordFile.o Value.o Version.o format_string.o ExcludesListMatcher.o SearchPath.o DataSourceImager.o IVTDataSource.o BootImageGenerator.o ConversionController.o ElftosbAST.o elftosb.o elftosb_lexer.o ElftosbLexer.o elftosb_parser.tab.o EncoreBootImageGenerator.o -lstdc++ -o elftosb 9*4882a593Smuzhiyun/usr/bin/ld: ElftosbAST.o: undefined reference to symbol 'powf@@GLIBC_2.2.5' 10*4882a593Smuzhiyun/usr/bin/ld: note: 'powf@@GLIBC_2.2.5' is defined in DSO /lib64/libm.so.6 so try adding it to the linker command line 11*4882a593Smuzhiyun/lib64/libm.so.6: could not read symbols: Invalid operation 12*4882a593Smuzhiyuncollect2: error: ld returned 1 exit status 13*4882a593Smuzhiyun 14*4882a593SmuzhiyunWhen compiling with gcc and linking against libstdc++, ld uses libc instead of 15*4882a593Smuzhiyunlibstdc++. 16*4882a593SmuzhiyunHowever, libc does not provide all functions libstdc++ does. 17*4882a593SmuzhiyunIndeed, maths functions are provided by libm, not libc. 18*4882a593SmuzhiyunThus, elftosb should either: 19*4882a593Smuzhiyun- use gcc and link against libc and libm; 20*4882a593Smuzhiyun- or use g++ and link against libstdc++. 21*4882a593Smuzhiyun 22*4882a593SmuzhiyunBecause elftosb is written in C++, this patch implement the sencond option, using 23*4882a593Smuzhiyung++ and linking against libstdc++. 24*4882a593Smuzhiyun 25*4882a593SmuzhiyunSigned-off-by: Samuel Martin <s.martin49@gmail.com> 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun--- 28*4882a593SmuzhiyunIndex: host-elftosb-10.12.01/makefile.rules 29*4882a593Smuzhiyun=================================================================== 30*4882a593Smuzhiyun--- host-elftosb-10.12.01.orig/makefile.rules 2012-06-09 21:12:23.557526100 +0200 31*4882a593Smuzhiyun+++ host-elftosb-10.12.01/makefile.rules 2012-06-09 21:15:21.659894571 +0200 32*4882a593Smuzhiyun@@ -15,6 +15,8 @@ 33*4882a593Smuzhiyun # UNAMES is going to be set to either "Linux" or "CYGWIN_NT-5.1" 34*4882a593Smuzhiyun UNAMES = $(shell uname -s) 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun+CXX ?= g++ 37*4882a593Smuzhiyun+ 38*4882a593Smuzhiyun #******************************************************************************* 39*4882a593Smuzhiyun # Directories 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun@@ -37,9 +39,9 @@ 42*4882a593Smuzhiyun #******************************************************************************* 43*4882a593Smuzhiyun # Build flags 44*4882a593Smuzhiyun-# gcc Compiler flags 45*4882a593Smuzhiyun+# Compiler flags 46*4882a593Smuzhiyun # -g : Produce debugging information. 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun-CFLAGS = -g $(INC_PATH) -D${UNAMES} 49*4882a593Smuzhiyun+CXXFLAGS = -g $(INC_PATH) -D${UNAMES} 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun #******************************************************************************* 52*4882a593Smuzhiyun # File lists 53*4882a593Smuzhiyun@@ -137,13 +139,13 @@ clean: 54*4882a593Smuzhiyun ${EXEC_FILE_ELFTOSB2} ${EXEC_FILE_SBTOOL} ${EXEC_FILE_KEYGEN} 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun elftosb: ${OBJ_FILES_ELFTOSB2} 57*4882a593Smuzhiyun- gcc ${OBJ_FILES_ELFTOSB2} ${LIBS} -o ${EXEC_FILE_ELFTOSB2} 58*4882a593Smuzhiyun+ $(CXX) ${OBJ_FILES_ELFTOSB2} ${LIBS} -o ${EXEC_FILE_ELFTOSB2} 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun sbtool: ${OBJ_FILES_SBTOOL} 61*4882a593Smuzhiyun- gcc ${OBJ_FILES_SBTOOL} ${LIBS} -o ${EXEC_FILE_SBTOOL} 62*4882a593Smuzhiyun+ $(CXX) ${OBJ_FILES_SBTOOL} ${LIBS} -o ${EXEC_FILE_SBTOOL} 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun keygen: ${OBJ_FILES_KEYGEN} 65*4882a593Smuzhiyun- gcc ${OBJ_FILES_KEYGEN} ${LIBS} -o ${EXEC_FILE_KEYGEN} 66*4882a593Smuzhiyun+ $(CXX) ${OBJ_FILES_KEYGEN} ${LIBS} -o ${EXEC_FILE_KEYGEN} 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun #ifeq ("${UNAMES}", "Linux") 70*4882a593Smuzhiyun@@ -153,10 +155,10 @@ keygen: ${OBJ_FILES_KEYGEN} 71*4882a593Smuzhiyun .SUFFIXES : .c .cpp 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun .c.o : 74*4882a593Smuzhiyun- gcc ${CFLAGS} -c $< 75*4882a593Smuzhiyun+ $(CC) ${CXXFLAGS} -c $< 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun .cpp.o : 78*4882a593Smuzhiyun- gcc ${CFLAGS} -c $< 79*4882a593Smuzhiyun+ $(CXX) ${CXXFLAGS} -c $< 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun #endif 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun@@ -165,13 +167,13 @@ keygen: ${OBJ_FILES_KEYGEN} 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun %.d: %.c 86*4882a593Smuzhiyun @set -e; \ 87*4882a593Smuzhiyun- $(CC) -MM $(CFLAGS) $< | \ 88*4882a593Smuzhiyun+ $(CC) -MM $(CXXFLAGS) $< | \ 89*4882a593Smuzhiyun sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' > $@; \ 90*4882a593Smuzhiyun [ -s $@ ] || rm -f $@ 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun %.d: %.cpp 93*4882a593Smuzhiyun @set -e; \ 94*4882a593Smuzhiyun- $(CC) -MM $(CFLAGS) $< | \ 95*4882a593Smuzhiyun+ $(CXX) -MM $(CXXFLAGS) $< | \ 96*4882a593Smuzhiyun sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' > $@; \ 97*4882a593Smuzhiyun [ -s $@ ] || rm -f $@ 98*4882a593Smuzhiyun 99