darcs patch: PprMach.hs more accurate hack for x86-64, CmmLabelOff ...

Clemens Fruhwirth clemens at endorphin.org
Wed Jun 27 07:01:52 EDT 2007


Tue Jun 26 15:46:36 CEST 2007  Clemens Fruhwirth <clemens at endorphin.org>
  * PprMach.hs more accurate hack for x86-64, CmmLabelOff is not a relative reference.
  
  CmmLabelDiffOff are generated in .text and if printed as .quad, causes
  the assembler to emit a PC64 relocation. binutils prior to 2.17 don't
  understand PC64 relocation properly.
  
  pprDataItem is also used for printing SRT description tables. They are
  part of the .data section and there no PC relative relocations are
  emited. Hence, if we print a .long here, we get a absolute 32-bit
  relocation. 32-bit relocations are problematic in dynamic libraries,
  because dynamic library load addresses are loaded beyond the 32 bit
  boundary, causing the dynamic linker to warn at dynamic linking
  (loading the executable) that there are overflows in the
  relocation. The executable still seems to work because of the small
  memory model, but this is obviously wrong. Hence, remove CmmLabelOff
  from the classification, causing these references to be printed as
  .quad, causing correct 64-bit relocation as in the rest of the .data
  section.  
  
  So, this hack now prints PC32 relocations in .text (mostly in the info
  tables), and absolute 64-bit relocations in .data.
  
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: text/x-darcs-patch
Size: 23003 bytes
Desc: A darcs patch for your repository!
Url : http://www.haskell.org/pipermail/cvs-ghc/attachments/20070627/c967bd2a/attachment-0001.bin


More information about the Cvs-ghc mailing list