[GHC] #15723: -prof -fPIC -fexternal-dynamic-refs generates non-PIC relocations for external symbol

GHC ghc-devs at haskell.org
Mon Oct 15 22:34:37 UTC 2018


#15723: -prof -fPIC -fexternal-dynamic-refs generates non-PIC relocations for
external symbol
-------------------------------------+-------------------------------------
        Reporter:  watashi           |                Owner:  watashi
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  8.6.1
  (CodeGen)                          |
      Resolution:                    |             Keywords:
Operating System:  Linux             |         Architecture:  x86_64
                                     |  (amd64)
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):  Phab:D5214
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by Ben Gamari <ben@…>):

 In [changeset:"95ec7c88c7223508db3ba91d6ab9e303d0b062ad/ghc"
 95ec7c88/ghc]:
 {{{
 #!CommitTicketReference repository="ghc"
 revision="95ec7c88c7223508db3ba91d6ab9e303d0b062ad"
 Generate correct relocation for external cost centre

 We used to always generate direct access for cost centre labels.  We
 fixed this by generating indirect data load for cost centre defined in
 external module.

 Test Plan:
 The added test used to fail with error message
 ```
 /bin/ld.gold: error: T15723B.o: requires dynamic R_X86_64_PC32 reloc
 against 'T15723A_foo1_EXPR_cc' which may overflow at runtime; recompile
 with -fPIC
 ```
 and now passes.

 Also check that `R_X86_64_PC32` is generated for CostCentre from the
 same module and `R_X86_64_GOTPCREL` is generated for CostCentre from
 external module:
 ```
 $ objdump -rdS T15723B.o
 0000000000000028 <T15723B_test_info>:
   28:   48 8d 45 f0             lea    -0x10(%rbp),%rax
   2c:   4c 39 f8                cmp    %r15,%rax
   2f:   72 70                   jb     a1 <T15723B_test_info+0x79>
   31:   48 83 ec 08             sub    $0x8,%rsp
   35:   48 8d 35 00 00 00 00    lea    0x0(%rip),%rsi        # 3c
 <T15723B_test_info+0x14>
                         38: R_X86_64_PC32
 T15723B_test1_EXPR_cc-0x4
   3c:   49 8b bd 60 03 00 00    mov    0x360(%r13),%rdi
   43:   31 c0                   xor    %eax,%eax
   45:   e8 00 00 00 00          callq  4a <T15723B_test_info+0x22>
                         46: R_X86_64_PLT32      pushCostCentre-0x4
   4a:   48 83 c4 08             add    $0x8,%rsp
   4e:   48 ff 40 30             incq   0x30(%rax)
   52:   49 89 85 60 03 00 00    mov    %rax,0x360(%r13)
   59:   48 83 ec 08             sub    $0x8,%rsp
   5d:   49 8b bd 60 03 00 00    mov    0x360(%r13),%rdi
   64:   48 8b 35 00 00 00 00    mov    0x0(%rip),%rsi        # 6b
 <T15723B_test_info+0x43>
                         67: R_X86_64_GOTPCREL   T15723A_foo1_EXPR_cc-0x4
   6b:   31 c0                   xor    %eax,%eax
   6d:   e8 00 00 00 00          callq  72 <T15723B_test_info+0x4a>
                         6e: R_X86_64_PLT32      pushCostCentre-0x4
   72:   48 83 c4 08             add    $0x8,%rsp
   76:   48 ff 40 30             incq   0x30(%rax)
 ```

 Reviewers: simonmar, bgamari

 Reviewed By: simonmar

 Subscribers: rwbarton, carter

 GHC Trac Issues: #15723

 Differential Revision: https://phabricator.haskell.org/D5214
 }}}

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15723#comment:4>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list