On 15 November 2011 08:00, Avi Kivity <a...@redhat.com> wrote: > @@ -1099,6 +1099,37 @@ for flag in $gcc_flags; do > fi > done > > +if test "$pie" = "yes" -a "$static" = "yes" ; then > + echo "static and pie are mutually incompatible" > + exit 1 > +fi
The -a operator to test has been marked obsolescent in POSIX -- please don't use it in new code. (Use if test "$pie" = yes && test "$static" = yes; then ) > +if test "$pie" = "yes" ; then > + cat > $TMPC << EOF > +int main(void) { return 0; } > +EOF > + if compile_prog "-fPIE -DPIE" "-Wl,-pie"; then > + QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS" > + LDFLAGS="-Wl,-pie $LDFLAGS" > + if compile_prog "-fPIE -DPIE" "-Wl,-pie -Wl,-z,relro -Wl,-z,now"; then > + LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS" Why does this second compile test put -fPIE -DPIE into its local cflags and -Wl,-pie into its local ldflags when we just put them into the global cflags/ldflags? > + fi > + else > + echo "Disabling PIE due to missing toolchain support" > + pie="no" This means that if the user explicitly asked for PIE (with --enable-pie") we will carry on even if we couldn't do it. Usually for configure if the user asked for something then not providing it is a fatal error. -- PMM