@@ -3168,7 +3168,6 @@ fn test_linux(target: &str) {
3168
3168
"netinet/ip.h" ,
3169
3169
"netinet/tcp.h" ,
3170
3170
"netinet/udp.h" ,
3171
- "netpacket/packet.h" ,
3172
3171
"poll.h" ,
3173
3172
"pthread.h" ,
3174
3173
"pty.h" ,
@@ -3267,6 +3266,7 @@ fn test_linux(target: &str) {
3267
3266
"linux/if_addr.h" ,
3268
3267
"linux/if_alg.h" ,
3269
3268
"linux/if_ether.h" ,
3269
+ "linux/if_packet.h" ,
3270
3270
"linux/if_tun.h" ,
3271
3271
"linux/input.h" ,
3272
3272
"linux/ipv6.h" ,
@@ -3409,6 +3409,42 @@ fn test_linux(target: &str) {
3409
3409
if sparc64 && ( ty == "uinput_ff_erase" || ty == "uinput_abs_setup" ) {
3410
3410
return true ;
3411
3411
}
3412
+
3413
+ // FIXME: sparc64 and musl CI images are big endian, which doesn't play well with structs that are not multiples of 32 or 64 bits
3414
+ if ( musl || sparc64) && ty == "sockaddr_pkt" {
3415
+ return true ;
3416
+ }
3417
+
3418
+ // FIXME: sparc64 is 64-bit big endian, which doesn't play well with structs that are not multiples of 64 bits
3419
+ if sparc64 && ty == "tpacket_auxdata" {
3420
+ return true ;
3421
+ }
3422
+
3423
+ // FIXME: sparc64 is 64-bit big endian, which doesn't play well with structs that are not multiples of 64 bits
3424
+ if sparc64 && ty == "tpacket_hdr_variant1" {
3425
+ return true ;
3426
+ }
3427
+
3428
+ // FIXME: sparc64 is 64-bit big endian, which doesn't play well with structs that are not multiples of 64 bits
3429
+ if sparc64 && ty == "tpacket_req3" {
3430
+ return true ;
3431
+ }
3432
+
3433
+ // FIXME: sparc64 is 64-bit big endian, which doesn't play well with structs that are not multiples of 64 bits
3434
+ if sparc64 && ty == "tpacket_stats_v3" {
3435
+ return true ;
3436
+ }
3437
+
3438
+ // FIXME: sparc64 is 64-bit big endian, which doesn't play well with structs that are not multiples of 64 bits
3439
+ if sparc64 && ty == "tpacket_req_u" {
3440
+ return true ;
3441
+ }
3442
+
3443
+ // FIXME: sparc64 is 64-bit big endian, which doesn't play well with structs that are not multiples of 64 bits
3444
+ if sparc64 && ty == "tpacket3_hdr" {
3445
+ return true ;
3446
+ }
3447
+
3412
3448
// FIXME(https://github.com/rust-lang/libc/issues/1558): passing by
3413
3449
// value corrupts the value for reasons not understood.
3414
3450
if ( gnu && sparc64) && ( ty == "ip_mreqn" || ty == "hwtstamp_config" ) {
@@ -3427,6 +3463,9 @@ fn test_linux(target: &str) {
3427
3463
// FIXME: This is actually a union, not a struct
3428
3464
"sigval" => true ,
3429
3465
3466
+ // FIXME: remove these once musl/sparc64 CI versions are upgraded (currently not a recognized struct)
3467
+ "fanout_args" if musl || sparc64 => true ,
3468
+
3430
3469
// This type is tested in the `linux_termios.rs` file since there
3431
3470
// are header conflicts when including them with all the other
3432
3471
// structs.
@@ -3642,6 +3681,9 @@ fn test_linux(target: &str) {
3642
3681
// present in recent kernels only >= 5.19
3643
3682
"PR_SME_SET_VL" | "PR_SME_GET_VL" | "PR_SME_VL_LEN_MAX" | "PR_SME_SET_VL_INHERIT" | "PR_SME_SET_VL_ONE_EXEC" => true ,
3644
3683
3684
+ // FIXME: Alignment issues with tpacket3_hdr struct
3685
+ "TPACKET3_HDRLEN" if sparc64 => true ,
3686
+
3645
3687
// Added in Linux 5.14
3646
3688
"FUTEX_LOCK_PI2" => true ,
3647
3689
@@ -3901,6 +3943,10 @@ fn test_linux(target: &str) {
3901
3943
( struct_ == "sockaddr_vm" && field == "svm_zero" ) ||
3902
3944
// the `ifr_ifru` field is an anonymous union
3903
3945
( struct_ == "ifreq" && field == "ifr_ifru" ) ||
3946
+ // the `hdr_variant` field is an anonymous union
3947
+ ( struct_ == "tpacket3_hdr" && field == "hdr_variant" ) ||
3948
+ // the `ts_subsec` field is an anonymous union
3949
+ ( struct_ == "tpacket_bd_ts" && field == "ts_subsec" ) ||
3904
3950
// glibc uses a single array `uregs` instead of individual fields.
3905
3951
( struct_ == "user_regs" && arm)
3906
3952
} ) ;
0 commit comments