patches/glibc/2.6.1/220-cross-posix_makefile.patch
author Johannes Stezenbach <js@sig21.net>
Thu Jul 29 19:47:16 2010 +0200 (2010-07-29)
changeset 2045 fdaa6c7f6dea
permissions -rw-r--r--
cc/gcc: add option to compile against static libstdc++, for gcc-4.4 and newer

Idea and know-how taken from CodeSourcery build script.

Normal build:
$ ldd arm-unknown-linux-uclibcgnueabi-gcc
linux-gate.so.1 => (0xb77f3000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb76e8000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb75a1000)
libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb757a000)
/lib/ld-linux.so.2 (0xb77f4000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb755c000)

CC_STATIC_LIBSTDCXX=y:
$ ldd arm-unknown-linux-uclibcgnueabi-gcc
linux-gate.so.1 => (0xb7843000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb76e6000)
/lib/ld-linux.so.2 (0xb7844000)

I made CC_STATIC_LIBSTDCXX default=y since I think
it is always desirable.

Signed-off-by: Johannes Stezenbach <js@sig21.net>
     1 On 20090111.1151+0100, Thomas Jourdan <tjourdan@neuf.fr> wrote:
     2 
     3   I'm still working on the solaris port an I have the same issue here.
     4   While trying to build the i686-nptl-linux-gnu toolchain under
     5   OpenSolaris, the problems appears during the make install rule of the
     6   libc function.
     7 
     8   The problem is that solaris tries to execute ld-linux.so.2, which is an
     9   elf 32 bits dyn lib, and it fails with a memory fault, not a "cannot
    10   execute binary file". Hence the build stops on this error.
    11 
    12 And on 20090111.1339+0100, he replied with:
    13 
    14   After digging a little, the problem comes from the
    15   glibc-2.6.1/posix/Makefile. It has been solved starting from glibc 2.7
    16   so I extracted a patch for glibc 2.6.1.
    17 
    18 --- glibc-2.6.1/posix/Makefile	2007-04-04 01:28:20.000000000 +0200
    19 +++ glibc-2.7/posix/Makefile	2007-09-12 01:57:22.000000000 +0200
    20 @@ -98,7 +98,7 @@
    21  endif
    22  others		:= getconf
    23  install-bin	:= getconf
    24 -install-others	:= $(inst_libexecdir)/getconf
    25 +install-others-programs	:= $(inst_libexecdir)/getconf
    26  
    27  before-compile	:= testcases.h ptestcases.h
    28  
    29 @@ -110,7 +110,7 @@
    30  	     tst-rxspencer-mem tst-rxspencer.mtrace tst-getconf.out \
    31  	     tst-pcre-mem tst-pcre.mtrace tst-boost-mem tst-boost.mtrace \
    32  	     bug-ga2.mtrace bug-ga2-mem bug-glob2.mtrace bug-glob2-mem \
    33 -	     tst-vfork3-mem tst-vfork3.mtrace
    34 +	     tst-vfork3-mem tst-vfork3.mtrace getconf.speclist
    35  
    36  include ../Rules
    37  
    38 @@ -291,12 +291,20 @@
    39  $(objpfx)bug-glob2-mem: $(objpfx)bug-glob2.out
    40  	$(common-objpfx)malloc/mtrace $(objpfx)bug-glob2.mtrace > $@
    41  
    42 -$(inst_libexecdir)/getconf: $(objpfx)getconf FORCE
    43 +$(inst_libexecdir)/getconf: $(inst_bindir)/getconf \
    44 +			    $(objpfx)getconf.speclist FORCE
    45  	$(addprefix $(..)./scripts/mkinstalldirs ,\
    46  		    $(filter-out $(wildcard $@),$@))
    47 -	for spec in `LC_ALL=C GETCONF_DIR=/dev/null \
    48 -		     $(run-program-prefix) $< \
    49 -		     _POSIX_V6_WIDTH_RESTRICTED_ENVS`; do \
    50 -		$(INSTALL_PROGRAM) $< $@/$$spec.new; \
    51 -		mv -f $@/$$spec.new $@/$$spec; \
    52 -	done
    53 +	while read spec; do \
    54 +	  ln -f $< $@/$$spec.new || $(INSTALL_PROGRAM) $< $@/$$spec.new; \
    55 +	  mv -f $@/$$spec.new $@/$$spec; \
    56 +	done < $(objpfx)getconf.speclist
    57 +
    58 +$(objpfx)getconf.speclist: $(objpfx)getconf
    59 +ifeq (no,$(cross-compiling))
    60 +	LC_ALL=C GETCONF_DIR=/dev/null \
    61 +	$(run-program-prefix) $< _POSIX_V6_WIDTH_RESTRICTED_ENVS > $@.new
    62 +else
    63 +	> $@.new
    64 +endif
    65 +	mv -f $@.new $@