NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
lib/52756: sysctl(2) in C++ constructor does not work any more
>Number: 52756
>Category: lib
>Synopsis: sysctl(2) in C++ constructor does not work any more
>Confidential: no
>Severity: critical
>Priority: medium
>Responsible: lib-bug-people
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Thu Nov 23 09:35:00 +0000 2017
>Originator: Kamil Rytarowski
>Release: NetBSD 8.99.7 amd64
>Organization:
TNF
>Environment:
NetBSD chieftec 8.99.7 NetBSD 8.99.7 (GENERIC) #8: Tue Nov 21 08:36:07 CET 2017 root@chieftec:/public/netbsd-root/sys/arch/amd64/compile/GENERIC amd64
>Description:
sysctl(2) calls inside C++ lamda constructos no longer work.
It might be related to __cxa_atexit() changes.
This used to work in the past. Confirmed to work on:
NetBSD rugged 8.99.1 NetBSD 8.99.1 (GENERIC) #7: Mon Jul 3 15:56:30 CEST 2017 root@chieftec:/public/netbsd-root/sys/arch/amd64/compile/GENERIC amd64
>How-To-Repeat:
/* g++ std=c++11 prog.c */
#include <sys/param.h>
#include <sys/types.h>
#include <sys/sysctl.h>
#include <machine/cpu.h>
#include <iostream>
#include <stdlib.h>
#include <err.h>
const int fpu_present = []() -> int {
int mib[2];
int error;
size_t len;
int val;
len = sizeof(val);
mib[0] = CTL_MACHDEP;
mib[1] = CPU_FPU_PRESENT;
error = sysctl(mib, __arraycount(mib), &val, &len, NULL, 0);
if (error)
errx(EXIT_FAILURE, "sysctl");
return val;
}();
int
main(int argc, char **argv)
{
std::cout << "fpu_present=" << fpu_present << std::endl;
return 0;
}
>Fix:
N/A
Home |
Main Index |
Thread Index |
Old Index