home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #30 / NN_1992_30.iso / spool / comp / sys / hp / 14127 < prev    next >
Encoding:
Text File  |  1992-12-16  |  3.6 KB  |  87 lines

  1. Newsgroups: comp.sys.hp
  2. Path: sparky!uunet!news.mentorg.com!dracula!gcagle
  3. From: gcagle@dracula.mentorg.com (Greg Cagle)
  4. Subject: Re: ld(1) question
  5. Message-ID: <1992Dec16.151332.21972@news.mentorg.com>
  6. Sender: gcagle@dracula (Greg Cagle)
  7. Date: Wed, 16 Dec 1992 15:13:32 GMT
  8. Distribution: usa
  9. Reply-To: greg_cagle@mentorg.com
  10. References:  <BzBIDq.2ry@ra.nrl.navy.mil>
  11. Nntp-Posting-Host: dracula.mentorg.com
  12. Organization: Mentor Graphics
  13. Keywords: 
  14. Followup-To: gcagle@dracula.mentorg.com
  15. Lines: 70
  16.  
  17. In article <BzBIDq.2ry@ra.nrl.navy.mil>, atkinson@itd.nrl.navy.mil (Randall Atkinson) writes:
  18. >  In trying to get GNU groff 1.06 compiled for my HP, using GCC both
  19. >as a C and C++ compiler and with standard HP libraries rather than
  20. >libg++, I run into the following error message:
  21. >
  22. >ld: R_DATA_ONE_SYMBOL fixup in file env.o for code unsat symbol
  23. >"abort" - use P' fixup
  24. >
  25.  
  26. From the FAQ:
  27.  
  28. 1)  What's a P-FIXUP error?
  29.  
  30.    Several questions on comp.sys.hp lately have involved the Gnu C compiler
  31. and the linker message below :
  32.  
  33.         gcc  test_h.o -o test_h ../libg++.a -lm
  34. ld: R_DATA_ONE_SYMBOL fixup in file ../libg++.a(streambuf.o) for code unsat
  35. symbol "abort" - use P' fixup
  36. collect: /bin/ld returned 1 exit status
  37.  
  38.    This is caused by the code generator emitting assembly code in a data
  39. subspace to initialize a function pointer, equivalent to :
  40.  
  41.     .word    foo
  42.  
  43. where (in this case) foo() is an extern, and shared libraries are referenced
  44. by the executable being built (usually libc.sl).  
  45.  
  46.    The linker is being helpful by pointing out a fatal error waiting
  47. to happen, as function pointers are different in the presence of shared
  48. libraries.  A different fixup is needed to generate the kind of procedure
  49. label that can be called.  This is explained under "Procedure Labels" in
  50. Chapter 7 of "Programming on HP-UX" (Part # B2355-90026 E0892) and at the
  51. end of "Expressions" in Chapter 1 of the Assembly Language Reference Manual
  52. (Part # 92432-90001 E0191).
  53.  
  54.    There are two ways to fix this :
  55.     1) Change the code generation to the equivalent of :
  56.         .word P%foo
  57.     or
  58.     2) Link the program using the "-a archive" linker option.  The
  59.     easiest way to do this is via the LDOPTS environment variable :
  60.         setenv LDOPTS "-a archive"
  61.          - or -
  62.         LDOPTS="-a archive"; export LDOPTS
  63.  
  64.    The first fixes the problem directly, generating an R_DATA_PLABEL fixup
  65. which is unambiguous whether shared libraries are present or not.  The
  66. second puts you back in time to the situation before shared libraries were
  67. added to HP-UX.  Without shared libraries HP-UX drew no distinction between
  68. code addresses and procedure labels - an ambiguity that the P% fixup syntax
  69. resolves.
  70.  
  71.    The reason the linker can't just fix this situation is that there are
  72. cases where code addresses are implicitly or explicitly desired, cases that
  73. are part of the motivation for having an assembler to begin with.
  74. Unfortunately, in this case a message designed to be helpful to an errant
  75. assembly programmer is instead a symptom of an out-of-date code generator,
  76. and is too low-level to help the people seeing it.  The other alternative
  77. (letting the program segmentation violate at runtime with no warning) would
  78. be more likely to result in the user blaming the Gnu code generator instead
  79. of HP's linker, but otherwise very little more satisfying.
  80.  
  81. -- 
  82. ---------------------------------------------------------------------------
  83. Greg Cagle                                      Mentor Graphics Corporation
  84. greg_cagle@mentorg.com                         Platform Technology Division
  85. (503)685-1570                                  Member of the Cultural Elite
  86. ---------------------------------------------------------------------------
  87.