
For example, if {{{ @T8947_t1_info_itable = constant %T8947_t1_entry_struct<{i64 add (i64 sub (i64 ptrtoint (i8* @S1fL_srt$alias to i64),i64 ptrtoint (void (i64*, i64*, i64*, i64, i64, i64, i64, i64, i64, i64)* @T8947_t1_info to i64)),i64 0), i64 4294967299, i64 0, i64 64424509455}>, section "X98A__STRIP,__me3", align 8 }}} gets rewritten to {{{ @T8947_t1_info_itable = constant %T8947_t1_entry_struct<{i32 add (i32 sub (i32 ptrtoint (i8* @S1i6_srt$alias to i32),i32 ptrtoint (void (i64*, i64*, i64*, i64, i64, i64, i64, i64, i64, i64)* @T8947_t1_info to i32)),i32 0), i32 0, i64 4294967299, i64 0, i64 64424509455}>, section "X98A__STRIP,__me3", align 8 }}}
LLVM instead of {{{ T8947_t1_info_itable: .quad S1i6_srt-T8947_t1_info }}} generates (assembler spits {{{Error: invalid operands (.rdata and *ABS*
#8974: 64 bit windows executable built with ghc-7.9.20140405+LLVM segfaults -------------------------------------+------------------------------------- Reporter: awson | Owner: Type: bug | Status: infoneeded Priority: high | Milestone: 7.8.4 Component: Compiler | Version: 7.9 (LLVM) | Keywords: Resolution: | Architecture: x86_64 (amd64) Operating System: Windows | Difficulty: Unknown Type of failure: Runtime | Blocked By: crash | Related Tickets: Test Case: | Blocking: | Differential Revisions: | -------------------------------------+------------------------------------- Comment (by Fanael): Replying to [comment:12 awson]: sections) for `&'}}})
{{{ T8947_t1_info_itable: .long (S1i6_srt&-1)-(T8947_t1_info&-1) .long 0 # 0x0 }}} while we want it to be {{{ T8947_t1_info_itable: .long S1i6_srt-T8947_t1_info .long 0 # 0x0 }}}
I'm in no way an LLVM expert and know very little about it. Is there a way to make LLVM generate the code we want or are we use the mangler here? Any thoughts?
Yes, there is. Use `trunc`, for example: {{{ %foo = type <{i32, i32}> @aaa = global i32 5 @bbb = global i32 5 @foo = constant %foo<{i32 trunc(i64 sub(i64 ptrtoint (i32* @aaa to i64), i64 ptrtoint (i32* @bbb to i64)) to i32), i32 0}> }}} LLVM will generate {{{ foo: .long aaa-bbb .long 0 # 0x0 }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/8974#comment:21 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler