@@ -3731,6 +3731,12 @@ fn test_linux(target: &str) {
37313731 cfg. cfg ( "linux_time_bits64" , None ) ;
37323732 }
37333733 }
3734+ let uclibc_use_time64 = env:: var ( "CARGO_CFG_LIBC_UNSTABLE_UCLIBC_TIME64" )
3735+ . map ( |val| val != "0" )
3736+ . unwrap_or ( false ) ;
3737+ if uclibc && uclibc_use_time64 {
3738+ cfg. cfg ( "linux_time_bits64" , None ) ;
3739+ }
37343740 cfg. define ( "_GNU_SOURCE" , None )
37353741 // This macro re-defines fscanf,scanf,sscanf to link to the symbols that are
37363742 // deprecated since glibc >= 2.29. This allows Rust binaries to link against
@@ -3934,8 +3940,7 @@ fn test_linux(target: &str) {
39343940 "linux/wait.h" ,
39353941 "linux/wireless.h" ,
39363942 "sys/fanotify.h" ,
3937- // <sys/auxv.h> is not present on uclibc
3938- ( !uclibc, "sys/auxv.h" ) ,
3943+ "sys/auxv.h" ,
39393944 ( gnu || musl, "linux/close_range.h" ) ,
39403945 ) ;
39413946 }
@@ -4172,6 +4177,18 @@ fn test_linux(target: &str) {
41724177 // On 64 bits the size did not change, skip only for 32 bits.
41734178 "ptrace_syscall_info" if pointer_width == 32 => true ,
41744179
4180+ "canxl_frame"
4181+ | "fanotify_event_info_header" // not in sys/fanotify.h in uclibc
4182+ | "fanotify_event_info_fid" // not in sys/fanotify.h in uclibc
4183+ | "tls12_crypto_info_sm4_gcm"
4184+ | "tls12_crypto_info_sm4_ccm"
4185+ | "tls12_crypto_info_aria_gcm_128"
4186+ | "tls12_crypto_info_aria_gcm_256"
4187+ if uclibc =>
4188+ {
4189+ true
4190+ }
4191+
41754192 _ => false ,
41764193 }
41774194 } ) ;
@@ -4359,18 +4376,159 @@ fn test_linux(target: &str) {
43594376 // Skip as this signal codes and trap reasons need newer headers
43604377 "TRAP_PERF" => true ,
43614378
4362- // kernel constants not available in uclibc 1.0.34
4363- "EXTPROC"
4379+ // constants not available in uclibc 1.0.45
4380+ // but defined outside the uclibc library,
4381+ // e.g. file format constants or kernel-defined
4382+ // constants.
4383+ "ALG_SET_KEY_BY_KEY_SERIAL"
4384+ | "AT_MINSIGSTKSZ"
4385+ | "BUS_MCEERR_AO"
4386+ | "BUS_MCEERR_AR"
4387+ | "CAN_BUS_OFF_THRESHOLD"
4388+ | "CAN_CTRLMODE_TDC_AUTO"
4389+ | "CAN_CTRLMODE_TDC_MANUAL"
4390+ | "CAN_ERR_CNT"
4391+ | "CAN_ERROR_PASSIVE_THRESHOLD"
4392+ | "CAN_ERROR_WARNING_THRESHOLD"
4393+ | "CAN_RAW_XL_FRAMES"
4394+ | "CANXL_HDR_SIZE"
4395+ | "CANXL_MAX_DLC_MASK"
4396+ | "CANXL_MAX_DLC"
4397+ | "CANXL_MAX_DLEN"
4398+ | "CANXL_MAX_MTU"
4399+ | "CANXL_MIN_DLC"
4400+ | "CANXL_MIN_DLEN"
4401+ | "CANXL_MIN_MTU"
4402+ | "CANXL_MTU"
4403+ | "CANXL_PRIO_BITS"
4404+ | "CANXL_PRIO_MASK"
4405+ | "CANXL_SEC"
4406+ | "CANXL_XLF"
4407+ | "CLOSE_RANGE_CLOEXEC"
4408+ | "CLOSE_RANGE_UNSHARE"
4409+ | "EM_ARC_A5"
4410+ | "EM_OPENRISC"
4411+ | "EM_TILEGX"
4412+ | "EM_TILEPRO"
4413+ | "EXTPROC"
4414+ | "FAN_ATTRIB"
4415+ | "FAN_AUDIT"
4416+ | "FAN_CREATE"
4417+ | "FAN_DELETE_SELF"
4418+ | "FAN_DELETE"
4419+ | "FAN_ENABLE_AUDIT"
4420+ | "FAN_EPIDFD"
4421+ | "FAN_EVENT_INFO_TYPE_DFID_NAME"
4422+ | "FAN_EVENT_INFO_TYPE_DFID"
4423+ | "FAN_EVENT_INFO_TYPE_ERROR"
4424+ | "FAN_EVENT_INFO_TYPE_FID"
4425+ | "FAN_EVENT_INFO_TYPE_NEW_DFID_NAME"
4426+ | "FAN_EVENT_INFO_TYPE_OLD_DFID_NAME"
4427+ | "FAN_EVENT_INFO_TYPE_PIDFD"
4428+ | "FAN_FS_ERROR"
4429+ | "FAN_INFO"
4430+ | "FAN_MARK_EVICTABLE"
4431+ | "FAN_MARK_FILESYSTEM"
4432+ | "FAN_MARK_IGNORE_SURV"
4433+ | "FAN_MARK_IGNORE"
4434+ | "FAN_MARK_INODE"
4435+ | "FAN_MOVE_SELF"
4436+ | "FAN_MOVE"
4437+ | "FAN_MOVED_FROM"
4438+ | "FAN_MOVED_TO"
4439+ | "FAN_NOPIDFD"
4440+ | "FAN_OPEN_EXEC_PERM"
4441+ | "FAN_OPEN_EXEC"
4442+ | "FAN_RENAME"
4443+ | "FAN_REPORT_DFID_NAME_TARGET"
4444+ | "FAN_REPORT_DFID_NAME"
4445+ | "FAN_REPORT_DIR_FID"
4446+ | "FAN_REPORT_FID"
4447+ | "FAN_REPORT_NAME"
4448+ | "FAN_REPORT_PIDFD"
4449+ | "FAN_REPORT_TARGET_FID"
4450+ | "FAN_REPORT_TID"
4451+ | "FAN_RESPONSE_INFO_AUDIT_RULE"
4452+ | "FAN_RESPONSE_INFO_NONE"
4453+ | "IFF_NO_CARRIER"
4454+ | "IN_MASK_CREATE"
43644455 | "IPPROTO_BEETPH"
4456+ | "IPPROTO_ETHERNET"
43654457 | "IPPROTO_MPLS"
4458+ | "IPPROTO_MPTCP"
43664459 | "IPV6_HDRINCL"
43674460 | "IPV6_MULTICAST_ALL"
43684461 | "IPV6_PMTUDISC_INTERFACE"
43694462 | "IPV6_PMTUDISC_OMIT"
43704463 | "IPV6_ROUTER_ALERT_ISOLATE"
4464+ | "MADV_DONTNEED_LOCKED"
4465+ | "MFD_EXEC"
4466+ | "MFD_NOEXEC_SEAL"
4467+ | "NF_NETDEV_EGRESS"
4468+ | "NFQA_PRIORITY"
4469+ | "NLM_F_BULK"
4470+ | "NT_PRFPREG"
4471+ | "PACKET_FANOUT_FLAG_IGNORE_OUTGOING"
43714472 | "PACKET_MR_UNICAST"
4473+ | "PACKET_VNET_HDR_SZ"
4474+ | "POSIX_SPAWN_SETSID"
4475+ | "PR_GET_MDWE"
4476+ | "PR_MDWE_NO_INHERIT"
4477+ | "PR_MDWE_REFUSE_EXEC_GAIN"
4478+ | "PR_SCHED_CORE_SCOPE_PROCESS_GROUP"
4479+ | "PR_SCHED_CORE_SCOPE_THREAD_GROUP"
4480+ | "PR_SCHED_CORE_SCOPE_THREAD"
4481+ | "PR_SET_MDWE"
4482+ | "PR_SET_VMA_ANON_NAME"
4483+ | "PR_SET_VMA"
4484+ | "RTNLGRP_MCTP_IFADDR"
4485+ | "RTNLGRP_STATS"
4486+ | "RTNLGRP_TUNNEL"
43724487 | "RUSAGE_THREAD"
4488+ | "SECCOMP_FILTER_FLAG_WAIT_KILLABLE_RECV"
4489+ | "SEM_STAT_ANY"
43734490 | "SHM_EXEC"
4491+ | "SI_DETHREAD"
4492+ | "SO_PASSPIDFD"
4493+ | "SO_PEERPIDFD"
4494+ | "SO_RCVMARK"
4495+ | "SO_RESERVE_MEM"
4496+ | "SO_TXREHASH"
4497+ | "SOF_TIMESTAMPING_OPT_ID_TCP"
4498+ | "TFD_TIMER_CANCEL_ON_SET"
4499+ | "TLS_CIPHER_ARIA_GCM_128_IV_SIZE"
4500+ | "TLS_CIPHER_ARIA_GCM_128_KEY_SIZE"
4501+ | "TLS_CIPHER_ARIA_GCM_128_REC_SEQ_SIZE"
4502+ | "TLS_CIPHER_ARIA_GCM_128_SALT_SIZE"
4503+ | "TLS_CIPHER_ARIA_GCM_128_TAG_SIZE"
4504+ | "TLS_CIPHER_ARIA_GCM_128"
4505+ | "TLS_CIPHER_ARIA_GCM_256_IV_SIZE"
4506+ | "TLS_CIPHER_ARIA_GCM_256_KEY_SIZE"
4507+ | "TLS_CIPHER_ARIA_GCM_256_REC_SEQ_SIZE"
4508+ | "TLS_CIPHER_ARIA_GCM_256_SALT_SIZE"
4509+ | "TLS_CIPHER_ARIA_GCM_256_TAG_SIZE"
4510+ | "TLS_CIPHER_ARIA_GCM_256"
4511+ | "TLS_CIPHER_SM4_CCM_IV_SIZE"
4512+ | "TLS_CIPHER_SM4_CCM_KEY_SIZE"
4513+ | "TLS_CIPHER_SM4_CCM_REC_SEQ_SIZE"
4514+ | "TLS_CIPHER_SM4_CCM_SALT_SIZE"
4515+ | "TLS_CIPHER_SM4_CCM_TAG_SIZE"
4516+ | "TLS_CIPHER_SM4_CCM"
4517+ | "TLS_CIPHER_SM4_GCM_IV_SIZE"
4518+ | "TLS_CIPHER_SM4_GCM_KEY_SIZE"
4519+ | "TLS_CIPHER_SM4_GCM_REC_SEQ_SIZE"
4520+ | "TLS_CIPHER_SM4_GCM_SALT_SIZE"
4521+ | "TLS_CIPHER_SM4_GCM_TAG_SIZE"
4522+ | "TLS_CIPHER_SM4_GCM"
4523+ | "TLS_INFO_RX_NO_PAD"
4524+ | "TLS_INFO_ZC_RO_TX"
4525+ | "TLS_RX_EXPECT_NO_PAD"
4526+ | "TLS_TX_ZEROCOPY_RO"
4527+ | "TRAP_BRANCH"
4528+ | "TRAP_HWBKPT"
4529+ | "TRAP_UNK"
4530+ | "TUN_F_USO4"
4531+ | "TUN_F_USO6"
43744532 | "UDP_GRO"
43754533 | "UDP_SEGMENT"
43764534 if uclibc =>
@@ -4418,6 +4576,10 @@ fn test_linux(target: &str) {
44184576 // value changed
44194577 "NF_NETDEV_NUMHOOKS" if sparc64 => true ,
44204578
4579+ // Canonical uclibc latest from toolchains.bootlin.com is based on kernel 5.15,
4580+ // so opt out of tests for constants which are different in later kernels.
4581+ "NF_NETDEV_NUMHOOKS" | "RLIM_NLIMITS" | "NFT_MSG_MAX" if uclibc => true ,
4582+
44214583 // kernel 6.9 minimum
44224584 "RWF_NOAPPEND" => true ,
44234585
@@ -4627,8 +4789,9 @@ fn test_linux(target: &str) {
46274789 // Needs glibc 2.33 or later.
46284790 "mallinfo2" => true ,
46294791
4630- // Not defined in uclibc as of 1.0.34
4792+ // Not defined in uclibc as of 1.0.45
46314793 "gettid" if uclibc => true ,
4794+ "getauxval" if uclibc => true ,
46324795
46334796 // There are two versions of basename(3) on Linux with glibc, see
46344797 //
@@ -4760,7 +4923,7 @@ fn test_linux(target: &str) {
47604923 // FIXME(linux): `max_phase_adj` requires >= 5.19 kernel headers
47614924 // the rsv field shrunk when those fields got added, so is omitted too
47624925 ( "ptp_clock_caps" , "adjust_phase" | "max_phase_adj" | "rsv" )
4763- if loongarch64 || sparc64 =>
4926+ if loongarch64 || sparc64 || uclibc =>
47644927 {
47654928 true
47664929 }
@@ -4777,7 +4940,7 @@ fn test_linux(target: &str) {
47774940 ( "bcm_msg_head" , "frames" ) => true ,
47784941 // FAM
47794942 ( "af_alg_iv" , "iv" ) => true ,
4780- ( "file_handle" , "f_handle" ) if musl => true ,
4943+ ( "file_handle" , "f_handle" ) if musl || uclibc => true ,
47814944 // FIXME(ctest): ctest does not translate the rust code which computes the padding size
47824945 ( "pthread_cond_t" , "__padding" ) if l4re => true ,
47834946 _ => false ,
0 commit comments