Date: Fri, 16 Jan 2009 00:41:37 -0800 From: Garrett Cooper <yanefbsd@gmail.com> To: Hackers freeBSD <freebsd-hackers@freebsd.org> Cc: "amd64@freebsd.org" <amd64@freebsd.org> Subject: Confused by segfault with legitimate call to strerror(3) on amd64 / sysctl(3) setting `odd' errno's Message-ID: <7d6fde3d0901160041n55466290l55f737d274a40895@mail.gmail.com>
next in thread | raw e-mail | index | archive | help
Hi amd64 and Hackers, Uh, I'm really confused why 1) this error (errno => ENOMEM) would occur when I have more than enough free memory (both on x86 and amd64) and 2) why strerror would segfault in the call to errx in the attached sourcefile on amd64 only. Not initializing len causes the second output sample (errno => 14, which is EFAULT). Any ideas? Please CC me if mailing on amd64@ as I'm not subscribed to the list. Thanks, -Garrett /* Program */ #include <err.h> #include <errno.h> #include <stdio.h> #include <sys/types.h> #include <sys/sysctl.h> int main() { int mib[4]; size_t len; if (sysctlnametomib("kern.ipc.shmmax", mib, &len) != 0) { printf("Errno: %d\n", errno); errx(errno, "Error: %s", strerror(errno)); } printf("%lu\n", len); return 0; } # output for len preset to 0: [gcooper@optimus ~]$ ./test2 Errno: 12 test2: Segmentation fault: 11 (core dumped) [gcooper@optimus ~]$ uname -a FreeBSD optimus.gateway.2wire.net 8.0-CURRENT FreeBSD 8.0-CURRENT #4: Sun Jan 11 12:30:31 PST 2009 root@optimus.gateway.2wire.net:/usr/obj/usr/src/sys/OPTIMUS amd64 [gcooper@orangebox /usr/home/gcooper]$ ./test Errno: 12 test: Error: Cannot allocate memory [gcooper@orangebox /usr/home/gcooper]$ uname -a FreeBSD orangebox.gateway.2wire.net 8.0-CURRENT FreeBSD 8.0-CURRENT #4: Sat Jan 3 22:54:52 PST 2009 gcooper@orangebox.gateway.2wire.net:/usr/obj/usr/src/sys/ORANGEBOX i386 # output for len not preset to 0: [gcooper@optimus ~]$ ./test2 Errno: 14 test2: Segmentation fault: 11 (core dumped)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?7d6fde3d0901160041n55466290l55f737d274a40895>