
#11299: T5435_gcc_v fails on ARM -------------------------------------+------------------------------- Reporter: bgamari | Owner: bgamari Type: bug | Status: new Priority: normal | Milestone: 8.0.1 Component: Runtime System | 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): I believe the issue here may be incomplete instruction cache flushing. With this patch, {{{#!patch diff --git a/rts/Linker.c b/rts/Linker.c index aadd8d4..1101dea 100644 --- a/rts/Linker.c +++ b/rts/Linker.c @@ -2748,8 +2748,10 @@ static void ocFlushInstructionCache( ObjectCode *oc ) { // Object code + printf("Flushed %p - %p\n", oc->image, oc->image + oc->fileSize); __clear_cache(oc->image, oc->image + oc->fileSize); // Jump islands + printf("Flushed %p - %p\n", oc->symbol_extras, &oc->symbol_extras[oc->n_symbol_extras]); __clear_cache(oc->symbol_extras, &oc->symbol_extras[oc->n_symbol_extras]); } @@ -5706,6 +5708,7 @@ static int ocRunInit_ELF( ObjectCode *oc ) init_start = (init_t*)init_startC; init_end = (init_t*)(init_startC + shdr[i].sh_size); for (init = init_start; init < init_end; init++) { + printf("init %p\n", init); (*init)(argc, argv, envv); } } }}} I see the following output on failure, {{{ Flushed 0xb6ff7000 - 0xb6ff753c Flushed 0xb6ff6008 - 0xb6ff6138 init 0xb6ff6190 Program received signal SIGILL, Illegal instruction. 0xb6ff7000 in ?? () }}} Indeed it looks like the location with the initializer (0xb6ff6190) was never flushed. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11299#comment:4 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler