@@ -3736,6 +3736,12 @@ fn test_linux(target: &str) {
37363736 cfg. cfg ( "musl_redir_time64" , None ) ;
37373737 }
37383738 }
3739+ let uclibc_use_time64 = env:: var ( "CARGO_CFG_LIBC_UNSTABLE_UCLIBC_TIME64" )
3740+ . map ( |val| val != "0" )
3741+ . unwrap_or ( false ) ;
3742+ if uclibc && uclibc_use_time64 {
3743+ cfg. cfg ( "linux_time_bits64" , None ) ;
3744+ }
37393745 cfg. define ( "_GNU_SOURCE" , None )
37403746 // This macro re-defines fscanf,scanf,sscanf to link to the symbols that are
37413747 // deprecated since glibc >= 2.29. This allows Rust binaries to link against
@@ -3939,8 +3945,7 @@ fn test_linux(target: &str) {
39393945 "linux/wait.h" ,
39403946 "linux/wireless.h" ,
39413947 "sys/fanotify.h" ,
3942- // <sys/auxv.h> is not present on uclibc
3943- ( !uclibc, "sys/auxv.h" ) ,
3948+ "sys/auxv.h" ,
39443949 ( gnu || musl, "linux/close_range.h" ) ,
39453950 ) ;
39463951 }
@@ -4177,6 +4182,18 @@ fn test_linux(target: &str) {
41774182 // On 64 bits the size did not change, skip only for 32 bits.
41784183 "ptrace_syscall_info" if pointer_width == 32 => true ,
41794184
4185+ "canxl_frame"
4186+ | "fanotify_event_info_header" // not in sys/fanotify.h in uclibc
4187+ | "fanotify_event_info_fid" // not in sys/fanotify.h in uclibc
4188+ | "tls12_crypto_info_sm4_gcm"
4189+ | "tls12_crypto_info_sm4_ccm"
4190+ | "tls12_crypto_info_aria_gcm_128"
4191+ | "tls12_crypto_info_aria_gcm_256"
4192+ if uclibc =>
4193+ {
4194+ true
4195+ }
4196+
41804197 _ => false ,
41814198 }
41824199 } ) ;
@@ -4365,18 +4382,159 @@ fn test_linux(target: &str) {
43654382 // Skip as this signal codes and trap reasons need newer headers
43664383 "TRAP_PERF" => true ,
43674384
4368- // kernel constants not available in uclibc 1.0.34
4369- "EXTPROC"
4385+ // constants not available in uclibc 1.0.45
4386+ // but defined outside the uclibc library,
4387+ // e.g. file format constants or kernel-defined
4388+ // constants.
4389+ "ALG_SET_KEY_BY_KEY_SERIAL"
4390+ | "AT_MINSIGSTKSZ"
4391+ | "BUS_MCEERR_AO"
4392+ | "BUS_MCEERR_AR"
4393+ | "CAN_BUS_OFF_THRESHOLD"
4394+ | "CAN_CTRLMODE_TDC_AUTO"
4395+ | "CAN_CTRLMODE_TDC_MANUAL"
4396+ | "CAN_ERR_CNT"
4397+ | "CAN_ERROR_PASSIVE_THRESHOLD"
4398+ | "CAN_ERROR_WARNING_THRESHOLD"
4399+ | "CAN_RAW_XL_FRAMES"
4400+ | "CANXL_HDR_SIZE"
4401+ | "CANXL_MAX_DLC_MASK"
4402+ | "CANXL_MAX_DLC"
4403+ | "CANXL_MAX_DLEN"
4404+ | "CANXL_MAX_MTU"
4405+ | "CANXL_MIN_DLC"
4406+ | "CANXL_MIN_DLEN"
4407+ | "CANXL_MIN_MTU"
4408+ | "CANXL_MTU"
4409+ | "CANXL_PRIO_BITS"
4410+ | "CANXL_PRIO_MASK"
4411+ | "CANXL_SEC"
4412+ | "CANXL_XLF"
4413+ | "CLOSE_RANGE_CLOEXEC"
4414+ | "CLOSE_RANGE_UNSHARE"
4415+ | "EM_ARC_A5"
4416+ | "EM_OPENRISC"
4417+ | "EM_TILEGX"
4418+ | "EM_TILEPRO"
4419+ | "EXTPROC"
4420+ | "FAN_ATTRIB"
4421+ | "FAN_AUDIT"
4422+ | "FAN_CREATE"
4423+ | "FAN_DELETE_SELF"
4424+ | "FAN_DELETE"
4425+ | "FAN_ENABLE_AUDIT"
4426+ | "FAN_EPIDFD"
4427+ | "FAN_EVENT_INFO_TYPE_DFID_NAME"
4428+ | "FAN_EVENT_INFO_TYPE_DFID"
4429+ | "FAN_EVENT_INFO_TYPE_ERROR"
4430+ | "FAN_EVENT_INFO_TYPE_FID"
4431+ | "FAN_EVENT_INFO_TYPE_NEW_DFID_NAME"
4432+ | "FAN_EVENT_INFO_TYPE_OLD_DFID_NAME"
4433+ | "FAN_EVENT_INFO_TYPE_PIDFD"
4434+ | "FAN_FS_ERROR"
4435+ | "FAN_INFO"
4436+ | "FAN_MARK_EVICTABLE"
4437+ | "FAN_MARK_FILESYSTEM"
4438+ | "FAN_MARK_IGNORE_SURV"
4439+ | "FAN_MARK_IGNORE"
4440+ | "FAN_MARK_INODE"
4441+ | "FAN_MOVE_SELF"
4442+ | "FAN_MOVE"
4443+ | "FAN_MOVED_FROM"
4444+ | "FAN_MOVED_TO"
4445+ | "FAN_NOPIDFD"
4446+ | "FAN_OPEN_EXEC_PERM"
4447+ | "FAN_OPEN_EXEC"
4448+ | "FAN_RENAME"
4449+ | "FAN_REPORT_DFID_NAME_TARGET"
4450+ | "FAN_REPORT_DFID_NAME"
4451+ | "FAN_REPORT_DIR_FID"
4452+ | "FAN_REPORT_FID"
4453+ | "FAN_REPORT_NAME"
4454+ | "FAN_REPORT_PIDFD"
4455+ | "FAN_REPORT_TARGET_FID"
4456+ | "FAN_REPORT_TID"
4457+ | "FAN_RESPONSE_INFO_AUDIT_RULE"
4458+ | "FAN_RESPONSE_INFO_NONE"
4459+ | "IFF_NO_CARRIER"
4460+ | "IN_MASK_CREATE"
43704461 | "IPPROTO_BEETPH"
4462+ | "IPPROTO_ETHERNET"
43714463 | "IPPROTO_MPLS"
4464+ | "IPPROTO_MPTCP"
43724465 | "IPV6_HDRINCL"
43734466 | "IPV6_MULTICAST_ALL"
43744467 | "IPV6_PMTUDISC_INTERFACE"
43754468 | "IPV6_PMTUDISC_OMIT"
43764469 | "IPV6_ROUTER_ALERT_ISOLATE"
4470+ | "MADV_DONTNEED_LOCKED"
4471+ | "MFD_EXEC"
4472+ | "MFD_NOEXEC_SEAL"
4473+ | "NF_NETDEV_EGRESS"
4474+ | "NFQA_PRIORITY"
4475+ | "NLM_F_BULK"
4476+ | "NT_PRFPREG"
4477+ | "PACKET_FANOUT_FLAG_IGNORE_OUTGOING"
43774478 | "PACKET_MR_UNICAST"
4479+ | "PACKET_VNET_HDR_SZ"
4480+ | "POSIX_SPAWN_SETSID"
4481+ | "PR_GET_MDWE"
4482+ | "PR_MDWE_NO_INHERIT"
4483+ | "PR_MDWE_REFUSE_EXEC_GAIN"
4484+ | "PR_SCHED_CORE_SCOPE_PROCESS_GROUP"
4485+ | "PR_SCHED_CORE_SCOPE_THREAD_GROUP"
4486+ | "PR_SCHED_CORE_SCOPE_THREAD"
4487+ | "PR_SET_MDWE"
4488+ | "PR_SET_VMA_ANON_NAME"
4489+ | "PR_SET_VMA"
4490+ | "RTNLGRP_MCTP_IFADDR"
4491+ | "RTNLGRP_STATS"
4492+ | "RTNLGRP_TUNNEL"
43784493 | "RUSAGE_THREAD"
4494+ | "SECCOMP_FILTER_FLAG_WAIT_KILLABLE_RECV"
4495+ | "SEM_STAT_ANY"
43794496 | "SHM_EXEC"
4497+ | "SI_DETHREAD"
4498+ | "SO_PASSPIDFD"
4499+ | "SO_PEERPIDFD"
4500+ | "SO_RCVMARK"
4501+ | "SO_RESERVE_MEM"
4502+ | "SO_TXREHASH"
4503+ | "SOF_TIMESTAMPING_OPT_ID_TCP"
4504+ | "TFD_TIMER_CANCEL_ON_SET"
4505+ | "TLS_CIPHER_ARIA_GCM_128_IV_SIZE"
4506+ | "TLS_CIPHER_ARIA_GCM_128_KEY_SIZE"
4507+ | "TLS_CIPHER_ARIA_GCM_128_REC_SEQ_SIZE"
4508+ | "TLS_CIPHER_ARIA_GCM_128_SALT_SIZE"
4509+ | "TLS_CIPHER_ARIA_GCM_128_TAG_SIZE"
4510+ | "TLS_CIPHER_ARIA_GCM_128"
4511+ | "TLS_CIPHER_ARIA_GCM_256_IV_SIZE"
4512+ | "TLS_CIPHER_ARIA_GCM_256_KEY_SIZE"
4513+ | "TLS_CIPHER_ARIA_GCM_256_REC_SEQ_SIZE"
4514+ | "TLS_CIPHER_ARIA_GCM_256_SALT_SIZE"
4515+ | "TLS_CIPHER_ARIA_GCM_256_TAG_SIZE"
4516+ | "TLS_CIPHER_ARIA_GCM_256"
4517+ | "TLS_CIPHER_SM4_CCM_IV_SIZE"
4518+ | "TLS_CIPHER_SM4_CCM_KEY_SIZE"
4519+ | "TLS_CIPHER_SM4_CCM_REC_SEQ_SIZE"
4520+ | "TLS_CIPHER_SM4_CCM_SALT_SIZE"
4521+ | "TLS_CIPHER_SM4_CCM_TAG_SIZE"
4522+ | "TLS_CIPHER_SM4_CCM"
4523+ | "TLS_CIPHER_SM4_GCM_IV_SIZE"
4524+ | "TLS_CIPHER_SM4_GCM_KEY_SIZE"
4525+ | "TLS_CIPHER_SM4_GCM_REC_SEQ_SIZE"
4526+ | "TLS_CIPHER_SM4_GCM_SALT_SIZE"
4527+ | "TLS_CIPHER_SM4_GCM_TAG_SIZE"
4528+ | "TLS_CIPHER_SM4_GCM"
4529+ | "TLS_INFO_RX_NO_PAD"
4530+ | "TLS_INFO_ZC_RO_TX"
4531+ | "TLS_RX_EXPECT_NO_PAD"
4532+ | "TLS_TX_ZEROCOPY_RO"
4533+ | "TRAP_BRANCH"
4534+ | "TRAP_HWBKPT"
4535+ | "TRAP_UNK"
4536+ | "TUN_F_USO4"
4537+ | "TUN_F_USO6"
43804538 | "UDP_GRO"
43814539 | "UDP_SEGMENT"
43824540 if uclibc =>
@@ -4424,6 +4582,10 @@ fn test_linux(target: &str) {
44244582 // value changed
44254583 "NF_NETDEV_NUMHOOKS" if sparc64 => true ,
44264584
4585+ // Canonical uclibc latest from toolchains.bootlin.com is based on kernel 5.15,
4586+ // so opt out of tests for constants which are different in later kernels.
4587+ "NF_NETDEV_NUMHOOKS" | "RLIM_NLIMITS" | "NFT_MSG_MAX" if uclibc => true ,
4588+
44274589 // kernel 6.9 minimum
44284590 "RWF_NOAPPEND" => true ,
44294591
@@ -4633,8 +4795,9 @@ fn test_linux(target: &str) {
46334795 // Needs glibc 2.33 or later.
46344796 "mallinfo2" => true ,
46354797
4636- // Not defined in uclibc as of 1.0.34
4798+ // Not defined in uclibc as of 1.0.45
46374799 "gettid" if uclibc => true ,
4800+ "getauxval" if uclibc => true ,
46384801
46394802 // There are two versions of basename(3) on Linux with glibc, see
46404803 //
@@ -4766,7 +4929,7 @@ fn test_linux(target: &str) {
47664929 // FIXME(linux): `max_phase_adj` requires >= 5.19 kernel headers
47674930 // the rsv field shrunk when those fields got added, so is omitted too
47684931 ( "ptp_clock_caps" , "adjust_phase" | "max_phase_adj" | "rsv" )
4769- if loongarch64 || sparc64 =>
4932+ if loongarch64 || sparc64 || uclibc =>
47704933 {
47714934 true
47724935 }
@@ -4783,7 +4946,7 @@ fn test_linux(target: &str) {
47834946 ( "bcm_msg_head" , "frames" ) => true ,
47844947 // FAM
47854948 ( "af_alg_iv" , "iv" ) => true ,
4786- ( "file_handle" , "f_handle" ) if musl => true ,
4949+ ( "file_handle" , "f_handle" ) if musl || uclibc => true ,
47874950 // FIXME(ctest): ctest does not translate the rust code which computes the padding size
47884951 ( "pthread_cond_t" , "__padding" ) if l4re => true ,
47894952 _ => false ,
0 commit comments