diff options
author | Michael Olbrich <m.olbrich@pengutronix.de> | 2012-10-21 15:49:01 +0200 |
---|---|---|
committer | Michael Olbrich <m.olbrich@pengutronix.de> | 2012-10-25 00:27:22 +0200 |
commit | 8121f1cf41cb87505e75f8ce8cc02afaaffbdbf8 (patch) | |
tree | a12e5a98503703f6c4392e4246ee86eda3ea877d /scripts/wrapper | |
parent | 1e7dd9c2f9c708060786d1f9ffc7caac8b270887 (diff) | |
download | ptxdist-8121f1cf41cb87505e75f8ce8cc02afaaffbdbf8.tar.gz ptxdist-8121f1cf41cb87505e75f8ce8cc02afaaffbdbf8.tar.xz |
fixup! wrapper: introduce a wrapper for cc, c++ and ld
Diffstat (limited to 'scripts/wrapper')
-rwxr-xr-x | scripts/wrapper/c++-wrapper | 14 | ||||
-rwxr-xr-x | scripts/wrapper/cc-wrapper | 53 | ||||
-rwxr-xr-x | scripts/wrapper/ld-wrapper | 19 | ||||
-rw-r--r-- | scripts/wrapper/libwrapper.sh | 80 |
4 files changed, 104 insertions, 62 deletions
diff --git a/scripts/wrapper/c++-wrapper b/scripts/wrapper/c++-wrapper index ad97e9a28..a79930e1a 100755 --- a/scripts/wrapper/c++-wrapper +++ b/scripts/wrapper/c++-wrapper @@ -1,3 +1,13 @@ -#!/bin/sh +#!/bin/bash -exec $0.real "$@" +. ${PTXDIST_PLATFORMCONFIG} +. "$(dirname "$(readlink -f "$0")")/libwrapper.sh" || exit + +cc_check_args "${@}" + +cc_add_ld_args +cc_add_fortify +cc_add_stack +cxx_add_extra + +exec $0.real "${ARG_LIST[@]}" "$@" diff --git a/scripts/wrapper/cc-wrapper b/scripts/wrapper/cc-wrapper index 8f16b75d5..73c718cff 100755 --- a/scripts/wrapper/cc-wrapper +++ b/scripts/wrapper/cc-wrapper @@ -1,50 +1,13 @@ -#!/bin/sh +#!/bin/bash . ${PTXDIST_PLATFORMCONFIG} +. "$(dirname "$(readlink -f "$0")")/libwrapper.sh" || exit -LINKING=1 -FORTIFY=1 -STDLIB=1 +cc_check_args "${@}" -for ARG in "$@"; do - if [[ "${ARG}" = "-c" ]]; then - LINKING=0 - fi - if [[ "${ARG}" =~ -D_FORTIFY_SOURCE(=|$) ]]; then - FORTIFY=0 - fi - if [[ "${ARG}" = "-nostdlib" || - "${ARG}" = "-ffreestanding" ]]; then - STDLIB=0 - fi -done +cc_add_ld_args +cc_add_fortify +cc_add_stack +cc_add_extra -ARG_LIST="" - -if [[ "${LINKING}" = 1 ]]; then - if [[ "${PTXCONF_TARGET_HARDEN_RELRO}" = "y" ]]; then - ARG_LIST+="-Wl,-z,relro " - fi - if [[ "${PTXCONF_TARGET_HARDEN_BINDNOW}" = "y" ]]; then - ARG_LIST+="-Wl,-z,now " - fi - if [[ "${PTXCONF_TARGET_LINKER_GNUHASH}" = "y" ]]; then - ARG_LIST+="-Wl,--hash-style=gnu " - fi -fi - -if [[ "${FORTIFY}" = 1 ]]; then - if [[ "${PTXCONF_TARGET_HARDEN_FORTIFY}" = "y" ]]; then - ARG_LIST+="-D_FORTIFY_SOURCE=2 " - fi -fi - -if [[ "${STDLIB}" = 1 ]]; then - if [[ "${PTXCONF_TARGET_HARDEN_STACK}" = "y" ]]; then - ARG_LIST+="-fstack-protector --param=ssp-buffer-size=4 " - fi -fi - -#echo $0 $ARG_LIST "$@" >&2 - -exec $0.real $ARG_LIST "$@" +exec $0.real "${ARG_LIST[@]}" "$@" diff --git a/scripts/wrapper/ld-wrapper b/scripts/wrapper/ld-wrapper index f3f38054c..11f785d67 100755 --- a/scripts/wrapper/ld-wrapper +++ b/scripts/wrapper/ld-wrapper @@ -1,19 +1,8 @@ -#!/bin/sh +#!/bin/bash . ${PTXDIST_PLATFORMCONFIG} +. "$(dirname "$(readlink -f "$0")")/libwrapper.sh" || exit -ARG_LIST="" +add_ld_args -if [ "${PTXCONF_TARGET_HARDEN_RELRO}" = "y" ]; then - ARG_LIST+="-z relro " -fi -if [ "${PTXCONF_TARGET_HARDEN_BINDNOW}" = "y" ]; then - ARG_LIST+="-z now " -fi -if [[ "${PTXCONF_TARGET_LINKER_GNUHASH}" = "y" ]]; then - ARG_LIST+="--hash-style=gnu " -fi - -#echo $0 $ARG_LIST "$@" >&2 - -exec $0.real $ARG_LIST "$@" +exec $0.real "${ARG_LIST[@]}" "$@" diff --git a/scripts/wrapper/libwrapper.sh b/scripts/wrapper/libwrapper.sh new file mode 100644 index 000000000..cebc4ee72 --- /dev/null +++ b/scripts/wrapper/libwrapper.sh @@ -0,0 +1,80 @@ +#!/bin/bash + +LINKING=1 +FORTIFY=1 +STDLIB=1 +declare -a ARG_LIST + +cc_check_args() { + for ARG in "$@"; do + if [[ "${ARG}" = "-c" ]]; then + LINKING=0 + fi + if [[ "${ARG}" =~ -D_FORTIFY_SOURCE(=|$) ]]; then + FORTIFY=0 + fi + if [[ "${ARG}" = "-nostdlib" || + "${ARG}" = "-ffreestanding" ]]; then + STDLIB=0 + fi + done +} + +add_arg() { + for arg in "${@}"; do + ARG_LIST[${#ARG_LIST[@]}]="${arg}" + done +} + +add_opt_arg() { + local blacklist="${pkg_wrapper_blacklist}" + local opt="${1}" + shift + + if grep -q "\<${opt}\>" <<< "${blacklist}"; then + return + fi + opt="PTXCONF_${opt}" + if [ -z "${!opt}" ]; then + return + fi + add_arg "${@}" +} + +add_ld_args() { + add_opt_arg TARGET_HARDEN_RELRO "${1}-z,relro" + add_opt_arg TARGET_HARDEN_BINDNOW "${1}-z,now" + add_opt_arg TARGET_LINKER_GNUHASH "${1}--hash-style=gnu" +} + +cc_add_ld_args() { + if [[ "${LINKING}" = 1 ]]; then + add_ld_args "-Wl," + add_arg ${PTXDIST_CROSS_LDFLAGS} + add_opt_arg TARGET_EXTRA_LDFLAGS ${PTXCONF_TARGET_EXTRA_LDFLAGS} + fi +} + +cc_add_fortify() { + if [[ "${FORTIFY}" = 1 ]]; then + add_opt_arg TARGET_HARDEN_FORTIFY "-D_FORTIFY_SOURCE=2" + fi +} + +cc_add_stack() { + if [[ "${STDLIB}" = 1 ]]; then + add_opt_arg TARGET_HARDEN_STACK "-fstack-protector" "--param=ssp-buffer-size=4" + fi +} + +cc_add_extra() { + add_arg ${PTXDIST_CROSS_CPPFLAGS} + add_opt_arg TARGET_EXTRA_CPPFLAGS ${PTXCONF_TARGET_EXTRA_CPPFLAGS} + add_opt_arg TARGET_EXTRA_CFLAGS ${PTXCONF_TARGET_EXTRA_CFLAGS} +} + +cxx_add_extra() { + add_arg ${PTXDIST_CROSS_CPPFLAGS} + add_opt_arg TARGET_EXTRA_CPPFLAGS ${PTXCONF_TARGET_EXTRA_CPPFLAGS} + add_opt_arg TARGET_EXTRA_CXXFLAGS ${PTXCONF_TARGET_EXTRA_CXXFLAGS} +} |