
#11340: linker_unload test fails on ARM -------------------------------------+------------------------------ Reporter: bgamari | Owner: Type: bug | Status: new Priority: normal | Milestone: 8.0.1 Component: Compiler | Version: 7.10.3 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: arm Type of failure: Runtime crash | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------ Comment (by bgamari): The crash is quite reproducible. It generally looks like this, {{{ $ gdb --args linker_unload /mnt/ext/exp/ghc/inplace/lib +RTS GNU gdb (Debian 7.7.1+dfsg-5) 7.7.1 ... Reading symbols from linker_unload...done. (gdb) run /mnt/ext/exp/ghc/inplace/lib +RTS -Dl 2> h Starting program: /mnt/ext/exp/ghc/testsuite/tests/rts/linker_unload /mnt/ext/exp/ghc/inplace/lib +RTS -Dl 2> h [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/arm-linux- gnueabihf/libthread_db.so.1". 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 Program received signal SIGSEGV, Segmentation fault. 0xb8f6cf70 in ?? () (gdb) info reg r0 0xb6ff7278 3070194296 r1 0x4507d40 72383808 r2 0xbefff578 3204445560 r3 0xb6ff7214 3070194196 r4 0xbefff3c0 3204445120 r5 0xbefff3c4 3204445124 r6 0xd8 216 r7 0x0 0 r8 0x0 0 r9 0x0 0 r10 0xb6fff000 3070226432 r11 0xbefff31c 3204444956 r12 0x45003f4 72352756 sp 0xbefff318 0xbefff318 lr 0xb6ff7228 -1224773080 pc 0xb8f6cf70 0xb8f6cf70 cpsr 0x800f0010 -2146500592 (gdb) bt #0 0xb8f6cf70 in ?? () #1 0xb6ff7228 in ?? () Backtrace stopped: previous frame identical to this frame (corrupt stack?) (gdb) x/i $lr 0xb6ff7228: pop {r11, pc} (gdb) x/32i $lr-64 0xb6ff71e8: ldr r3, [r11, #-24] 0xb6ff71ec: mov r0, r3 0xb6ff71f0: bl 0xb8f6cf50 0xb6ff71f4: str r0, [r11, #-16] 0xb6ff71f8: ldr r3, [r11, #-20] 0xb6ff71fc: mov r0, r3 0xb6ff7200: bl 0xb8f6cf60 0xb6ff7204: ldr r3, [r11, #-16] 0xb6ff7208: mov r0, r3 0xb6ff720c: sub sp, r11, #12 0xb6ff7210: pop {r4, r5, r11, pc} 0xb6ff7214: push {r11, lr} 0xb6ff7218: add r11, sp, #4 0xb6ff721c: movw r0, #29304 ; 0x7278 0xb6ff7220: movt r0, #46847 ; 0xb6ff 0xb6ff7224: bl 0xb8f6cf70 0xb6ff7228: pop {r11, pc} 0xb6ff722c: andeq r0, r0, r0 0xb6ff7230: ; <UNDEFINED> instruction: 0xb6fee838 ... }}} Looks like reasonable code to me. Unfortunately it appears that the code at `*$pc` is total garbage. Moreover, looking at the linker output it seems that no code was ever mapped at this address. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11340#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler