Thanks for the report. And thanks for the CC, Eric. > > stopped in is_mapped at line 621 in file "" > > is_mapped(addr = 9), line 621 in "stackvma.c" > > is_unmapped(addr1 = 4, addr2 = 15), line 768 in "stackvma.c" > > mincore_is_near_this(addr = 10, vma = 0x0000000111001fb8), line 793 in > > "stackvma.c" > > unnamed block in sigsegv.sigsegv_handler(sig = 11, sip = > > 0x0000000111002310, ucp = 0x0000000111002060), line 973 in "sigsegv.c" > > unnamed block in sigsegv.sigsegv_handler(sig = 11, sip = > > 0x0000000111002310, ucp = 0x0000000111002060), line 973 in "sigsegv.c" > > sigsegv.sigsegv_handler(sig = 11, sip = 0x0000000111002310, ucp = > > 0x0000000111002060), line 973 in "sigsegv.c" > > main(), line 183 in "test-sigsegv-catch-stackoverflow2.c" > > > > code snippet > > location:/home/buildusr/rpmbuild/BUILD/m4-1.4.19/64bit/lib/stackvma.c > > seems like its stuck here in for loop > > > > 754 for (;;) > > 755 { > > 756 uintptr_t addr_stepsize; > > 757 uintptr_t i; > > 758 uintptr_t addr; > > 759 > > 760 stepsize = stepsize / 2; > > 761 if (stepsize == 0) > > 762 break; > > 763 addr_stepsize = stepsize * pagesize; > > 764 for (i = stepsize, addr = addr1 + addr_stepsize; > > 765 i < count; > > 766 i += 2 * stepsize, addr += 2 * addr_stepsize) > > 767 /* Here addr = addr1 + i * pagesize. */ > > 768 if (is_mapped (addr)) > > 769 return 0; > > 770 }
The comments, a few lines above, explain that this loop can be slow. In 64-bit mode, it can even be *very* slow. But fortunately AIX 7 comes with a better primitive for enumerating the VMAs, through the /proc file system. I have now added code in stackvma.c to try this faster method first, before falling back on the slower mincore- based approach: https://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=commitdiff;h=19435dc207e9279d744435ce72466f765c5358e2 In a week, there should be a new m4 snapshot available, that includes this change. You can get it from https://gitlab.com/gnu-m4/ci-distcheck . I expect that it will fix the test hang that you have seen. Bruno