Mercurial > hg > portage
changeset 52:021734360017
fix gcc 4.3.1 for bug#36533
author | holger@hho.wizards.de |
---|---|
date | Tue, 24 Jun 2008 10:00:49 +0200 |
parents | c95cc4c20d31 |
children | 5f7d8fd4d921 |
files | sys-devel/gcc/Manifest sys-devel/gcc/files/4.3.1/gcc-4.3.1-emit-rtl-Os.patch sys-devel/gcc/files/awk/fixlafiles.awk sys-devel/gcc/files/awk/fixlafiles.awk-no_gcc_la sys-devel/gcc/files/awk/scanforssp.awk sys-devel/gcc/files/c89 sys-devel/gcc/files/c99 sys-devel/gcc/files/fix_libtool_files.sh sys-devel/gcc/files/gcc-configure-LANG.patch sys-devel/gcc/files/gcc-configure-texinfo.patch sys-devel/gcc/files/gcc-spec-env.patch sys-devel/gcc/files/mkinfodir sys-devel/gcc/files/pro-police-docs.patch sys-devel/gcc/files/scan_libgcc_linked_ssp.sh sys-devel/gcc/gcc-4.3.1-r1.ebuild |
diffstat | 15 files changed, 1557 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sys-devel/gcc/Manifest Tue Jun 24 10:00:49 2008 +0200 @@ -0,0 +1,17 @@ +AUX 4.3.1/gcc-4.3.1-emit-rtl-Os.patch 463 RMD160 1d4c9b644a744650bd2aa424e7217b4da5c46da6 SHA1 8a2ad634e076571de5647363d2f7d847ceaf71df SHA256 0ea1ba444bd245593f1b2b804772d9ebc31c7dc38e961a57d3c39fc1250105ca +AUX awk/fixlafiles.awk 7807 RMD160 749402c9c0a0f1e8755067c0e001f69d73edb09f SHA1 5fc91ce11eb93e989ae64470dba602fe534ac409 SHA256 3cae4890a295adef50c6cf8a7e14d1be4e7a2356479c073e5c29433c3cdf9c5c +AUX awk/fixlafiles.awk-no_gcc_la 8614 RMD160 b2eac0355af83ea2fee02222d1179b23d062ddc2 SHA1 b65717ce21049ba04a4628ceeb662f69797ada40 SHA256 98e1e669906bd5928b695fdcfbf8e56618f12ce9311d31ce1b11dff68d35bb6f +AUX awk/scanforssp.awk 5830 RMD160 43a8c09e4e16d9a78ab4d6263e74a1850f12eb9b SHA1 1d2756f5e75532a7068357404c39081a3c9d9a68 SHA256 236a2a7eea1ba540ca3be82b0fe2cdefd9ac76b061440918ffe52664edbbb98a +AUX c89 428 RMD160 1030ea2af20b5bb4c2b07668230b3e752ddab035 SHA1 c70119483d984a7c2300947679663fffd5df1419 SHA256 999b40b67f690638f601d76b756d529dd40a4325f42dfd9fd2e629ad0a91947c +AUX c99 451 RMD160 b0e058d8ad3e2eac5f0e7b6e85583de5b1c4be93 SHA1 939df3f67e73790ae785fddb86a41b3dcf87686a SHA256 474357dd9ce161b6db3ce88a5c0bd1e536a0f40d66a86894d48abe30226ee193 +AUX fix_libtool_files.sh 1735 RMD160 5035cd4a9995ea6207a8de95815921c3939395bd SHA1 57cd1babab4c6b142dd8cc58b36943442ff2af13 SHA256 b8d86b1db9453dff4c62b3467887bf1e04ecb483120185102122bda2581ed3f5 +AUX gcc-configure-LANG.patch 2052 RMD160 91f5b90600dfccb10c4e2308a5a1485275fdfeee SHA1 56ecd1d6f2e4bd0b35ac108be72a4f6f60212c38 SHA256 63de6d2dcfe14f21d147abeb1390405b9220c03f8e968f482d4b4c1cf279c88b +AUX gcc-configure-texinfo.patch 337 RMD160 d0e872a9f0ccb5ab51d10f129acd7a19d76a7b75 SHA1 7e267fac540175ce848e563539db8c951cab557b SHA256 74b73a7ecec2d88889876b4db480cd173632f49d5396bb8e5b3c93673f9b5b98 +AUX gcc-spec-env.patch 1478 RMD160 c3b9071296dbb7a37901714ef4db75bf04211381 SHA1 1f3cd57bab7187947d244ca843b7bd485f72c633 SHA256 167f2a1994c51c1c82d62943fb214f13540859dc89fe578632f3b60daf79c289 +AUX mkinfodir 7324 RMD160 96bbe8860ae8c0a50db42fea01cc1c2216bd36c8 SHA1 3b8316da1a0fa94943e6b71be709827563af7058 SHA256 0565353e767e253207adb8b5c9be9ba215a628447e075a4dc7bb3183ed099d2a +AUX pro-police-docs.patch 3287 RMD160 eef412d92bed145db05bffa3a3e54e2ba74ee50d SHA1 ca58eda97d80f3d51f4e383ad3053fcb13f7a91b SHA256 ec012aed77285545b9d993cba1bc5fdb402c8dc9a17040f48b8b354746ede627 +AUX scan_libgcc_linked_ssp.sh 885 RMD160 adb1365621b622eb843611f1aaf65ec823555491 SHA1 3027bcdbb1c42f161c3f93e92a18ae96db4d27e7 SHA256 0de8bae299e3333d3bba7af7f85427952f18b906b1a4832232ad15e73a3ddfa2 +DIST gcc-4.3.1-patches-1.0.tar.bz2 10095 RMD160 a5a1105341c6e9408f42d5c709df0fff5ef2e4d8 SHA1 527aa4c3e23910974e1828d0d2dd39b63c07e4c6 SHA256 71cb0fe8e90b299424edd126e09a9689cdce4b8eb08f54fade9cb84d2aabea82 +DIST gcc-4.3.1-uclibc-patches-1.0.tar.bz2 17835 RMD160 8b3092e846f8753878ba97bdf8f8a8e941214639 SHA1 8259aab40098b63645f19ee4d3bd6c34bc3de8df SHA256 c4040d0604be42652b2cf637a7cf1ca7ee1b5b6b07305874368d5303c546a630 +DIST gcc-4.3.1.tar.bz2 58964610 RMD160 224205432af1592aa46f7a5b14293767e02f94aa SHA1 6f1565280ed0a25256f5768f6dff2c96b6a25287 SHA256 66596b80995f88cb66aaaf937598df7a9af10cc06799c3a7a64879e20b552fd5 +EBUILD gcc-4.3.1-r1.ebuild 1796 RMD160 c37e1ca16a9a2e5f9a653382c700ac47b6a647a5 SHA1 ce7bf116d587ba74f7b8d37dd79fba497e3e08f9 SHA256 204146a70228253fa9637a17e76480df2f2b9ddf034d06338cb9cf1122f4e0f2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sys-devel/gcc/files/4.3.1/gcc-4.3.1-emit-rtl-Os.patch Tue Jun 24 10:00:49 2008 +0200 @@ -0,0 +1,15 @@ +--- gcc/emit-rtl.orig.c 2008-06-24 02:00:20.000000000 +0200 ++++ gcc/emit-rtl.c 2008-06-24 02:03:27.000000000 +0200 +@@ -960,6 +960,12 @@ + { + int offset; + ++ /* Hard registers can be reused for multiple purposes within the same ++ function, so setting REG_ATTRS, REG_POINTER and REG_POINTER_ALIGN ++ on them is wrong. */ ++ if (HARD_REGISTER_P (reg)) ++ return; ++ + offset = byte_lowpart_offset (GET_MODE (reg), GET_MODE (x)); + if (MEM_P (x)) + {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sys-devel/gcc/files/awk/fixlafiles.awk Tue Jun 24 10:00:49 2008 +0200 @@ -0,0 +1,314 @@ +# Copyright 1999-2005 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc/files/awk/fixlafiles.awk,v 1.15 2008/02/19 05:47:29 vapier Exp $ + +# +# Helper functions +# +function printn(string) { + printf("%s", string) +} +function einfo(string) { + printf(" \033[32;01m*\033[0m %s\n", string) +} +function einfon(string) { + printf(" \033[32;01m*\033[0m %s", string) +} +function ewarn(string) { + printf(" \033[33;01m*\033[0m %s\n", string) +} +function ewarnn(string) { + printf(" \033[33;01m*\033[0m %s", string) +} +function eerror(string) { + printf(" \033[31;01m*\033[0m %s\n", string) +} + +# +# assert(condition, errmsg) +# assert that a condition is true. Otherwise exit. +# +function assert(condition, string) { + if (! condition) { + printf("%s:%d: assertion failed: %s\n", + FILENAME, FNR, string) > "/dev/stderr" + _assert_exit = 1 + exit 1 + } +} + +# +# system(command, return) +# wrapper that normalizes return codes ... +# +function dosystem(command, ret) { + ret = 0 + ret = system(command) + if (ret == 0) + return 1 + else + return 0 +} + +BEGIN { + # + # Get our variables from environment + # + OLDVER = ENVIRON["OLDVER"] + OLDCHOST = ENVIRON["OLDCHOST"] + + if (OLDVER == "") { + eerror("Could not get OLDVER!"); + exit 1 + } + + # Setup some sane defaults + LIBCOUNT = 2 + HAVE_GCC34 = 0 + DIRLIST[1] = "/lib" + DIRLIST[2] = "/usr/lib" + + # + # Walk /etc/ld.so.conf to discover all our library paths + # + pipe = "cat /etc/ld.so.conf | sort 2>/dev/null" + while(((pipe) | getline ldsoconf_data) > 0) { + if (ldsoconf_data !~ /^[[:space:]]*#/) { + if (ldsoconf_data == "") continue + + # Remove any trailing comments + sub(/#.*$/, "", ldsoconf_data) + # Remove any trailing spaces + sub(/[[:space:]]+$/, "", ldsoconf_data) + + # If there's more than one path per line, split + # it up as if they were sep lines + split(ldsoconf_data, nodes, /[:,[:space:]]/) + + # Now add the rest from ld.so.conf + for (x in nodes) { + # wtf does this line do ? + sub(/=.*/, "", nodes[x]) + # Prune trailing / + sub(/\/$/, "", nodes[x]) + + if (nodes[x] == "") continue + + # + # Drop the directory if its a child directory of + # one that was already added ... + # For example, if we have: + # /usr/lib /usr/libexec /usr/lib/mozilla /usr/lib/nss + # We really just want to save /usr/lib /usr/libexec + # + CHILD = 0 + for (y in DIRLIST) { + if (nodes[x] ~ "^" DIRLIST[y] "(/|$)") { + CHILD = 1 + break + } + } + if (CHILD) continue + + DIRLIST[++LIBCOUNT] = nodes[x] + } + } + } + close(pipe) + + # + # Get line from gcc's output containing CHOST + # + pipe = "gcc -print-file-name=libgcc.a 2>/dev/null" + if ((!((pipe) | getline TMP_CHOST)) || (TMP_CHOST == "")) { + close(pipe) + + # If we fail to get the CHOST, see if we can get the CHOST + # portage thinks we are using ... + pipe = "/usr/bin/portageq envvar 'CHOST'" + assert(((pipe) | getline CHOST), "(" pipe ") | getline CHOST") + } else { + # Check pre gcc-3.4.x versions + CHOST = gensub("^.+lib/gcc-lib/([^/]+)/[0-9]+.+$", "\\1", 1, TMP_CHOST) + + if (CHOST == TMP_CHOST || CHOST == "") { + # Check gcc-3.4.x or later + CHOST = gensub("^.+lib/gcc/([^/]+)/[0-9]+.+$", "\\1", 1, TMP_CHOST); + + if (CHOST == TMP_CHOST || CHOST == "") + CHOST = "" + else + HAVE_GCC34 = 1 + } + } + close(pipe) + + if (CHOST == "") { + eerror("Could not get gcc's CHOST!") + exit 1 + } + + if (OLDCHOST != "") + if (OLDCHOST == CHOST) + OLDCHOST = "" + + GCCLIBPREFIX_OLD = "/usr/lib/gcc-lib/" + GCCLIBPREFIX_NEW = "/usr/lib/gcc/" + + if (HAVE_GCC34) + GCCLIBPREFIX = GCCLIBPREFIX_NEW + else + GCCLIBPREFIX = GCCLIBPREFIX_OLD + + GCCLIB = GCCLIBPREFIX CHOST + + if (OLDCHOST != "") { + OLDGCCLIB1 = GCCLIBPREFIX_OLD OLDCHOST + OLDGCCLIB2 = GCCLIBPREFIX_NEW OLDCHOST + } + + # Get current gcc's version + pipe = "gcc -dumpversion" + assert(((pipe) | getline NEWVER), "(" pipe ") | getline NEWVER)") + close(pipe) + + if (NEWVER == "") { + eerror("Could not get gcc's version!") + exit 1 + } + + # Nothing to do ? + if ((OLDVER == NEWVER) && (OLDCHOST == "")) + exit 0 + + # + # Ok, now let's scan for the .la files and actually fix them up + # + for (x = 1; x <= LIBCOUNT; x++) { + # Do nothing if the target dir is gcc's internal library path + if (DIRLIST[x] ~ GCCLIBPREFIX_OLD || + DIRLIST[x] ~ GCCLIBPREFIX_NEW) + continue + + einfo(" [" x "/" LIBCOUNT "] Scanning " DIRLIST[x] " ...") + + pipe = "find " DIRLIST[x] "/ -name '*.la' 2>/dev/null" + while (((pipe) | getline la_files) > 0) { + + # Do nothing if the .la file is located in gcc's internal lib path + if (la_files ~ GCCLIBPREFIX_OLD || + la_files ~ GCCLIBPREFIX_NEW) + continue + + CHANGED = 0 + CHOST_CHANGED = 0 + + # See if we need to fix the .la file + while ((getline la_data < (la_files)) > 0) { + if (OLDCHOST != "") { + if ((gsub(OLDGCCLIB1 "[/[:space:]]+", + GCCLIB, la_data) > 0) || + (gsub(OLDGCCLIB2 "[/[:space:]]+", + GCCLIB, la_data) > 0)) { + CHANGED = 1 + CHOST_CHANGED = 1 + } + } + if (OLDVER != NEWVER) { + if ((gsub(GCCLIBPREFIX_OLD CHOST "/" OLDVER "[/[:space:]]*", + GCCLIB "/" NEWVER, la_data) > 0) || + (gsub(GCCLIBPREFIX_NEW CHOST "/" OLDVER "[/[:space:]]*", + GCCLIB "/" NEWVER, la_data) > 0)) + CHANGED = 1 + } + } + close(la_files) + + # Do the actual changes in a second loop, as we can then + # verify that CHOST_CHANGED among things is correct ... + if (CHANGED) { + ewarnn(" FIXING: " la_files " ...") + + if (CHANGED) + printn("[") + + # Clear the temp file (removing rather than '>foo' is better + # out of a security point of view?) + dosystem("rm -f " la_files ".new") + + while ((getline la_data < (la_files)) > 0) { + if (OLDCHOST != "") { + tmpstr = gensub(OLDGCCLIB1 "([/[:space:]]+)", + GCCLIB "\\1", "g", la_data) + tmpstr = gensub(OLDGCCLIB2 "([/[:space:]]+)", + GCCLIB "\\1", "g", tmpstr) + + if (la_data != tmpstr) { + printn("c") + la_data = tmpstr + } + + if (CHOST_CHANGED > 0) { + # We try to be careful about CHOST changes outside + # the gcc library path (meaning we cannot match it + # via /GCCLIBPREFIX CHOST/) ... + + # Catch: + # + # dependency_libs=' -L/usr/CHOST/{bin,lib}' + # + gsub("-L/usr/" OLDCHOST "/", + "-L/usr/" CHOST "/", la_data) + # Catch: + # + # dependency_libs=' -L/usr/lib/gcc-lib/CHOST/VER/../../../../CHOST/lib' + # + la_data = gensub("(" GCCLIB "/[^[:space:]]+)/" OLDCHOST "/", + "\\1/" CHOST "/", "g", la_data) + } + } + + if (OLDVER != NEWVER) { + # Catch: + # + # dependency_libs=' -L/usr/lib/gcc/CHOST/VER' + # + tmpstr = gensub(GCCLIBPREFIX_OLD CHOST "/" OLDVER "([/[:space:]]+)", + GCCLIB "/" NEWVER "\\1", "g", la_data) + tmpstr = gensub(GCCLIBPREFIX_NEW CHOST "/" OLDVER "([/[:space:]]+)", + GCCLIB "/" NEWVER "\\1", "g", tmpstr) + + if (la_data != tmpstr) { + # Catch: + # + # dependency_libs=' -L/usr/lib/gcc-lib/../../CHOST/lib' + # + # in cases where we have gcc34 + tmpstr = gensub(GCCLIBPREFIX_OLD "(../../" CHOST "/lib)", + GCCLIBPREFIX "\\1", "g", tmpstr) + tmpstr = gensub(GCCLIBPREFIX_NEW "(../../" CHOST "/lib)", + GCCLIBPREFIX "\\1", "g", tmpstr) + printn("v") + la_data = tmpstr + } + } + + print la_data >> (la_files ".new") + } + + if (CHANGED) + print "]" + + close(la_files) + close(la_files ".new") + + assert(dosystem("mv -f " la_files ".new " la_files), + "dosystem(\"mv -f " la_files ".new " la_files "\")") + } + } + + close(pipe) + } +} + +# vim:ts=4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sys-devel/gcc/files/awk/fixlafiles.awk-no_gcc_la Tue Jun 24 10:00:49 2008 +0200 @@ -0,0 +1,330 @@ +# Copyright 1999-2005 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc/files/awk/fixlafiles.awk-no_gcc_la,v 1.2 2006/05/15 00:17:46 vapier Exp $ + +# +# Helper functions +# +function printn(string) { + system("echo -n \"" string "\"") +} +function einfo(string) { + system("echo -e \" \\e[32;01m*\\e[0m " string "\"") +} +function einfon(string) { + system("echo -ne \" \\e[32;01m*\\e[0m " string "\"") +} +function ewarn(string) { + system("echo -e \" \\e[33;01m*\\e[0m " string "\"") +} +function ewarnn(string) { + system("echo -ne \" \\e[33;01m*\\e[0m " string "\"") +} +function eerror(string) { + system("echo -e \" \\e[31;01m*\\e[0m " string "\"") +} + +# +# assert(condition, errmsg) +# assert that a condition is true. Otherwise exit. +# +function assert(condition, string) { + if (! condition) { + printf("%s:%d: assertion failed: %s\n", + FILENAME, FNR, string) > "/dev/stderr" + _assert_exit = 1 + exit 1 + } +} + +# +# system(command, return) +# wrapper that normalizes return codes ... +# +function dosystem(command, ret) { + ret = 0 + ret = system(command) + if (ret == 0) + return 1 + else + return 0 +} + +BEGIN { + # + # Get our variables from environment + # + OLDVER = ENVIRON["OLDVER"] + OLDCHOST = ENVIRON["OLDCHOST"] + + if (OLDVER == "") { + eerror("Could not get OLDVER!"); + exit 1 + } + + # Setup some sane defaults + LIBCOUNT = 2 + HAVE_GCC34 = 0 + DIRLIST[1] = "/lib" + DIRLIST[2] = "/usr/lib" + + # + # Walk /etc/ld.so.conf to discover all our library paths + # + pipe = "cat /etc/ld.so.conf | sort 2>/dev/null" + while(((pipe) | getline ldsoconf_data) > 0) { + if (ldsoconf_data !~ /^[[:space:]]*#/) { + if (ldsoconf_data == "") continue + + # Remove any trailing comments + sub(/#.*$/, "", ldsoconf_data) + # Remove any trailing spaces + sub(/[[:space:]]+$/, "", ldsoconf_data) + + # If there's more than one path per line, split + # it up as if they were sep lines + split(ldsoconf_data, nodes, /[:,[:space:]]/) + + # Now add the rest from ld.so.conf + for (x in nodes) { + # wtf does this line do ? + sub(/=.*/, "", nodes[x]) + # Prune trailing / + sub(/\/$/, "", nodes[x]) + + if (nodes[x] == "") continue + + # + # Drop the directory if its a child directory of + # one that was already added ... + # For example, if we have: + # /usr/lib /usr/libexec /usr/lib/mozilla /usr/lib/nss + # We really just want to save /usr/lib /usr/libexec + # + CHILD = 0 + for (y in DIRLIST) { + if (nodes[x] ~ "^" DIRLIST[y] "(/|$)") { + CHILD = 1 + break + } + } + if (CHILD) continue + + DIRLIST[++LIBCOUNT] = nodes[x] + } + } + } + close(pipe) + + # + # Get line from gcc's output containing CHOST + # + pipe = "gcc -print-file-name=libgcc.a 2>/dev/null" + if ((!((pipe) | getline TMP_CHOST)) || (TMP_CHOST == "")) { + close(pipe) + + # If we fail to get the CHOST, see if we can get the CHOST + # portage thinks we are using ... + pipe = "/usr/bin/portageq envvar 'CHOST'" + assert(((pipe) | getline CHOST), "(" pipe ") | getline CHOST") + } else { + # Check pre gcc-3.4.x versions + CHOST = gensub("^.+lib/gcc-lib/([^/]+)/[0-9]+.+$", "\\1", 1, TMP_CHOST) + + if (CHOST == TMP_CHOST || CHOST == "") { + # Check gcc-3.4.x or later + CHOST = gensub("^.+lib/gcc/([^/]+)/[0-9]+.+$", "\\1", 1, TMP_CHOST); + + if (CHOST == TMP_CHOST || CHOST == "") + CHOST = "" + else + HAVE_GCC34 = 1 + } + } + close(pipe) + + if (CHOST == "") { + eerror("Could not get gcc's CHOST!") + exit 1 + } + + if (OLDCHOST != "") + if (OLDCHOST == CHOST) + OLDCHOST = "" + + GCCLIBPREFIX_OLD = "/usr/lib/gcc-lib/" + GCCLIBPREFIX_NEW = "/usr/lib/gcc/" + + if (HAVE_GCC34) + GCCLIBPREFIX = GCCLIBPREFIX_NEW + else + GCCLIBPREFIX = GCCLIBPREFIX_OLD + + GCCLIB = GCCLIBPREFIX CHOST + + if (OLDCHOST != "") { + OLDGCCLIB1 = GCCLIBPREFIX_OLD OLDCHOST + OLDGCCLIB2 = GCCLIBPREFIX_NEW OLDCHOST + } + + # Get current gcc's version + pipe = "gcc -dumpversion" + assert(((pipe) | getline NEWVER), "(" pipe ") | getline NEWVER)") + close(pipe) + + if (NEWVER == "") { + eerror("Could not get gcc's version!") + exit 1 + } + + # Nothing to do ? + # NB: Do not check for (OLDVER == NEWVER) anymore, as we might need to + # replace libstdc++.la .... + if ((OLDVER == "") && (OLDCHOST == "")) + exit 0 + + # + # Ok, now let's scan for the .la files and actually fix them up + # + for (x = 1; x <= LIBCOUNT; x++) { + # Do nothing if the target dir is gcc's internal library path + if (DIRLIST[x] ~ GCCLIBPREFIX_OLD || + DIRLIST[x] ~ GCCLIBPREFIX_NEW) + continue + + einfo(" [" x "/" LIBCOUNT "] Scanning " DIRLIST[x] " ...") + + pipe = "find " DIRLIST[x] "/ -name '*.la' 2>/dev/null" + while (((pipe) | getline la_files) > 0) { + + # Do nothing if the .la file is located in gcc's internal lib path + if (la_files ~ GCCLIBPREFIX_OLD || + la_files ~ GCCLIBPREFIX_NEW) + continue + + CHANGED = 0 + CHOST_CHANGED = 0 + + # See if we need to fix the .la file + while ((getline la_data < (la_files)) > 0) { + if (OLDCHOST != "") { + if ((gsub(OLDGCCLIB1 "[/[:space:]]+", + GCCLIB, la_data) > 0) || + (gsub(OLDGCCLIB2 "[/[:space:]]+", + GCCLIB, la_data) > 0)) { + CHANGED = 1 + CHOST_CHANGED = 1 + } + } + if (OLDVER != NEWVER) { + if ((gsub(GCCLIBPREFIX_OLD CHOST "/" OLDVER "[/[:space:]]*", + GCCLIB "/" NEWVER, la_data) > 0) || + (gsub(GCCLIBPREFIX_NEW CHOST "/" OLDVER "[/[:space:]]*", + GCCLIB "/" NEWVER, la_data) > 0)) + CHANGED = 1 + } + # We now check if we have libstdc++.la, as we remove the + # libtool linker scripts for gcc ... + # We do this last, as we only match the new paths + if (gsub(GCCLIB "/" NEWVER "/libstdc\\+\\+\\.la", + "-lstdc++", la_data) > 0) + CHANGED = 1 + } + close(la_files) + + # Do the actual changes in a second loop, as we can then + # verify that CHOST_CHANGED among things is correct ... + if (CHANGED) { + ewarnn(" FIXING: " la_files " ...[") + + # Clear the temp file (removing rather than '>foo' is better + # out of a security point of view?) + dosystem("rm -f " la_files ".new") + + while ((getline la_data < (la_files)) > 0) { + if (OLDCHOST != "") { + tmpstr = gensub(OLDGCCLIB1 "([/[:space:]]+)", + GCCLIB "\\1", "g", la_data) + tmpstr = gensub(OLDGCCLIB2 "([/[:space:]]+)", + GCCLIB "\\1", "g", tmpstr) + + if (la_data != tmpstr) { + printn("c") + la_data = tmpstr + } + + if (CHOST_CHANGED > 0) { + # We try to be careful about CHOST changes outside + # the gcc library path (meaning we cannot match it + # via /GCCLIBPREFIX CHOST/) ... + + # Catch: + # + # dependency_libs=' -L/usr/CHOST/{bin,lib}' + # + gsub("-L/usr/" OLDCHOST "/", + "-L/usr/" CHOST "/", la_data) + # Catch: + # + # dependency_libs=' -L/usr/lib/gcc-lib/CHOST/VER/../../../../CHOST/lib' + # + la_data = gensub("(" GCCLIB "/[^[:space:]]+)/" OLDCHOST "/", + "\\1/" CHOST "/", "g", la_data) + } + } + + if (OLDVER != NEWVER) { + # Catch: + # + # dependency_libs=' -L/usr/lib/gcc/CHOST/VER' + # + tmpstr = gensub(GCCLIBPREFIX_OLD CHOST "/" OLDVER "([/[:space:]]+)", + GCCLIB "/" NEWVER "\\1", "g", la_data) + tmpstr = gensub(GCCLIBPREFIX_NEW CHOST "/" OLDVER "([/[:space:]]+)", + GCCLIB "/" NEWVER "\\1", "g", tmpstr) + + if (la_data != tmpstr) { + # Catch: + # + # dependency_libs=' -L/usr/lib/gcc-lib/../../CHOST/lib' + # + # in cases where we have gcc34 + tmpstr = gensub(GCCLIBPREFIX_OLD "(../../" CHOST "/lib)", + GCCLIBPREFIX "\\1", "g", tmpstr) + tmpstr = gensub(GCCLIBPREFIX_NEW "(../../" CHOST "/lib)", + GCCLIBPREFIX "\\1", "g", tmpstr) + printn("v") + la_data = tmpstr + } + } + + # We now check if we have libstdc++.la, as we remove the + # libtool linker scripts for gcc and any referencese in any + # libtool linker scripts. + # We do this last, as we only match the new paths + tmpstr = gensub(GCCLIB "/" NEWVER "/libstdc\\+\\+\\.la", + "-lstdc++", "g", la_data); + if (la_data != tmpstr) { + printn("l") + la_data = tmpstr + } + + print la_data >> (la_files ".new") + } + + if (CHANGED) + print "]" + + close(la_files) + close(la_files ".new") + + assert(dosystem("mv -f " la_files ".new " la_files), + "dosystem(\"mv -f " la_files ".new " la_files "\")") + } + } + + close(pipe) + } +} + +# vim:ts=4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sys-devel/gcc/files/awk/scanforssp.awk Tue Jun 24 10:00:49 2008 +0200 @@ -0,0 +1,225 @@ +# Copyright 1999-2004 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# Author: Martin Schlemmer <azarah@gentoo.org> +# Contributor: Ned Ludd <solar@gentoo.org> +# Contributor: Natanael Copa <nat@c2i.net> +# Contributor: Carter Smithhart <derheld42@derheld.net> +# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc/files/awk/scanforssp.awk,v 1.7 2004/07/15 00:59:02 agriffis Exp $ + + +# Does not seem to be used in this script. +function printn(string) +{ + printf("%s", string) +} + +function einfo(string) +{ + printf(" %s %s%s", "\033[32;01m*\033[0m", string, "\n") +} + +# Does not seem to be used in this script. +function einfon(string) +{ + printf(" %s %s" , "\033[32;01m*\033[0m", string) +} + +function ewarn(string) +{ + printf(" %s %s%s" , "\033[33;01m*\033[0m", string, "\n") +} + +# Does not seem to be used in this script. +function ewarnn(string) +{ + printf("%s %s" , "\032[33;01m*\033[0m", string) +} + +function eerror(string) +{ + printf(" %s %s%s" , "\033[31;01m*\033[0m", string, "\n") +} + + # These are private, else wierd things + # might happen ... +function iself(scan_files, scan_file_pipe, scan_data) { + # Can we open() a file and read() 4 bytes? + scan_file_pipe = ("head -c 4 " scan_files " 2>/dev/null | tail -c 3") + scan_file_pipe | getline scan_data + close(scan_file_pipe) + return ((scan_data == "ELF") ? 0 : 1) +} + +BEGIN { + # Do we have etcat ? + pipe = ("which etcat 2>/dev/null") + if ((((pipe) | getline etcat_data) > 0) && (etcat_data != "")) + auto_etcat = 1 + else + auto_etcat = 0 + + # Fix bug that causes script to fail when pipe is not closed. Closes bug #36792 + close(pipe) + + DIRCOUNT = 0 + # Add the two default library paths + DIRLIST[1] = "/lib" + DIRLIST[2] = "/usr/lib" + + # Walk /etc/ld.so.conf line for line and get any library paths + pipe = ("cat /etc/ld.so.conf 2>/dev/null | sort") + while(((pipe) | getline ldsoconf_data) > 0) { + + if (ldsoconf_data !~ /^[[:space:]]*#/) { + + if (ldsoconf_data == "") continue + + # Remove any trailing comments + sub(/#.*$/, "", ldsoconf_data) + # Remove any trailing spaces + sub(/[[:space:]]+$/, "", ldsoconf_data) + + split(ldsoconf_data, nodes, /[:,[:space:]]/) + + # Now add the rest from ld.so.conf + for (x in nodes) { + + sub(/=.*/, "", nodes[x]) + sub(/\/$/, "", nodes[x]) + + if (nodes[x] == "") continue + + CHILD = 0 + + # Drop the directory if its a child directory of + # one that was already added ... + for (y in DIRLIST) { + + if (nodes[x] ~ "^" DIRLIST[y]) { + + CHILD = 1 + break + } + } + + if (CHILD) continue + + DIRLIST[++DIRCOUNT + 2] = nodes[x] + } + } + } + +# We have no guarantee that ld.so.conf have more library paths than +# the default, and its better scan files only in /lib and /usr/lib +# than nothing at all ... +# +# exit_val = close(pipe) +# if (exit_val != 0) +# print(exit_val " - " ERRNO) +# +# if (DIRCOUNT == 0) { +# eerror("Could not read from /etc/ld.so.conf!") +# exit 1 +# } + + # Correct DIRCOUNT, as we already added /lib and /usr/lib + DIRCOUNT += 2 + + # Add all the dirs in $PATH + split(ENVIRON["PATH"], TMPPATHLIST, ":") + count = asort(TMPPATHLIST, PATHLIST) + for (x = 1;x <= count;x++) { + + ADDED = 0 + + # Already added? + for (dnode in DIRLIST) + if (PATHLIST[x] == DIRLIST[dnode]) + ADDED = 1 + + if (ADDED) + continue + + # Valid? If so, add it ... + if (((PATHLIST[x] != "") && (PATHLIST[x] != "/") && (PATHLIST[x] != "."))) + DIRLIST[++DIRCOUNT] = PATHLIST[x] + + } + + GCCLIBPREFIX = "/usr/lib/gcc-lib/" + + for (x = 1;x <= DIRCOUNT;x++) { + + # Do nothing if the target dir is gcc's internal library path + if (DIRLIST[x] ~ GCCLIBPREFIX) continue + + einfo(" Scanning " ((x <= 9) ? "0"x : x)" of " DIRCOUNT " " DIRLIST[x] "...") + + pipe = ("find " DIRLIST[x] "/ -type f -perm -1 2>/dev/null") + while ( (pipe | getline scan_files) > 0) { + + #print scan_files + # Do nothing if the file is located in gcc's internal lib path ... + if (scan_files ~ GCCLIBPREFIX) continue + # Or if its hardend files ... + if (scan_files ~ "/lib/libgcc-3" ) continue + # Or not a elf image ... + if (iself(scan_files)) continue + + scan_file_pipe = ("readelf -s " scan_files " 2>&1") + while (((scan_file_pipe) | getline scan_data) > 0) { + bad = 0; + if (scan_data ~ /__guard@GCC/ || scan_data ~ /__guard@@GCC/) { + bad = 1; + print + + # 194: 00000000 32 OBJECT GLOBAL DEFAULT UND __guard@GCC_3.0 (3) + # 59: 00008ee0 32 OBJECT GLOBAL DEFAULT 22 __guard@@GCC_3.0 + split(scan_data, scan_data_nodes) + ewarn("Found " scan_data_nodes[8] " in " scan_files "!") + print + } + if (scan_data ~ /readelf: Error: Unable to seek/) { + bad = 1; + print + ewarn("Error executing readelf. Bad block? Filesystem error? in " scan_files) + print + } + + if (bad) { + + if (auto_etcat) { + + # Use etcat that comes with gentoolkit if auto_etcat is true. + etcat_pipe = ("etcat belongs " scan_files) + (etcat_pipe) | getline etcat_belongs + + while(((etcat_pipe) | getline etcat_belongs) > 0) + eerror(etcat_belongs != "" ? "Please emerge '>=" etcat_belongs "'": "") + close(etcat_pipe) + } else { + + eerror("You need to remerge package that above file belongs to!") + eerror("To find out what package it is, please emerge gentoolkit,") + eerror("and then run:") + print + print " # etcat belongs " scan_files + } + + print + + close(scan_file_pipe) + close(pipe) + exit(1) + } + } + close(scan_file_pipe) + } + close(pipe) + } + + exit(0) +} + + +# vim:ts=4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sys-devel/gcc/files/c89 Tue Jun 24 10:00:49 2008 +0200 @@ -0,0 +1,23 @@ +#! /bin/sh + +# Call the appropriate C compiler with options to accept ANSI/ISO C +# The following options are the same (as of gcc-2.95): +# -ansi +# -std=c89 +# -std=iso9899:1990 + +extra_flag=-std=c89 + +for i; do + case "$i" in + -ansi|-std=c89|-std=iso9899:1990) + extra_flag= + ;; + -std=*) + echo >&2 "`basename $0` called with non ANSI/ISO C option $i" + exit 1 + ;; + esac +done + +exec gcc $extra_flag ${1+"$@"}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sys-devel/gcc/files/c99 Tue Jun 24 10:00:49 2008 +0200 @@ -0,0 +1,24 @@ +#! /bin/sh + +# Call the appropriate C compiler with options to accept ANSI/ISO C +# The following options are the same (as of gcc-3.3): +# -std=c99 +# -std=c9x +# -std=iso9899:1999 +# -std=iso9899:199x + +extra_flag=-std=c99 + +for i; do + case "$i" in + -std=c9[9x]|-std=iso9899:199[9x]) + extra_flag= + ;; + -std=*) + echo >&2 "`basename $0` called with non ANSI/ISO C option $i" + exit 1 + ;; + esac +done + +exec gcc $extra_flag ${1+"$@"}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sys-devel/gcc/files/fix_libtool_files.sh Tue Jun 24 10:00:49 2008 +0200 @@ -0,0 +1,72 @@ +#!/bin/bash +# Copyright 1999-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc/files/fix_libtool_files.sh,v 1.14 2007/09/06 11:00:44 uberlord Exp $ + +usage() { +cat << "USAGE_END" +Usage: fix_libtool_files.sh <old-gcc-version> [--oldarch <old-CHOST>] + + Where <old-gcc-version> is the version number of the + previous gcc version. For example, if you updated to + gcc-3.2.1, and you had gcc-3.2 installed, run: + + # fix_libtool_files.sh 3.2 + + If you updated to gcc-3.2.3, and the old CHOST was i586-pc-linux-gnu + but you now have CHOST as i686-pc-linux-gnu, run: + + # fix_libtool_files.sh 3.2 --oldarch i586-pc-linux-gnu + + Note that if only the CHOST and not the version changed, you can run + it with the current version and the '--oldarch <old-CHOST>' arguments, + and it will do the expected: + + # fix_libtool_files.sh `gcc -dumpversion` --oldarch i586-pc-linux-gnu + +USAGE_END + exit 1 +} + +if [[ $2 != "--oldarch" && $# -ne 1 ]] || \ + [[ $2 == "--oldarch" && $# -ne 3 ]] +then + usage +fi + +ARGV1=$1 +ARGV2=$2 +ARGV3=$3 + +source /etc/profile || exit 1 +source /etc/init.d/functions.sh || exit 1 + +if [[ ${EUID} -ne 0 ]] ; then + eerror "${0##*/}: Must be root." + exit 1 +fi + +# make sure the files come out sane +umask 0022 + +if [[ ${ARGV2} == "--oldarch" ]] && [[ -n ${ARGV3} ]] ; then + OLDCHOST=${ARGV3} +else + OLDCHOST= +fi + +AWKDIR="/lib/rcscripts/awk" + +if [[ ! -r ${AWKDIR}/fixlafiles.awk ]] ; then + eerror "${0##*/}: ${AWKDIR}/fixlafiles.awk does not exist!" + exit 1 +fi + +OLDVER=${ARGV1} + +export OLDVER OLDCHOST + +einfo "Scanning libtool files for hardcoded gcc library paths..." +gawk -f "${AWKDIR}/fixlafiles.awk" + +# vim:ts=4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sys-devel/gcc/files/gcc-configure-LANG.patch Tue Jun 24 10:00:49 2008 +0200 @@ -0,0 +1,64 @@ +The LANG vars aren't reset early enough so when sed tries to use [a-zA-Z] in +option parsing, it may break. + +http://bugs.gentoo.org/103483 + +--- configure ++++ configure +@@ -54,6 +54,19 @@ + infodir='${prefix}/info' + mandir='${prefix}/man' + ++# NLS nuisances. ++for as_var in \ ++ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ ++ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ ++ LC_TELEPHONE LC_TIME ++do ++ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then ++ eval $as_var=C; export $as_var ++ else ++ unset $as_var ++ fi ++done ++ + # Initialize some other variables. + subdirs= + MFLAGS= MAKEFLAGS= +@@ -452,16 +463,6 @@ + esac + done + +-# NLS nuisances. +-# Only set these to C if already set. These must not be set unconditionally +-# because not all systems understand e.g. LANG=C (notably SCO). +-# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! +-# Non-C LC_CTYPE values break the ctype check. +-if test "${LANG+set}" = set; then LANG=C; export LANG; fi +-if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +-if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi +-if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi +- + # confdefs.h avoids OS command line length limits that DEFS can exceed. + rm -rf conftest* confdefs.h + # AIX cpp loses on an empty file, so make sure it contains at least a newline. +@@ -1850,6 +1850,19 @@ + # Compiler output produced by configure, useful for debugging + # configure, is in ./config.log if it exists. + ++# NLS nuisances. ++for as_var in \ ++ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ ++ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ ++ LC_TELEPHONE LC_TIME ++do ++ if (set +x; test -z "`(eval \$as_var=C; export \$as_var) 2>&1`"); then ++ eval \$as_var=C; export \$as_var ++ else ++ unset \$as_var ++ fi ++done ++ + ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" + for ac_option + do
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sys-devel/gcc/files/gcc-configure-texinfo.patch Tue Jun 24 10:00:49 2008 +0200 @@ -0,0 +1,16 @@ +Chances are quite good that the installed makeinfo is sufficient. +So ignore false positives where the makeinfo installed is so new +that it violates the cheesy version grep. + +http://bugs.gentoo.org/198182 + +--- configure ++++ configure +@@ -3573,6 +3573,6 @@ + : + else +- MAKEINFO="$MISSING makeinfo" ++ : + fi + ;; +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sys-devel/gcc/files/gcc-spec-env.patch Tue Jun 24 10:00:49 2008 +0200 @@ -0,0 +1,41 @@ + Add support for external spec file via the GCC_SPECS env var. This + allows us to easily control pie/ssp defaults with gcc-config profiles. + + Original patch by Rob Holland. Extended to support multiple + entries separated by ':' by Kevin F. Quinn + +--- gcc-4/gcc/gcc.c ++++ gcc-4/gcc/gcc.c +@@ -6482,6 +6482,32 @@ + + /* Process any user specified specs in the order given on the command + line. */ ++#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS) || defined (WIN32)) ++ /* Add specs listed in GCC_SPECS. Note; in the process of separating ++ * each spec listed, the string is overwritten at token boundaries ++ * (':') with '\0', an effect of strtok_r(). ++ */ ++ GET_ENVIRONMENT (specs_file, "GCC_SPECS"); ++ if (specs_file && (strlen(specs_file) > 0)) ++ { ++ char *spec, *saveptr; ++ for (spec=strtok_r(specs_file,":",&saveptr); ++ spec!=NULL; ++ spec=strtok_r(NULL,":",&saveptr)) ++ { ++ struct user_specs *user = (struct user_specs *) ++ xmalloc (sizeof (struct user_specs)); ++ ++ user->next = (struct user_specs *) 0; ++ user->filename = spec; ++ if (user_specs_tail) ++ user_specs_tail->next = user; ++ else ++ user_specs_head = user; ++ user_specs_tail = user; ++ } ++ } ++#endif + for (uptr = user_specs_head; uptr; uptr = uptr->next) + { + char *filename = find_a_file (&startfile_prefixes, uptr->filename,
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sys-devel/gcc/files/mkinfodir Tue Jun 24 10:00:49 2008 +0200 @@ -0,0 +1,233 @@ +#!/bin/bash +# $Id: mkinfodir,v 1.1 2001/09/01 07:56:19 drobbins Exp $ +# Generate the top-level Info node, given a directory of Info files +# and (optionally) a skeleton file. The output will be suitable for a +# top-level dir file. The skeleton file contains info topic names in the +# order they should appear in the output. There are three special +# lines that alter the behavior: a line consisting of just "--" causes +# the next line to be echoed verbatim to the output. A line +# containing just "%%" causes all the remaining filenames (wildcards +# allowed) in the rest of the file to be ignored. A line containing +# just "!!" exits the script when reached (unless preceded by a line +# containing just "--"). Once the script reaches the end of the +# skeleton file, it goes through the remaining files in the directory +# in order, putting their entries at the end. The script will use the +# ENTRY information in each info file if it exists. Otherwise it will +# make a minimal entry. + +# sent by Jeffrey Osier <jeffrey@cygnus.com>, who thinks it came from +# zoo@winternet.com (david d `zoo' zuhn) + +# modified 7 April 1995 by Joe Harrington <jh@tecate.gsfc.nasa.gov> to +# take special flags + +INFODIR=$1 +if [ $# = 2 ] ; then + SKELETON=$2 +else + SKELETON=/dev/null +fi + +skip= + +if [ $# -gt 2 ] ; then + echo usage: $0 info-directory [ skeleton-file ] 1>&2 + exit 1 +elif [ -z "${INFODIR}" ] ; then + INFODIR="%%DEFAULT_INFO_DIR%%" +else + true +fi + +if [ ! -d ${INFODIR} ] ; then + echo "$0: first argument must specify a directory" + exit 1 +fi + +### output the dir header +echo "-*- Text -*-" +echo "This file was generated automatically by $0." +echo "This version was generated on `date`" +echo "by `whoami`@`hostname` for `(cd ${INFODIR}; pwd)`" + +cat << moobler +\$Id: mkinfodir,v 1.1 2001/09/01 07:56:19 drobbins Exp $ +This is the file .../info/dir, which contains the topmost node of the +Info hierarchy. The first time you invoke Info you start off +looking at that node, which is (dir)Top. + +File: dir Node: Top This is the top of the INFO tree + + This (the Directory node) gives a menu of major topics. + Typing "q" exits, "?" lists all Info commands, "d" returns here, + "h" gives a primer for first-timers, + "mEmacs<Return>" visits the Emacs topic, etc. + + In Emacs, you can click mouse button 2 on a menu item or cross reference + to select it. + +* Menu: The list of major topics begins on the next line. + +moobler + +### go through the list of files in the skeleton. If an info file +### exists, grab the ENTRY information from it. If an entry exists +### use it, otherwise create a minimal dir entry. +### +### Then remove that file from the list of existing files. If any +### additional files remain (ones that don't have a skeleton entry), +### then generate entries for those in the same way, putting the info for +### those at the end.... + +infofiles=`(cd ${INFODIR}; /bin/ls | grep -v '\-[0-9]*\.gz$' | grep -v '\-[0-9]*$' | egrep -v '^dir$|^dir\.info$|^dir\.orig$')` + +# echoing gets clobbered by backquotes; we do it the hard way... +lines=`wc $SKELETON | awk '{print $1}'` +line=1 +while [ $lines -ge $line ] ; do + # Read one line from the file. This is so that we can echo lines with + # whitespace and quoted characters in them. + fileline=`awk NR==$line $SKELETON` + + # flag fancy features + if [ ! -z "$echoline" ] ; then # echo line + echo "$fileline" + fileline= + echoline= + elif [ "${fileline}" = "--" ] ; then # should we echo the next line? + echoline=1 + elif [ "${fileline}" = "%%" ] ; then # eliminate remaining files from dir? + skip=1 + elif [ "${fileline}" = "!!" ] ; then # quit now + exit 0 + fi + + # handle files if they exist + for file in $fileline"" ; do # expand wildcards ("" handles blank lines) + + fname= + + if [ -z "$echoline" -a ! -z "$file" ] ; then + + # Find the file to operate upon. Check both possible names. + infoname=`echo $file | sed 's/\.gz$//'` + infoname=`echo $infoname | sed 's/\.info$//'` + noext= + ext= + if [ -f ${INFODIR}/$infoname ] ; then + noext=$infoname + fi + if [ -f ${INFODIR}/${infoname}.info ] ; then + ext=${infoname}.info + fi + if [ -f ${INFODIR}/${infoname}.info.gz ] ; then + ext=${infoname}.info.gz + fi + # If it exists with both names take what was said in the file. + if [ ! -z "$ext" -a ! -z "$noext" ]; then + fname=$file + warn="### Warning: $ext and $noext both exist! Using ${file}. ###" + elif [ ! \( -z "$ext" -a -z "$noext" \) ]; then + # just take the name if it exists only once + fname=${noext}${ext} + fi + + # if we found something and aren't skipping, do the entry + if [ ! -z "$fname" ] ; then + if [ -z "$skip" ] ; then + + if [ ! -z "$warn" ] ; then # issue any warning + echo $warn + warn= + fi + if [ "${fname##*.}" = "gz" ] ; then + entry=`zcat ${INFODIR}/${fname} | sed -e '1,/START-INFO-DIR-ENTRY/d' \ + -e '/END-INFO-DIR-ENTRY/,$d' ` + else + entry=`sed -e '1,/START-INFO-DIR-ENTRY/d' \ + -e '/END-INFO-DIR-ENTRY/,$d' ${INFODIR}/$fname` + fi + if [ ! -z "${entry}" ] ; then + echo "${entry}" + else + echo "* ${infoname}: (${infoname})." + fi + fi + + # remove the name from the directory listing + infofiles=`echo "" ${infofiles} "" | sed -e "s/ ${fname} / /" -e "s/ / /g"` + + fi + + fi + + done + + line=`expr $line + 1` +done + +if [ -z "${infofiles}" ] ; then + exit 0 +elif [ $lines -gt 0 ]; then + echo +fi + +# Sort remaining files by INFO-DIR-SECTION. +prevsect= +filesectdata=`(cd ${INFODIR}; fgrep INFO-DIR-SECTION /dev/null ${infofiles} | \ + fgrep -v 'INFO-DIR-SECTION Miscellaneous' | \ + sort -t: -k2 -k1 | tr ' ' '_')` +for sectdata in ${filesectdata}; do + file=`echo ${sectdata} | cut -d: -f1` + section=`sed -n -e 's/^INFO-DIR-SECTION //p' ${INFODIR}/${file}` + infofiles=`echo "" ${infofiles} "" | sed -e "s/ ${file} / /" -e "s/ / /g"` + + if [ "${prevsect}" != "${section}" ] ; then + if [ ! -z "${prevsect}" ] ; then + echo "" + fi + echo "${section}" + prevsect="${section}" + fi + infoname=`echo $file | sed 's/\.gz$//'` + infoname=`echo $infoname | sed 's/\.info$//'` + if [ "${file##*.}" = "gz" ] ; then + entry=`zcat ${INFODIR}/$file | sed -e '1,/START-INFO-DIR-ENTRY/d' \ + -e '/END-INFO-DIR-ENTRY/,$d' ` + else + entry=`sed -e '1,/START-INFO-DIR-ENTRY/d' \ + -e '/END-INFO-DIR-ENTRY/,$d' ${INFODIR}/$file` + fi + if [ ! -z "${entry}" ] ; then + echo "${entry}" + elif [ ! -d "${INFODIR}/${file}" ] ; then + echo "* ${infoname}: (${infoname})." + fi +done + +# Process miscellaneous files. +for file in ${infofiles}; do + if [ ! -z "${prevsect}" ] ; then + echo "" + echo "Miscellaneous" + prevsect="" + fi + + infoname=`echo $file | sed 's/\.gz$//'` + infoname=`echo $infoname | sed 's/\.info$//'` + if [ "${file##*.}" = "gz" ] ; then + entry=`zcat ${INFODIR}/${file} | sed -e '1,/START-INFO-DIR-ENTRY/d' \ + -e '/END-INFO-DIR-ENTRY/,$d'` + else + entry=`sed -e '1,/START-INFO-DIR-ENTRY/d' \ + -e '/END-INFO-DIR-ENTRY/,$d' ${INFODIR}/$file` + fi + + + if [ ! -z "${entry}" ] ; then + echo "${entry}" + elif [ ! -d "${INFODIR}/${file}" ] ; then + echo "* ${infoname}: (${infoname})." + fi +done +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sys-devel/gcc/files/pro-police-docs.patch Tue Jun 24 10:00:49 2008 +0200 @@ -0,0 +1,74 @@ +Index: gcc/doc/invoke.texi +=================================================================== +RCS file: /cvsroot/gcc/gcc/gcc/doc/invoke.texi,v +retrieving revision 1.364 +diff -c -3 -p -r1.364 invoke.texi +*** gcc/doc/invoke.texi 21 Nov 2003 11:42:58 -0000 1.364 +--- gcc/doc/invoke.texi 22 Nov 2003 08:12:35 -0000 +*************** in the following sections. +*** 228,234 **** + -Wno-multichar -Wnonnull -Wpacked -Wpadded @gol + -Wparentheses -Wpointer-arith -Wredundant-decls @gol + -Wreturn-type -Wsequence-point -Wshadow @gol +! -Wsign-compare -Wstrict-aliasing @gol + -Wswitch -Wswitch-default -Wswitch-enum @gol + -Wsystem-headers -Wtrigraphs -Wundef -Wuninitialized @gol + -Wunknown-pragmas -Wunreachable-code @gol +--- 228,234 ---- + -Wno-multichar -Wnonnull -Wpacked -Wpadded @gol + -Wparentheses -Wpointer-arith -Wredundant-decls @gol + -Wreturn-type -Wsequence-point -Wshadow @gol +! -Wsign-compare -Wstack-protector -Wstrict-aliasing @gol + -Wswitch -Wswitch-default -Wswitch-enum @gol + -Wsystem-headers -Wtrigraphs -Wundef -Wuninitialized @gol + -Wunknown-pragmas -Wunreachable-code @gol +*************** in the following sections. +*** 681,686 **** +--- 681,687 ---- + -fshort-double -fshort-wchar @gol + -fverbose-asm -fpack-struct -fstack-check @gol + -fstack-limit-register=@var{reg} -fstack-limit-symbol=@var{sym} @gol ++ -fstack-protector -fstack-protector-all @gol + -fargument-alias -fargument-noalias @gol + -fargument-noalias-global -fleading-underscore @gol + -ftls-model=@var{model} @gol +*************** effectively. Often, the problem is that +*** 3014,3019 **** +--- 3015,3024 ---- + complex; GCC will refuse to optimize programs when the optimization + itself is likely to take inordinate amounts of time. + ++ @item -Wstack-protector ++ @opindex Wstack-protector ++ Warn when not issuing stack smashing protection for some reason ++ + @item -Werror + @opindex Werror + Make all warnings into errors. +*************** and grows downwards, you can use the fla +*** 11474,11479 **** +--- 11479,11502 ---- + @option{-fstack-limit-symbol=__stack_limit} and + @option{-Wl,--defsym,__stack_limit=0x7ffe0000} to enforce a stack limit + of 128KB@. Note that this may only work with the GNU linker. ++ ++ @item -fstack-protector ++ @item -fstack-protector-all ++ @opindex fstack-protector ++ @opindex fstack-protector-all ++ @opindex fno-stack-protector ++ Generate code to protect an application from a stack smashing ++ attack. The features are (1) the insertion of random value next to the ++ frame pointer to detect the integrity of the stack, (2) the reordering ++ of local variables to place buffers after pointers to avoid the ++ corruption of pointers that could be used to further corrupt arbitrary ++ memory locations, (3) the copying of pointers in function arguments to ++ an area preceding local variable buffers to prevent the corruption of ++ pointers that could be used to further corrupt arbitrary memory ++ locations, and the (4) omission of instrumentation code from some ++ functions to decrease the performance overhead. If the integrity ++ would be broken, the program is aborted. If no-stack-protector is ++ specified, instrumentation codes are generated at every functions. + + @cindex aliasing of parameters + @cindex parameters, aliased
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sys-devel/gcc/files/scan_libgcc_linked_ssp.sh Tue Jun 24 10:00:49 2008 +0200 @@ -0,0 +1,42 @@ +#!/bin/bash +# Copyright 1999-2004 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# Author: Martin Schlemmer <azarah@gentoo.org> +# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc/files/scan_libgcc_linked_ssp.sh,v 1.4 2007/05/05 05:13:15 vapier Exp $ + +usage() { +cat << "USAGE_END" +Usage: can_libgcc_linked_ssp.sh + + This scans the system for files that contains the __guard symbol, that was + linked against libgcc. + + +USAGE_END + + exit 1 +} + +if [ "$#" -ne 0 ] +then + usage +fi + +source /etc/profile || exit 1 +source /etc/init.d/functions.sh || exit 1 + +AWKDIR="$(portageq envvar PORTDIR)/sys-devel/gcc/files/awk" + +if [ ! -r "${AWKDIR}/scanforssp.awk" ] +then + eerror "${0##*/}: ${AWKDIR}/scanforssp.awk does not exist!" + exit 1 +fi + +einfo "Scanning system for __guard@GCC symbols..." +/bin/gawk -f "${AWKDIR}/scanforssp.awk" + +exit $? + + +# vim:ts=4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sys-devel/gcc/gcc-4.3.1-r1.ebuild Tue Jun 24 10:00:49 2008 +0200 @@ -0,0 +1,67 @@ +# Copyright 1999-2008 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc/gcc-4.3.1.ebuild,v 1.4 2008/06/21 04:23:11 vapier Exp $ + +PATCH_VER="1.0" +UCLIBC_VER="1.0" + +ETYPE="gcc-compiler" + +# whether we should split out specs files for multiple {PIE,SSP}-by-default +# and vanilla configurations. +SPLIT_SPECS=no #${SPLIT_SPECS-true} hard disable until #106690 is fixed + +inherit toolchain + +DESCRIPTION="The GNU Compiler Collection. Includes C/C++, java compilers, pie+ssp extensions, Haj Ten Brugge runtime bounds checking" + +LICENSE="GPL-2 LGPL-2.1" +KEYWORDS="~amd64 ~hppa ~ia64 ~ppc ~ppc64 ~x86" + +RDEPEND=">=sys-libs/zlib-1.1.4 + >=sys-devel/gcc-config-1.4 + virtual/libiconv + >=dev-libs/gmp-4.2.1 + >=dev-libs/mpfr-2.3 + !build? ( + gcj? ( + gtk? ( + x11-libs/libXt + x11-libs/libX11 + x11-libs/libXtst + x11-proto/xproto + x11-proto/xextproto + >=x11-libs/gtk+-2.2 + x11-libs/pango + ) + >=media-libs/libart_lgpl-2.1 + app-arch/zip + app-arch/unzip + ) + >=sys-libs/ncurses-5.2-r2 + nls? ( sys-devel/gettext ) + )" +DEPEND="${RDEPEND} + test? ( sys-devel/autogen dev-util/dejagnu ) + >=sys-apps/texinfo-4.2-r4 + >=sys-devel/bison-1.875 + amd64? ( >=sys-libs/glibc-2.7-r2 ) + ppc? ( >=${CATEGORY}/binutils-2.17 ) + ppc64? ( >=${CATEGORY}/binutils-2.17 ) + >=${CATEGORY}/binutils-2.15.94" +PDEPEND=">=sys-devel/gcc-config-1.4" +if [[ ${CATEGORY} != cross-* ]] ; then + PDEPEND="${PDEPEND} elibc_glibc? ( >=sys-libs/glibc-2.6 )" +fi + +src_unpack() { + gcc_src_unpack + + use vanilla && return 0 + + [[ ${CHOST} == ${CTARGET} ]] && epatch "${FILESDIR}"/gcc-spec-env.patch + + [[ ${CTARGET} == *-softfloat-* ]] && epatch "${FILESDIR}"/4.0.2/gcc-4.0.2-softfloat.patch + + epatch "${FILESDIR}"/4.3.1/gcc-4.3.1-emit-rtl-Os.patch +}