cvs commit: fptools/ghc/compiler/cmm CLabel.hs Cmm.hs CmmParse.y
PprC.hs PprCmm.hs fptools/ghc/compiler/codeGen CgInfoTbls.hs
fptools/ghc/compiler/main CmdLineOpts.lhs DriverFlags.hs
fptools/ghc/compiler/nativeGen PositionIndependentCode.hs AsmCodeGen.lhs ...
Wolfgang Thaller
wolfgang at haskell.org
Thu Oct 7 11:54:45 EDT 2004
wolfgang 2004/10/07 08:54:45 PDT
Modified files:
ghc/compiler/cmm CLabel.hs Cmm.hs CmmParse.y PprC.hs
PprCmm.hs
ghc/compiler/codeGen CgInfoTbls.hs
ghc/compiler/main CmdLineOpts.lhs DriverFlags.hs
ghc/compiler/nativeGen AsmCodeGen.lhs MachCodeGen.hs
MachInstrs.hs MachRegs.lhs NCGMonad.hs
PprMach.hs RegAllocInfo.hs
ghc/driver/mangler ghc-asm.lprl
ghc/includes Cmm.h InfoTables.h Storage.h
mkDerivedConstants.c
ghc/rts GC.c GCCompact.c HeapStackCheck.cmm
Linker.c Printer.c RetainerProfile.c
Sanity.c
Added files:
ghc/compiler/nativeGen PositionIndependentCode.hs
Log:
Position Independent Code and Dynamic Linking Support, Part 1
This commit allows generation of position independent code (PIC) that fully supports dynamic linking on Mac OS X and PowerPC Linux.
Other platforms are not yet supported, and there is no support for actually linking or using dynamic libraries - so if you use the -fPIC or -dynamic code generation flags, you have to type your (platform-specific) linker command lines yourself.
nativeGen/PositionIndependentCode.hs:
New file. Look here for some more comments on how this works.
cmm/CLabel.hs:
Add support for DynamicLinkerLabels and PIC base labels - for use inside the NCG.
needsCDecl: Case alternative labels now need C decls, see the codeGen/CgInfoTbls.hs below for details
cmm/Cmm.hs:
Add CmmPicBaseReg (used in NCG),
and CmmLabelDiffOff (used in NCG and for offsets in info tables)
cmm/CmmParse.y:
support offsets in info tables
cmm/PprC.hs:
support CmmLabelDiffOff
Case alternative labels now need C decls (see the codeGen/CgInfoTbls.hs for details), so we need to pprDataExterns for info tables.
cmm/PprCmm.hs:
support CmmLabelDiffOff
codeGen/CgInfoTbls.hs:
no longer store absolute addresses in info tables, instead, we store offsets.
Also, for vectored return points, emit the alternatives _after_ the vector table. This is to work around a limitation in Apple's as, which refuses to handle label differences where one label is at the end of a section. Emitting alternatives after vector info tables makes sure this never happens in GHC generated code. Case alternatives now require prototypes in hc code, though (see changes in PprC.hs, CLabel.hs).
main/CmdLineOpts.lhs:
Add a new option, -fPIC.
main/DriverFlags.hs:
Pass the correct options for PIC to gcc, depending on the platform. Only for powerpc for now.
nativeGen/AsmCodeGen.hs:
Many changes...
Mac OS X-specific management of import stubs is no longer, it's now part of a general mechanism to handle such things for all platforms that need it (Darwin [both ppc and x86], Linux on ppc, and some platforms we don't support).
Move cmmToCmm into its own monad which can accumulate a list of imported symbols. Make it call cmmMakeDynamicReference at the right places.
nativeGen/MachCodeGen.hs:
nativeGen/MachInstrs.hs:
nativeGen/MachRegs.lhs:
nativeGen/PprMach.hs:
nativeGen/RegAllocInfo.hs:
Too many changes to enumerate here, PowerPC specific.
nativeGen/NCGMonad.hs:
NatM still tracks imported symbols, as more labels can be created during code generation (float literals, jump tables; on some platforms all data access has to go through the dynamic linking mechanism).
driver/mangler/ghc-asm.lprl:
Mangle absolute addresses in info tables to offsets.
Correctly pass through GCC-generated PIC for Mac OS X and powerpc linux.
includes/Cmm.h:
includes/InfoTables.h:
includes/Storage.h:
includes/mkDerivedConstants.c:
rts/GC.c:
rts/GCCompact.c:
rts/HeapStackCheck.cmm:
rts/Printer.c:
rts/RetainerProfile.c:
rts/Sanity.c:
Adapt to the fact that info tables now contain offsets.
rts/Linker.c:
Mac-specific: change machoInitSymbolsWithoutUnderscore to support PIC.
Revision Changes Path
1.6 +85 -19 fptools/ghc/compiler/cmm/CLabel.hs
1.3 +12 -0 fptools/ghc/compiler/cmm/Cmm.hs
1.4 +7 -4 fptools/ghc/compiler/cmm/CmmParse.y
1.8 +13 -1 fptools/ghc/compiler/cmm/PprC.hs
1.4 +2 -0 fptools/ghc/compiler/cmm/PprCmm.hs
1.5 +59 -19 fptools/ghc/compiler/codeGen/CgInfoTbls.hs
1.190 +6 -2 fptools/ghc/compiler/main/CmdLineOpts.lhs
1.138 +13 -4 fptools/ghc/compiler/main/DriverFlags.hs
1.63 +120 -69 fptools/ghc/compiler/nativeGen/AsmCodeGen.lhs
1.3 +148 -109 fptools/ghc/compiler/nativeGen/MachCodeGen.hs
1.3 +4 -0 fptools/ghc/compiler/nativeGen/MachInstrs.hs
1.52 +6 -4 fptools/ghc/compiler/nativeGen/MachRegs.lhs
1.3 +22 -9 fptools/ghc/compiler/nativeGen/NCGMonad.hs
1.3 +25 -51 fptools/ghc/compiler/nativeGen/PprMach.hs
1.3 +4 -0 fptools/ghc/compiler/nativeGen/RegAllocInfo.hs
1.116 +58 -7 fptools/ghc/driver/mangler/ghc-asm.lprl
1.3 +7 -1 fptools/ghc/includes/Cmm.h
1.34 +48 -4 fptools/ghc/includes/InfoTables.h
1.4 +1 -1 fptools/ghc/includes/Storage.h
1.8 +1 -1 fptools/ghc/includes/mkDerivedConstants.c
1.172 +9 -9 fptools/ghc/rts/GC.c
1.22 +5 -5 fptools/ghc/rts/GCCompact.c
1.5 +6 -0 fptools/ghc/rts/HeapStackCheck.cmm
1.162 +14 -4 fptools/ghc/rts/Linker.c
1.67 +2 -2 fptools/ghc/rts/Printer.c
1.14 +10 -10 fptools/ghc/rts/RetainerProfile.c
1.37 +4 -4 fptools/ghc/rts/Sanity.c
More information about the Cvs-ghc
mailing list