xref: /OK3568_Linux_fs/buildroot/package/elftosb/0002-force-cxx-compiler.patch (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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