diff mbox series

configure: Don't warn about lack of PIE on macOS

Message ID 20200601124257.32057-1-r.bolshakov@yadro.com (mailing list archive)
State New, archived
Headers show
Series configure: Don't warn about lack of PIE on macOS | expand

Commit Message

Roman Bolshakov June 1, 2020, 12:42 p.m. UTC
ld64 is making PIE executables for 10.7 and above by default, as
documented in ld(1).

Signed-off-by: Roman Bolshakov <r.bolshakov@yadro.com>
---
 configure | 2 ++
 1 file changed, 2 insertions(+)

Comments

Cameron Esfahani June 4, 2020, 1:24 a.m. UTC | #1
Reviewed-by: Cameron Esfahani <dirty@apple.com> 

Cameron Esfahani
dirty@apple.com

"It is the spirit and not the form of law that keeps justice alive."

Earl Warren



> On Jun 1, 2020, at 5:42 AM, Roman Bolshakov <r.bolshakov@yadro.com> wrote:
> 
> ld64 is making PIE executables for 10.7 and above by default, as
> documented in ld(1).
> 
> Signed-off-by: Roman Bolshakov <r.bolshakov@yadro.com>
> ---
> configure | 2 ++
> 1 file changed, 2 insertions(+)
> 
> diff --git a/configure b/configure
> index af2ba83f0e..6dddbca4b2 100755
> --- a/configure
> +++ b/configure
> @@ -2137,6 +2137,8 @@ elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
>   QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
>   QEMU_LDFLAGS="-pie $QEMU_LDFLAGS"
>   pie="yes"
> +elif test "$darwin" = "yes"; then
> +  pie="yes"
> elif test "$pie" = "yes"; then
>   error_exit "PIE not available due to missing toolchain support"
> else
> -- 
> 2.26.1
> 
>
Stefan Hajnoczi June 23, 2020, 12:48 p.m. UTC | #2
On Mon, Jun 01, 2020 at 03:42:57PM +0300, Roman Bolshakov wrote:
> ld64 is making PIE executables for 10.7 and above by default, as
> documented in ld(1).
> 
> Signed-off-by: Roman Bolshakov <r.bolshakov@yadro.com>
> ---
>  configure | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/configure b/configure
> index af2ba83f0e..6dddbca4b2 100755
> --- a/configure
> +++ b/configure
> @@ -2137,6 +2137,8 @@ elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
>    QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
>    QEMU_LDFLAGS="-pie $QEMU_LDFLAGS"
>    pie="yes"
> +elif test "$darwin" = "yes"; then
> +  pie="yes"

Hi Roman,
I'm wondering why the elif above doesn't detect the presence of PIE
automatically?

  elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
    QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
    QEMU_LDFLAGS="-pie $QEMU_LDFLAGS"
    pie="yes"

Can this code be tweaked to cover macOS too?

Also CCing Peter Maydell in case he wants to merge this patch directly
into qemu.git.

Stefan
Roman Bolshakov June 23, 2020, 1:15 p.m. UTC | #3
On Tue, Jun 23, 2020 at 01:48:57PM +0100, Stefan Hajnoczi wrote:
> On Mon, Jun 01, 2020 at 03:42:57PM +0300, Roman Bolshakov wrote:
> > ld64 is making PIE executables for 10.7 and above by default, as
> > documented in ld(1).
> > 
> > Signed-off-by: Roman Bolshakov <r.bolshakov@yadro.com>
> > ---
> >  configure | 2 ++
> >  1 file changed, 2 insertions(+)
> > 
> > diff --git a/configure b/configure
> > index af2ba83f0e..6dddbca4b2 100755
> > --- a/configure
> > +++ b/configure
> > @@ -2137,6 +2137,8 @@ elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
> >    QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
> >    QEMU_LDFLAGS="-pie $QEMU_LDFLAGS"
> >    pie="yes"
> > +elif test "$darwin" = "yes"; then
> > +  pie="yes"
> 
> Hi Roman,
> I'm wondering why the elif above doesn't detect the presence of PIE
> automatically?
> 
>   elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
>     QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
>     QEMU_LDFLAGS="-pie $QEMU_LDFLAGS"
>     pie="yes"
> 
> Can this code be tweaked to cover macOS too?
> 
> Also CCing Peter Maydell in case he wants to merge this patch directly
> into qemu.git.
> 
> Stefan

Hi Stefan,

It's because clang does not accept -pie/-no-pie directly:
  $ cc -Werror -fPIE -DPIE -pie main.c
  clang: error: argument unused during compilation: '-pie' [-Werror,-Wunused-command-line-argument]

It has to be passed as linker option, i.e. -Wl,-pie or -Wl,-no_pie. pie
is also a default behaviour of clang/ld64.

I had a patch to enable proper support of pie/no-pie for macOS but I see
little value in it. I don't know where no_pie would be helfpul becuase
clang from Apple Developer Tools can't cross-compile option ROMs.

Thanks,
Roman
diff mbox series

Patch

diff --git a/configure b/configure
index af2ba83f0e..6dddbca4b2 100755
--- a/configure
+++ b/configure
@@ -2137,6 +2137,8 @@  elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
   QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
   QEMU_LDFLAGS="-pie $QEMU_LDFLAGS"
   pie="yes"
+elif test "$darwin" = "yes"; then
+  pie="yes"
 elif test "$pie" = "yes"; then
   error_exit "PIE not available due to missing toolchain support"
 else