OF: fdt: Ignoring memory range 0x80000000 - 0x80200000 Linux version 4.15.0-rc9-02665-gf923ce3a29af (rjones@trick.home.annexia.org) (gcc version 7.3.1 20180129 (GCC)) #21 SMP Thu Feb 1 08:49:48 GMT 2018 bootconsole [early0] enabled Initial ramdisk at: 0x (ptrval) (512 bytes) Zone ranges: DMA32 empty Normal [mem 0x0000000080200000-0x000000017fffffff] Movable zone start for each node Early memory node ranges node 0: [mem 0x0000000080200000-0x000000017fffffff] Initmem setup node 0 [mem 0x0000000080200000-0x000000017fffffff] elf_hwcap is 0x112d percpu: Embedded 15 pages/cpu @ (ptrval) s29592 r0 d31848 u61440 Built 1 zonelists, mobility grouping on. Total pages: 1033735 Kernel command line: console=ttyS0 ro root=/dev/vda init=/init Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes) Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes) Sorting __ex_table... Memory: 4120188K/4192256K available (5390K kernel code, 336K rwdata, 1472K rodata, 192K init, 848K bss, 72068K reserved, 0K cma-reserved) SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1 Hierarchical RCU implementation. RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=4. RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4 NR_IRQS: 0, nr_irqs: 0, preallocated irqs: 0 riscv,cpu_intc,0: 64 local interrupts mapped riscv,cpu_intc,1: 64 local interrupts mapped riscv,cpu_intc,2: 64 local interrupts mapped riscv,cpu_intc,3: 64 local interrupts mapped ------------[ cut here ]------------ WARNING: CPU: 1 PID: 0 at drivers/irqchip/irq-riscv-intc.c:159 riscv_irq_enable+0x92/0x94 CPU: 1 PID: 0 Comm: swapper/1 Not tainted 4.15.0-rc9-02665-gf923ce3a29af #21 Call Trace: [< (ptrval)>] walk_stackframe+0x0/0xa2 [< (ptrval)>] show_stack+0x26/0x34 [< (ptrval)>] dump_stack+0x5e/0x7c [< (ptrval)>] __warn+0xc6/0xdc [< (ptrval)>] warn_slowpath_null+0x2c/0x3e [< (ptrval)>] riscv_irq_enable+0x8e/0x94 [< (ptrval)>] irq_enable+0x3a/0x6a [< (ptrval)>] __irq_startup+0x80/0x88 [< (ptrval)>] irq_startup+0x4e/0xe2 [< (ptrval)>] irq_activate_and_startup+0x1c/0x28 [< (ptrval)>] __irq_do_set_handler+0x6e/0x134 [< (ptrval)>] irq_set_chained_handler_and_data+0x2c/0x4a [< (ptrval)>] plic_init+0x216/0x34a [< (ptrval)>] of_irq_init+0x132/0x232 [< (ptrval)>] irqchip_init+0x10/0x1c [< (ptrval)>] init_IRQ+0x8/0x14 [< (ptrval)>] start_kernel+0x1f6/0x32c [< (ptrval)>] _sinittext+0x4e/0x56 random: get_random_bytes called from print_oops_end_marker+0x3a/0x52 with crng_init=0 ---[ end trace 3f245499100bcdd5 ]--- riscv,plic0,c000000: mapped 10 interrupts to 4/8 handlers clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x24e6a1710, max_idle_ns: 440795202120 ns Console: colour dummy device 80x25 Calibrating delay loop (skipped), value calculated using timer frequency.. 20.00 BogoMIPS (lpj=40000) pid_max: default: 32768 minimum: 301 Mount-cache hash table entries: 8192 (order: 4, 65536 bytes) Mountpoint-cache hash table entries: 8192 (order: 4, 65536 bytes) Hierarchical SRCU implementation. smp: Bringing up secondary CPUs ... clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x24e6a1710, max_idle_ns: 440795202120 ns clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x24e6a1710, max_idle_ns: 440795202120 ns clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x24e6a1710, max_idle_ns: 440795202120 ns smp: Brought up 1 node, 4 CPUs devtmpfs: initialized clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns futex hash table entries: 1024 (order: 4, 65536 bytes) NET: Registered protocol family 16 vgaarb: loaded SCSI subsystem initialized usbcore: registered new interface driver usbfs usbcore: registered new interface driver hub usbcore: registered new device driver usb clocksource: Switched to clocksource riscv_clocksource NET: Registered protocol family 2 TCP established hash table entries: 32768 (order: 6, 262144 bytes) TCP bind hash table entries: 32768 (order: 7, 524288 bytes) TCP: Hash tables configured (established 32768 bind 32768) UDP hash table entries: 2048 (order: 4, 65536 bytes) UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes) NET: Registered protocol family 1 RPC: Registered named UNIX socket transport module. RPC: Registered udp transport module. RPC: Registered tcp transport module. RPC: Registered tcp NFSv4.1 backchannel transport module. Unpacking initramfs... Initialise system trusted keyrings workingset: timestamp_bits=62 max_order=20 bucket_order=0 NFS: Registering the id_resolver key type Key type id_resolver registered Key type id_legacy registered nfs4filelayout_init: NFSv4 File Layout Driver Registering... nfs4flexfilelayout_init: NFSv4 Flexfile Layout Driver Registering... random: fast init done NET: Registered protocol family 38 Key type asymmetric registered Asymmetric key parser 'x509' registered Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254) io scheduler noop registered io scheduler deadline registered io scheduler cfq registered (default) io scheduler mq-deadline registered io scheduler kyber registered Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled console [ttyS0] disabled 10000000.uart: ttyS0 at MMIO 0x10000000 (irq = 13, base_baud = 230400) is a 16550A OF: fdt: Ignoring memory range 0x80000000 - 0x80200000 Linux version 4.15.0-rc9-02665-gf923ce3a29af (rjones@trick.home.annexia.org) (gcc version 7.3.1 20180129 (GCC)) #21 SMP Thu Feb 1 08:49:48 GMT 2018 bootconsole [early0] enabled Initial ramdisk at: 0x (ptrval) (512 bytes) Zone ranges: DMA32 empty Normal [mem 0x0000000080200000-0x000000017fffffff] Movable zone start for each node Early memory node ranges node 0: [mem 0x0000000080200000-0x000000017fffffff] Initmem setup node 0 [mem 0x0000000080200000-0x000000017fffffff] elf_hwcap is 0x112d percpu: Embedded 15 pages/cpu @ (ptrval) s29592 r0 d31848 u61440 Built 1 zonelists, mobility grouping on. Total pages: 1033735 Kernel command line: console=ttyS0 ro root=/dev/vda init=/init Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes) Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes) Sorting __ex_table... Memory: 4120188K/4192256K available (5390K kernel code, 336K rwdata, 1472K rodata, 192K init, 848K bss, 72068K reserved, 0K cma-reserved) SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1 Hierarchical RCU implementation. RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=4. RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4 NR_IRQS: 0, nr_irqs: 0, preallocated irqs: 0 riscv,cpu_intc,0: 64 local interrupts mapped riscv,cpu_intc,1: 64 local interrupts mapped riscv,cpu_intc,2: 64 local interrupts mapped riscv,cpu_intc,3: 64 local interrupts mapped ------------[ cut here ]------------ WARNING: CPU: 1 PID: 0 at drivers/irqchip/irq-riscv-intc.c:159 riscv_irq_enable+0x92/0x94 CPU: 1 PID: 0 Comm: swapper/1 Not tainted 4.15.0-rc9-02665-gf923ce3a29af #21 Call Trace: [< (ptrval)>] walk_stackframe+0x0/0xa2 [< (ptrval)>] show_stack+0x26/0x34 [< (ptrval)>] dump_stack+0x5e/0x7c [< (ptrval)>] __warn+0xc6/0xdc [< (ptrval)>] warn_slowpath_null+0x2c/0x3e [< (ptrval)>] riscv_irq_enable+0x8e/0x94 [< (ptrval)>] irq_enable+0x3a/0x6a [< (ptrval)>] __irq_startup+0x80/0x88 [< (ptrval)>] irq_startup+0x4e/0xe2 [< (ptrval)>] irq_activate_and_startup+0x1c/0x28 [< (ptrval)>] __irq_do_set_handler+0x6e/0x134 [< (ptrval)>] irq_set_chained_handler_and_data+0x2c/0x4a [< (ptrval)>] plic_init+0x216/0x34a [< (ptrval)>] of_irq_init+0x132/0x232 [< (ptrval)>] irqchip_init+0x10/0x1c [< (ptrval)>] init_IRQ+0x8/0x14 [< (ptrval)>] start_kernel+0x1f6/0x32c [< (ptrval)>] _sinittext+0x4e/0x56 random: get_random_bytes called from print_oops_end_marker+0x3a/0x52 with crng_init=0 ---[ end trace 3f245499100bcdd5 ]--- riscv,plic0,c000000: mapped 10 interrupts to 4/8 handlers clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x24e6a1710, max_idle_ns: 440795202120 ns Console: colour dummy device 80x25 Calibrating delay loop (skipped), value calculated using timer frequency.. 20.00 BogoMIPS (lpj=40000) pid_max: default: 32768 minimum: 301 Mount-cache hash table entries: 8192 (order: 4, 65536 bytes) Mountpoint-cache hash table entries: 8192 (order: 4, 65536 bytes) Hierarchical SRCU implementation. smp: Bringing up secondary CPUs ... clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x24e6a1710, max_idle_ns: 440795202120 ns clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x24e6a1710, max_idle_ns: 440795202120 ns clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x24e6a1710, max_idle_ns: 440795202120 ns smp: Brought up 1 node, 4 CPUs devtmpfs: initialized clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns futex hash table entries: 1024 (order: 4, 65536 bytes) NET: Registered protocol family 16 vgaarb: loaded SCSI subsystem initialized usbcore: registered new interface driver usbfs usbcore: registered new interface driver hub usbcore: registered new device driver usb clocksource: Switched to clocksource riscv_clocksource NET: Registered protocol family 2 TCP established hash table entries: 32768 (order: 6, 262144 bytes) TCP bind hash table entries: 32768 (order: 7, 524288 bytes) TCP: Hash tables configured (established 32768 bind 32768) UDP hash table entries: 2048 (order: 4, 65536 bytes) UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes) NET: Registered protocol family 1 RPC: Registered named UNIX socket transport module. RPC: Registered udp transport module. RPC: Registered tcp transport module. RPC: Registered tcp NFSv4.1 backchannel transport module. Unpacking initramfs... Initialise system trusted keyrings workingset: timestamp_bits=62 max_order=20 bucket_order=0 NFS: Registering the id_resolver key type Key type id_resolver registered Key type id_legacy registered nfs4filelayout_init: NFSv4 File Layout Driver Registering... nfs4flexfilelayout_init: NFSv4 Flexfile Layout Driver Registering... random: fast init done NET: Registered protocol family 38 Key type asymmetric registered Asymmetric key parser 'x509' registered Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254) io scheduler noop registered io scheduler deadline registered io scheduler cfq registered (default) io scheduler mq-deadline registered io scheduler kyber registered Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled console [ttyS0] disabled 10000000.uart: ttyS0 at MMIO 0x10000000 (irq = 13, base_baud = 230400) is a 16550A console [ttyS0] enabled console [ttyS0] enabled [drm] radeon kernel modesetting enabled. [drm] radeon kernel modesetting enabled. loop: module loaded loop: module loaded libphy: Fixed MDIO Bus: probed libphy: Fixed MDIO Bus: probed e1000e: Intel(R) PRO/1000 Network Driver - 3.2.6-k e1000e: Intel(R) PRO/1000 Network Driver - 3.2.6-k e1000e: Copyright(c) 1999 - 2015 Intel Corporation. e1000e: Copyright(c) 1999 - 2015 Intel Corporation. ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver ehci-pci: EHCI PCI platform driver ehci-pci: EHCI PCI platform driver ehci-platform: EHCI generic platform driver ehci-platform: EHCI generic platform driver ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver ohci-pci: OHCI PCI platform driver ohci-pci: OHCI PCI platform driver ohci-platform: OHCI generic platform driver ohci-platform: OHCI generic platform driver usbcore: registered new interface driver uas usbcore: registered new interface driver uas usbcore: registered new interface driver usb-storage usbcore: registered new interface driver usb-storage mousedev: PS/2 mouse device common for all mice mousedev: PS/2 mouse device common for all mice usbcore: registered new interface driver usbhid usbcore: registered new interface driver usbhid usbhid: USB HID core driver usbhid: USB HID core driver NET: Registered protocol family 10 NET: Registered protocol family 10 Segment Routing with IPv6 Segment Routing with IPv6 sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver NET: Registered protocol family 17 NET: Registered protocol family 17 Key type dns_resolver registered Key type dns_resolver registered bootconsole [early0] uses init memory and must be disabled even before the real one is ready bootconsole [early0] uses init memory and must be disabled even before the real one is ready bootconsole [early0] disabled bootconsole [early0] disabled Loading compiled-in X.509 certificates EXT4-fs (vda): couldn't mount as ext3 due to feature incompatibilities EXT4-fs (vda): couldn't mount as ext2 due to feature incompatibilities EXT4-fs (vda): INFO: recovery required on readonly filesystem EXT4-fs (vda): write access will be enabled during recovery EXT4-fs (vda): recovery complete EXT4-fs (vda): mounted filesystem with ordered data mode. Opts: (null) VFS: Mounted root (ext4 filesystem) readonly on device 254:0. Freeing unused kernel memory: 192K This architecture does not have kernel memory protection. EXT4-fs (vda): re-mounted. Opts: (null) Fri Feb 16 17:46:00 UTC 2018 1: lo: mtu 65536 qdisc noop state DOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff inet 10.0.2.15/24 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::5054:ff:fe12:3456/64 scope link tentative valid_lft forever preferred_lft forever 3: sit0@NONE: mtu 1480 qdisc noop state DOWN group default qlen 1000 link/sit 0.0.0.0 brd 0.0.0.0 default via 10.0.2.2 dev eth0 10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15 Welcome to the Fedora/RISC-V stage4 builder + set -e + rm -rf /rpmbuild + mkdir -p /rpmbuild + rpmbuild --rebuild /var/tmp/perl-Coro-6.514-1.fc27.src.rpm --define 'debug_package %{nil}' --undefine _annotated_build --define '_topdir /rpmbuild' --define '_missing_doc_files_terminate_build %{nil}' --define '_unitdir /usr/lib/systemd/system' --define '_sysctldir /usr/lib/sysctl.d' --define '_tmpfilesdir /usr/lib/tmpfiles.d' --define '_udevrulesdir /usr/lib/udev/rules.d' --define '_emacs_sitestartdir /usr/share/emacs/site-lisp/site-start.d' --define '_emacs_sitelispdir /usr/share/emacs/site-lisp' --nodeps --nocheck Installing /var/tmp/perl-Coro-6.514-1.fc27.src.rpm warning: user mockbuild does not exist - using root warning: group mockbuild does not exist - using root warning: user mockbuild does not exist - using root warning: group mockbuild does not exist - using root warning: user mockbuild does not exist - using root warning: group mockbuild does not exist - using root warning: user mockbuild does not exist - using root warning: group mockbuild does not exist - using root Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.RTa4cg + umask 022 + cd /rpmbuild/BUILD + cd /rpmbuild/BUILD + rm -rf Coro-6.514 + /usr/bin/gzip -dc /rpmbuild/SOURCES/Coro-6.514.tar.gz + /usr/bin/tar -xof - + STATUS=0 + '[' 0 -ne 0 ']' + cd Coro-6.514 + /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w . + echo 'Patch #0 (perl-Coro-5.25-ucontext-default.patch):' Patch #0 (perl-Coro-5.25-ucontext-default.patch): + /usr/bin/patch --no-backup-if-mismatch -p1 -b --suffix .ucontext-default --fuzz=0 patching file Coro/Makefile.PL Hunk #1 succeeded at 63 (offset 14 lines). + echo 'Patch #1 (Coro-6.512-Disable-disabling-FORTIFY_SOURCE.patch):' Patch #1 (Coro-6.512-Disable-disabling-FORTIFY_SOURCE.patch): + /usr/bin/patch --no-backup-if-mismatch -p1 --fuzz=0 patching file Coro/Makefile.PL patching file Coro/libcoro/coro.h + rm Coro/ecb.h + sed -i '/^Coro\/ecb\.h$/d' MANIFEST + sed -i 's/ecb\.h//' Coro/Makefile.PL + for F in Coro/jit-*.pl + sed -i -e '/^#!/d' Coro/jit-amd64-unix.pl + chmod -x Coro/jit-amd64-unix.pl + for F in Coro/jit-*.pl + sed -i -e '/^#!/d' Coro/jit-x86-unix.pl + chmod -x Coro/jit-x86-unix.pl ++ mktemp + TMPHEAD=/tmp/tmp.8t2Vjjre9u ++ mktemp + TMPBODY=/tmp/tmp.TjS7g2RjaC + for file in eg/myhttpd + head -1 eg/myhttpd + tail -n +2 eg/myhttpd + /usr/bin/perl -pi -e '$f = /^#!/ ? "" : "#!/usr/bin/perl$/"; $_="$f$_"' /tmp/tmp.8t2Vjjre9u + cat /tmp/tmp.8t2Vjjre9u /tmp/tmp.TjS7g2RjaC + /usr/bin/perl -MExtUtils::MakeMaker -e 'ExtUtils::MM_Unix->fixin(qw{eg/myhttpd})' + /usr/bin/rm /tmp/tmp.8t2Vjjre9u /tmp/tmp.TjS7g2RjaC + exit 0 Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.DGzlf4 + umask 022 + cd /rpmbuild/BUILD + cd Coro-6.514 + perl Makefile.PL INSTALLDIRS=perl NO_PACKLIST=1 'OPTIMIZE=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 ' *** *** Canary::Stability COMPATIBILITY AND SUPPORT CHECK *** ================================================= *** *** Hi! *** *** I do my best to provide predictable and reliable software. *** *** However, in recent releases, P5P (who maintain perl) have been *** introducing regressions that are sometimes subtle and at other times *** catastrophic, often for personal preferences with little or no concern *** for existing code, most notably CPAN. *** *** For this reason, it has become very hard for me to maintain the level *** of reliability and support I have committed myself to in the past, at *** least with some perl versions: I simply can't keep up working around new *** bugs or gratituous incompatibilities, and in turn you might suffer from *** unanticipated problems. *** *** Therefore I have introduced a support and compatibility check, the results *** of which follow below, together with a FAQ and some recommendations. *** *** This check is just to let you know that there might be a risk, so you can *** make judgement calls on how to proceed - it will not keep the module from *** installing or working. *** *** The stability canary says: (nothing, it was driven away by harsh weather) *** *** It seems you are running perl version 5.026001, likely the "official" or *** "standard" version. While there is nothing wrong with doing that, *** standard perl versions 5.022 and up are not supported by Coro. *** While this might be fatal, it might also be all right - if you run into *** problems, you might want to downgrade your perl or switch to the *** stability branch. *** *** If everything works fine, you can ignore this message. *** *** Stability canary mini-FAQ: *** *** Do I need to do anything? *** With luck, no. While some distributions are known to fail *** already, most should probably work. This message is here *** to alert you that your perl is not supported by Coro, *** and if things go wrong, you either need to downgrade, or *** sidegrade to the stability variant of your perl version, *** or simply live with the consequences. *** *** What is this canary thing? *** It's purpose is to check support status of Coro with *** respect to your perl version. *** *** What is this "stability branch"? *** It's a branch or fork of the official perl, by schmorp, to *** improve stability and compatibility with existing modules. *** *** How can I skip this prompt on automated installs? *** Set PERL_CANARY_STABILITY_NOPROMPT=1 in your environment. *** More info is in the Canary::Stability manpage. *** *** Long version of this FAQ: http://stableperl.schmorp.de/faq.html *** Stability Branch homepage: http://stableperl.schmorp.de/ *** Continue anyways? [y] y *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** Event not found, not building Event support. *** EV not found, not building EV support. Checking if your kit is complete... Looks good Warning: prerequisite AnyEvent 5 not found. Warning: prerequisite Guard 0.5 not found. *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** Coro has a number of configuration options. Due to its maturity, the defaults that Coro chooses are usually fine, so you can decide to skip these questions. Only if something went wrong you should select 'n' here and manually configure Coro, and, of course, report this to the maintainer :) Skip further questions and use defaults (y/n)? [y] y *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** Coro can use a number of methods to implement coroutines at the C level. The default chosen is based on your current confguration and is correct in most cases, but you still can chose between these alternatives: u The unix 'ucontext.h' functions are relatively new and not implemented or well-tested in older unices. They allow very fast coroutine creation and reasonably fast switching. They are, however, usually slower than the other alternatives due to an extra syscall done by swapcontext. And while nominally most portable (it's the only POSIX-standardised interface for coroutines), ucontext functions are, as usual, broken on most/all BSDs. s If the ucontext functions are not working or you don't want to use them for other reasons you can try a workaround using setjmp/longjmp/sigaltstack (also standard unix functions). Coroutine creation is rather slow, but switching is very fast (often much faster than with the ucontext functions). Unfortunately, glibc-2.1 and below don't even feature a working sigaltstack. You cannot use this implementation if some other code uses SIGUSR2 or you plan to create coroutines from an alternative signal stack, as both are being used for coroutine creation. a Handcoded assembly. This is the fastest and most compatible method, with the least side effects, if it works, that is. It has been tested on GNU/Linux x86 and x86_64 systems and should work on all x86/x86_64 systems using the SVR ELF ABI (it is also reported to be working on Strawberry Perl for Windows using MinGW). This is the recommended method on supported platforms. When it doesn't work, use another method, such as (s)etjmp/longjmp. l GNU/Linux. Very old GNU/Linux systems (glibc-2.1 and below) need this hack. Since it is very linux-specific it is also quite fast and recommended even for newer versions; when it works, that is (currently x86 and a few others only. If it compiles, it's usually ok). Newer glibc versions (>= 2.5) stop working with this implementation however. i IRIX. For some reason, SGI really does not like to follow POSIX (does that surprise you?), so this workaround might be needed (it's fast), although [s] and [u] should also work now. w Microsoft Windows. Try this on Microsoft Windows when using Cygwin or the MSVC compilers (e.g. ActiveState Perl, but see "a" for Strawberry Perl), although, as there is no standard on how to do this under windows, different environments might work differently. Doh. f Microsoft Windows. Try this on Microsoft Windows if w fails. It is slower and uses a lot more memory, but should be working all the time. p Use pthread API. Try to avoid this option, it was only created to make a point about the programming language shootout. It is unlikely to work with perls that have windows process emulation enabled ("perl threads"). It is also likely the slowest method of implementing coroutines. It might work fine as a last resort, however, as the pthread API is slightly better tested than ucontext functions for example. Of course, not on BSDs, who usually have very broken pthread implementations. Coro tries hard to come up with a suitable default for most systems, so pressing return at the prompt usually does the right thing. If you experience problems (e.g. make test fails) then you should experiment with this setting. Use which implementation, etjmp, ctx, sm, rix, inux,

threads, indows, iber? [u] u Using ucontext implementation Trying to detect stack growth direction (for TEST_makecontext) You might see some warnings, this should not concern you. libcoro/conftest.c: In function 'handler': libcoro/conftest.c:65:10: warning: variable 'garbage' set but not used [-Wunused-but-set-variable] char garbage[1024]; ^~~~~~~ libcoro/conftest.c: In function 'main': libcoro/conftest.c:139:50: warning: format '%d' expects argument of type 'int', but argument 3 has type 'long unsigned int' [-Wformat=] sprintf(result, "(skaddr)+(sksize)-%d,(sksize)-%d", ~^ %ld libcoro/conftest.c:139:62: warning: format '%d' expects argument of type 'int', but argument 4 has type 'long unsigned int' [-Wformat=] sprintf(result, "(skaddr)+(sksize)-%d,(sksize)-%d", ~^ %ld libcoro/conftest.c:147:49: warning: format '%d' expects argument of type 'int', but argument 3 has type 'long unsigned int' [-Wformat=] sprintf(result, "(skaddr),(sksize)-%d", sizeof(union alltypes)); ~^ %ld libcoro/conftest.c:77:11: warning: unused variable 'f' [-Wunused-variable] FILE *f; ^ ***************************************************************************** If the testsuite fails PLEASE provide the following information to Marc Lehmann : operating system name, version, architecture name and this string '(skaddr)|(sksize)'. Thanks a lot! ***************************************************************************** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** Per-context stack size factor: Depending on your settings, Coro tries to share the C stacks is creates as much as possible, but sometimes it needs to allocate a new one. This setting controls the maximum size that gets allocated, and should not be set too high, as memory and address space still is wasted even if it's not fully used. The value entered will be multiplied by sizeof(void *), which is usually 4 on 32-bit systems, and 8 on 64-bit systems. A setting of 16384 (the default) therefore corresponds to a 64k..128k stack, which usually is ample space (you might even want to try 8192 or lower if your program creates many coroutines). On systems supporting mmap and dynamic memory management, the actual memory usually gets allocated on demand, but with many large stacks you can still run out of address space on your typical 32 bit platform (not to forget the pagetables). Some perls (mostly threaded ones and perl compiled under linux 2.6) and some programs (inefficient regexes can use a lot of stack space) may need much, much more: If Coro segfaults with weird backtraces (e.g. in a function prologue) or in t/10_bugs.t, you might want to increase this to 65536 or more. The default should be fine, and can be changed at runtime with Coro::State::cctx_stacksize. C stack size factor? [16384] 16384 using a stacksize of 16384 * sizeof(void*) *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** Coro can optionally put a guard area before each stack segment: When the stack is too small and the access is not too far outside the stack (i.e. within the guard area), then the program will safely segfault instead of running into other data. The cost is some additional overhead with is usually negligible, and extra use of address space. The guard area size currently needs to be specified in pages (typical pagesizes are 4k and 8k). The guard area is only enabled on a few hardcoded architectures and is ignored on others. The actual preprocessor expression disables this feature if: !__i386 && !__x86_64 && !__powerpc && !__m68k && !__alpha && !__mips && !__sparc64 The default, as usual, should be just fine. Number of guard pages (0 disables)? [4] 4 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** Coro can tell valgrind about its stacks and so reduce spurious warnings where valgrind would otherwise complain about possible stack switches. Enabling this does not incur noticable runtime or memory overhead, but it requires that you have the header file available. Valgrind support is completely optional, so disabling it is the safe choice. Enable valgrind support (y/n)? [n] n *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** Coro can use (or even trick) some perl functions into doing what it needs instead of relying on (some) of its own functions. This might increase chances that it compiles and works, but it could just as well result in memory leaks, crashes or silent data corruption. It certainly does result in slightly slower speed and higher memory consumption, though, so YOU SHOULD ENABLE THIS OPTION ONLY AS A LAST RESORT. Prefer perl functions over coro functions (y/n)? [n] n *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** Coro can use a simple JIT compiler to compile a part of the thread switch function at runtime. On perls with windows process emulation (most!), this results in a 50% speed improvement. On sane perls, the gain is much less, usually around 5%. If you enable this option, then the JIT will be enabled, on compatible operating systems and CPUs (currently only x86/amd64 on certain unix clones). Otherwise, it will be disabled. It should be safe to leave on - this setting is only here so you can switch it off in case of problems. Note that some broken kernels (often calling themselves "hardened") break all JIT generation by manipulating some system calls. If you get bus errors or segmentation faults immediately when the JIT is enabled but not without, then note that disabling the JIT only fixes some symptoms, not the underlying problem, and you might run into other problems later. Try to use the JIT compiler, if available? [y] y *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** Coro has experimental support for cloning states. This can be used to implement a scheme-like call/cc. However, this doesn't add to the expressiveness in general, and is likely perl-version specific (and perl 5.12 deliberately removed support for it). As such, it is disabled by default. Enable it when you want to play around with it, but note that it isn't supported, and unlikely ever will be. It exists mainly to prove that it could be done - if only it were useful for something. Implement Coro::State->clone method (y/n)? [n] n *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** Writing MYMETA.yml and MYMETA.json Generating a Unix-style Makefile Writing Makefile for Coro Writing MYMETA.yml and MYMETA.json + make -j4 make[1]: Entering directory '/rpmbuild/BUILD/Coro-6.514/Coro' cp Coro/CoroAPI.h blib/lib/Coro/CoroAPI.h cp Coro/LWP.pm blib/lib/Coro/LWP.pm "/usr/bin/perl" "/usr/share/perl5/vendor_perl/ExtUtils/xsubpp" -typemap '/usr/share/perl5/ExtUtils/typemap' -typemap '/rpmbuild/BUILD/Coro-6.514/Coro/typemap' State.xs > State.xsc Running Mkbootstrap for State () cp Coro/State.pm blib/lib/Coro/State.pm cp Coro/Channel.pm blib/lib/Coro/Channel.pm cp Coro/AnyEvent.pm blib/lib/Coro/AnyEvent.pm cp Coro/Debug.pm blib/lib/Coro/Debug.pm cp Coro/AIO.pm blib/lib/Coro/AIO.pm cp Coro/RWLock.pm blib/lib/Coro/RWLock.pm cp Coro/Select.pm blib/lib/Coro/Select.pm cp Coro/Storable.pm blib/lib/Coro/Storable.pm cp Coro/SemaphoreSet.pm blib/lib/Coro/SemaphoreSet.pm cp Coro/Handle.pm blib/lib/Coro/Handle.pm cp Coro.pm blib/lib/Coro.pm cp Coro/jit-x86-unix.pl blib/lib/Coro/jit-x86-unix.pl cp Coro/MakeMaker.pm blib/lib/Coro/MakeMaker.pm cp Coro/Socket.pm blib/lib/Coro/Socket.pm cp Coro/Signal.pm blib/lib/Coro/Signal.pm cp Coro/Semaphore.pm blib/lib/Coro/Semaphore.pm cp Coro/BDB.pm blib/lib/Coro/BDB.pm cp Coro/jit-amd64-unix.pl blib/lib/Coro/jit-amd64-unix.pl cp Coro/Util.pm blib/lib/Coro/Util.pm cp Coro/Timer.pm blib/lib/Coro/Timer.pm cp Coro/Specific.pm blib/lib/Coro/Specific.pm chmod 644 "State.bs" "/usr/bin/perl" -MExtUtils::Command::MM -e 'cp_nonempty' -- State.bs ../blib/arch/auto/Coro/State/State.bs 644 Skip ../blib/lib/Coro/State.pm (unchanged) Skip ../blib/lib/Coro/Signal.pm (unchanged) Skip ../blib/lib/Coro/RWLock.pm (unchanged) Skip ../blib/lib/Coro/SemaphoreSet.pm (unchanged) cp Intro.pod ../blib/lib/Coro/Intro.pod Skip ../blib/lib/Coro/Storable.pm (unchanged) Skip ../blib/lib/Coro/AnyEvent.pm (unchanged) Skip ../blib/lib/Coro/BDB.pm (unchanged) Skip ../blib/lib/Coro/Socket.pm (unchanged) Skip ../blib/lib/Coro/Util.pm (unchanged) Skip ../blib/lib/Coro/Debug.pm (unchanged) Skip ../blib/lib/Coro/Select.pm (unchanged) Skip ../blib/lib/Coro/LWP.pm (unchanged) Skip ../blib/lib/Coro/AIO.pm (unchanged) Skip ../blib/lib/Coro/Semaphore.pm (unchanged) Skip ../blib/lib/Coro/Timer.pm (unchanged) Skip ../blib/lib/Coro/Channel.pm (unchanged) Skip ../blib/lib/Coro/Specific.pm (unchanged) Skip ../blib/lib/Coro/jit-x86-unix.pl (unchanged) Skip ../blib/lib/Coro/MakeMaker.pm (unchanged) Skip ../blib/lib/Coro/jit-amd64-unix.pl (unchanged) Skip ../blib/lib/Coro/Handle.pm (unchanged) Warning: Aliases 'is_zombie' and 'is_destroyed' have identical values in State.xs, line 3867 mv State.xsc State.c gcc -c -D_REENTRANT -D_GNU_SOURCE -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fwrapv -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -DVERSION=\"6.514\" -DXS_VERSION=\"6.514\" -fPIC "-I/usr/lib64/perl5/CORE" -DCORO_UCONTEXT -DCORO_STACKSIZE=16384 -DCORO_GUARDPAGES=4 -DCORO_JIT=1 State.c State.xs:20:10: fatal error: ecb.h: No such file or directory #include "ecb.h" ^~~~~~~ compilation terminated. make[1]: *** [Makefile:360: State.o] Error 1 make[1]: Leaving directory '/rpmbuild/BUILD/Coro-6.514/Coro' make: *** [Makefile:569: subdirs] Error 2 error: Bad exit status from /var/tmp/rpm-tmp.DGzlf4 (%build) RPM build errors: user mockbuild does not exist - using root group mockbuild does not exist - using root user mockbuild does not exist - using root group mockbuild does not exist - using root user mockbuild does not exist - using root group mockbuild does not exist - using root user mockbuild does not exist - using root group mockbuild does not exist - using root Bad exit status from /var/tmp/rpm-tmp.DGzlf4 (%build) ++ cleanup ++ set +e ++ sync ++ sleep 5 ++ sync ++ mount.static -o remount,ro / ++ poweroff reboot: Power down Power off