Joakim Tjernlund/Transmode wrote on 2010/10/12 11:00:36: > > Alan Modra <amo...@gmail.com> wrote on 2010/10/11 14:58:45: > > > > On Sun, Oct 10, 2010 at 11:20:06AM +0200, Joakim Tjernlund wrote: > > > Now I have had a closer look at this and it looks much like -fpic > > > on ppc32, you still use the GOT/TOC to load the address where the data is. > > > > No, with ppc64 -mcmodel=medium you use the GOT/TOC pointer plus an > > offset to address local data. > > > > > I was looking for true %pc relative addressing of data. I guess this is really > > > hard on PowerPC? > > > > Yes, PowerPC lacks pc-relative instructions. > > > > > I am not sure this is all it takes to make -fpic to work with -mrelocatable, > > > any ideas? > > > > You might be lucky. With -mrelocatable, .got2 only contains > > addresses. No other constants. So a simple run-time loader can > > relocate the entire .got2 section, plus those locations specified in > > .fixup. You'll have to make sure gcc does the same for .got, and your > > run-time loader will need to be modified to handle .got (watch out for > > the .got header!).
> Got it working now. It was just u-boot reloc routine I first failed > to extend properly to reloc *got too. > > I think this is safe as one can mix fpic with fPIC and > mrelocatable is the same as fPIC+fixups. > > Will you accept this patch into gcc? Ping? >From d8ff0b3f0b44480542eab04d1659f4368b6b09cf Mon Sep 17 00:00:00 2001 From: Joakim Tjernlund <joakim.tjernl...@transmode.se> Date: Sun, 10 Oct 2010 10:34:50 +0200 Subject: [PATCH] powerpc: Support -fpic too with mrelocatable Signed-off-by: Joakim Tjernlund <joakim.tjernl...@transmode.se> --- sysv4.h | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h index 8da8410..e4b8280 100644 --- a/gcc/config/rs6000/sysv4.h +++ b/gcc/config/rs6000/sysv4.h @@ -227,7 +227,8 @@ do { \ } \ \ else if (TARGET_RELOCATABLE) \ - flag_pic = 2; \ + if (!flag_pic) \ + flag_pic = 2; \ } while (0) #ifndef RS6000_BI_ARCH -- 1.7.2.2