Jan Beulich
2006-Sep-12 15:43 UTC
[Xen-devel] [PATCH] x86-64: suppress some unneeded side effects of -fPIC
Full PIC mode isn''t needed for Xen, namely is there no need to access data objects via the GOT or call functions through the PLT. Adding -fvisibility=hidden (if the compiler supports it) helps, although it doesn''t do as good a job as would be desired (I''m in talks with our compiler guys to understand why). Signed-off-by: Jan Beulich <jbeulich@novell.com> Index: 2006-09-11/xen/arch/x86/Rules.mk ==================================================================--- 2006-09-11.orig/xen/arch/x86/Rules.mk 2006-08-21 18:02:23.000000000 +0200 +++ 2006-09-11/xen/arch/x86/Rules.mk 2006-09-12 17:32:14.000000000 +0200 @@ -11,6 +11,23 @@ HAS_VGA := y pae ?= n supervisor_mode_kernel ?= n +# Test for at least GCC v3.2.x. +gcc-ver = $(shell $(CC) -dumpversion | sed -e ''s/^\(.\)\.\(.\)\.\(.\)/\$(1)/'') +ifeq ($(call gcc-ver,1),1) +$(error gcc-1.x.x unsupported - upgrade to at least gcc-3.2.x) +endif +ifeq ($(call gcc-ver,1),2) +$(error gcc-2.x.x unsupported - upgrade to at least gcc-3.2.x) +endif +ifeq ($(call gcc-ver,1),3) +ifeq ($(call gcc-ver,2),0) +$(error gcc-3.0.x unsupported - upgrade to at least gcc-3.2.x) +endif +ifeq ($(call gcc-ver,2),1) +$(error gcc-3.1.x unsupported - upgrade to at least gcc-3.2.x) +endif +endif + CFLAGS += -nostdinc -fno-builtin -fno-common -fno-strict-aliasing CFLAGS += -iwithprefix include -Werror -Wno-pointer-arith -pipe CFLAGS += -I$(BASEDIR)/include @@ -41,6 +58,9 @@ endif ifeq ($(TARGET_SUBARCH),x86_64) CFLAGS += -mno-red-zone -fpic -fno-reorder-blocks +ifneq ($(call gcc-ver,1),3) +CFLAGS += -fvisibility=hidden +endif CFLAGS += -fno-asynchronous-unwind-tables LDFLAGS += -m elf_x86_64 x86_32 := n @@ -50,20 +70,3 @@ endif HDRS += $(wildcard $(BASEDIR)/include/asm-x86/hvm/*.h) HDRS += $(wildcard $(BASEDIR)/include/asm-x86/hvm/svm/*.h) HDRS += $(wildcard $(BASEDIR)/include/asm-x86/hvm/vmx/*.h) - -# Test for at least GCC v3.2.x. -gcc-ver = $(shell $(CC) -dumpversion | sed -e ''s/^\(.\)\.\(.\)\.\(.\)/\$(1)/'') -ifeq ($(call gcc-ver,1),1) -$(error gcc-1.x.x unsupported - upgrade to at least gcc-3.2.x) -endif -ifeq ($(call gcc-ver,1),2) -$(error gcc-2.x.x unsupported - upgrade to at least gcc-3.2.x) -endif -ifeq ($(call gcc-ver,1),3) -ifeq ($(call gcc-ver,2),0) -$(error gcc-3.0.x unsupported - upgrade to at least gcc-3.2.x) -endif -ifeq ($(call gcc-ver,2),1) -$(error gcc-3.1.x unsupported - upgrade to at least gcc-3.2.x) -endif -endif _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Keir Fraser
2006-Sep-13 12:46 UTC
Re: [Xen-devel] [PATCH] x86-64: suppress some unneeded side effects of -fPIC
On 12/9/06 16:43, "Jan Beulich" <jbeulich@novell.com> wrote:> Full PIC mode isn''t needed for Xen, namely is there no need to access data > objects via the GOT or call functions through the PLT. Adding > -fvisibility=hidden (if the compiler supports it) helps, although it doesn''t > do > as good a job as would be desired (I''m in talks with our compiler guys to > understand why). > > Signed-off-by: Jan Beulich <jbeulich@novell.com>What overheads does this remove? Does it actually shorten code sequences? It seems that some gcc v3 compilers have -fvisibility=hidden too (e.g. My gcc-3.4.4 does). I thus checked in a patch that checks for availability of this feature in a ''test-gcc-flag'' style of way (as defined in Config.mk), rather than doing a gcc version test. -- Keir _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Jan Beulich
2006-Sep-13 13:02 UTC
Re: [Xen-devel] [PATCH] x86-64: suppress some unneeded side effects of -fPIC
>>> Keir Fraser <Keir.Fraser@cl.cam.ac.uk> 13.09.06 14:46 >>> >On 12/9/06 16:43, "Jan Beulich" <jbeulich@novell.com> wrote: > >> Full PIC mode isn''t needed for Xen, namely is there no need to access data >> objects via the GOT or call functions through the PLT. Adding >> -fvisibility=hidden (if the compiler supports it) helps, although it doesn''t >> do >> as good a job as would be desired (I''m in talks with our compiler guys to >> understand why). >> >> Signed-off-by: Jan Beulich <jbeulich@novell.com> > >What overheads does this remove? Does it actually shorten code sequences?It allows global data objects to be accessed without going through the GOT.>It seems that some gcc v3 compilers have -fvisibility=hidden too (e.g. My >gcc-3.4.4 does). I thus checked in a patch that checks for availability of >this feature in a ''test-gcc-flag'' style of way (as defined in Config.mk), >rather than doing a gcc version test.Hmm, bad luck, this time I had hoped it''ll take you a little longer to commit it, as we''ve found a better solution: Using #pragma GCC visibility, *all* data references benefit, not just the ones to objects defined in the same translation unit. However, as this now is a header file change, detection logic cannot be used as nicely, so I guess we want to keep the previous change and add this one on top. Signed-off-by: Jan Beulich <jbeulich@novell.com> Index: 2006-09-11/xen/include/xen/compiler.h ==================================================================--- 2006-09-11.orig/xen/include/xen/compiler.h 2006-05-02 16:41:35.000000000 +0200 +++ 2006-09-11/xen/include/xen/compiler.h 2006-09-13 13:23:25.000000000 +0200 @@ -35,6 +35,10 @@ #define offsetof(a,b) ((unsigned long)&(((a *)0)->b)) #endif +#if defined(__x86_64__) && (__GNUC__ > 3) +#pragma GCC visibility push(hidden) +#endif + /* This macro obfuscates arithmetic on a variable address so that gcc shouldn''t recognize the original var, and make assumptions about it */ /* _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Keir Fraser
2006-Sep-13 13:12 UTC
Re: [Xen-devel] [PATCH] x86-64: suppress some unneeded side effects of -fPIC
On 13/9/06 14:02, "Jan Beulich" <jbeulich@novell.com> wrote:> Hmm, bad luck, this time I had hoped it''ll take you a little longer to commit > it, as we''ve found a better solution: Using #pragma GCC visibility, *all* > data references benefit, not just the ones to objects defined in the same > translation unit. However, as this now is a header file change, detection > logic cannot be used as nicely, so I guess we want to keep the previous > change and add this one on top. > > Signed-off-by: Jan Beulich <jbeulich@novell.com>It does stack okay on top of command-line option? I''m assuming so, and I''ll check in this new patch in addition to the one I already committed. -- Keir _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Keir Fraser
2006-Sep-13 13:15 UTC
Re: [Xen-devel] [PATCH] x86-64: suppress some unneeded side effects of -fPIC
On 13/9/06 14:12, "Keir Fraser" <Keir.Fraser@cl.cam.ac.uk> wrote:>> Hmm, bad luck, this time I had hoped it''ll take you a little longer to commit >> it, as we''ve found a better solution: Using #pragma GCC visibility, *all* >> data references benefit, not just the ones to objects defined in the same >> translation unit. However, as this now is a header file change, detection >> logic cannot be used as nicely, so I guess we want to keep the previous >> change and add this one on top. >> >> Signed-off-by: Jan Beulich <jbeulich@novell.com> > > It does stack okay on top of command-line option? I''m assuming so, and I''ll > check in this new patch in addition to the one I already committed.Actually, another question first: if gcc does not understand the pragma will it silently ignore it? Then we could get rid of check for GNUC>3, and we could get rid of -fvisibility=hidden too. -- Keir _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Keir Fraser
2006-Sep-13 13:20 UTC
Re: [Xen-devel] [PATCH] x86-64: suppress some unneeded side effects of -fPIC
On 13/9/06 14:15, "Keir Fraser" <Keir.Fraser@cl.cam.ac.uk> wrote:>> It does stack okay on top of command-line option? I''m assuming so, and I''ll >> check in this new patch in addition to the one I already committed. > > Actually, another question first: if gcc does not understand the pragma will > it silently ignore it? Then we could get rid of check for GNUC>3, and we > could get rid of -fvisibility=hidden too.Answered my own question. We need the check. So I''ll apply the patch as is. -- Keir _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Jan Beulich
2006-Sep-13 14:07 UTC
Re: [Xen-devel] [PATCH] x86-64: suppress some unneeded side effects of -fPIC
>>> Keir Fraser <Keir.Fraser@cl.cam.ac.uk> 13.09.06 15:15 >>> >On 13/9/06 14:12, "Keir Fraser" <Keir.Fraser@cl.cam.ac.uk> wrote: >>> Hmm, bad luck, this time I had hoped it''ll take you a little longer to commit >>> it, as we''ve found a better solution: Using #pragma GCC visibility, *all* >>> data references benefit, not just the ones to objects defined in the same >>> translation unit. However, as this now is a header file change, detection >>> logic cannot be used as nicely, so I guess we want to keep the previous >>> change and add this one on top. >>> >>> Signed-off-by: Jan Beulich <jbeulich@novell.com> >> >> It does stack okay on top of command-line option? I''m assuming so, and I''ll >> check in this new patch in addition to the one I already committed.Yes, it should.>Actually, another question first: if gcc does not understand the pragma will >it silently ignore it? Then we could get rid of check for GNUC>3, and we >could get rid of -fvisibility=hidden too.You''d get a warning, which is being turned into an error by the build scripts. Jan _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel