Skip to content

Commit 6409380

Browse files
committed
Fix m68k ioctl ABI generation
1 parent 17b327d commit 6409380

3 files changed

Lines changed: 102 additions & 40 deletions

File tree

gen/include/m68k-ioctl-abi.h

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#ifndef LINUX_RAW_SYS_M68K_IOCTL_ABI_H
2+
#define LINUX_RAW_SYS_M68K_IOCTL_ABI_H
3+
4+
#ifdef __m68k__
5+
#ifndef __ASSEMBLY__
6+
7+
/*
8+
* Linux m68k uses asm-generic/int-ll64.h, but GCC gives unsigned long long
9+
* 2-byte alignment while Clang's m68k target gives it 8-byte alignment. For
10+
* ioctl macro evaluation, define the UAPI integer typedefs with GCC-compatible
11+
* alignment before asm-generic/int-ll64.h is included.
12+
*/
13+
#ifndef _ASM_GENERIC_INT_LL64_H
14+
#define _ASM_GENERIC_INT_LL64_H
15+
16+
#include <asm/bitsperlong.h>
17+
18+
typedef __signed__ char __s8;
19+
typedef unsigned char __u8;
20+
21+
typedef __signed__ short __s16;
22+
typedef unsigned short __u16;
23+
24+
typedef __signed__ int __s32;
25+
typedef unsigned int __u32;
26+
27+
#ifdef __GNUC__
28+
__extension__ typedef __signed__ long long __s64 __attribute__((aligned(2)));
29+
__extension__ typedef unsigned long long __u64 __attribute__((aligned(2)));
30+
#else
31+
typedef __signed__ long long __s64 __attribute__((aligned(2)));
32+
typedef unsigned long long __u64 __attribute__((aligned(2)));
33+
#endif
34+
35+
#endif /* _ASM_GENERIC_INT_LL64_H */
36+
37+
#endif /* __ASSEMBLY__ */
38+
#endif /* __m68k__ */
39+
40+
#endif /* LINUX_RAW_SYS_M68K_IOCTL_ABI_H */

gen/src/main.rs

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -488,13 +488,13 @@ fn run_bindgen(
488488
// Two-pass: run bindgen with and without clang_macro_fallback to
489489
// identify which constants come from function-like macros.
490490
let without_path = format!("{}.no_fb", mod_rs);
491-
make_base_builder(linux_include, header_name, &clang_target)
491+
make_ioctl_builder(linux_include, header_name, &clang_target, rust_arch)
492492
.generate()
493493
.expect("generate ioctl bindings without fallback")
494494
.write_to_file(&without_path)
495495
.expect("write ioctl bindings without fallback");
496496

497-
make_base_builder(linux_include, header_name, &clang_target)
497+
make_ioctl_builder(linux_include, header_name, &clang_target, rust_arch)
498498
.clang_macro_fallback()
499499
.generate()
500500
.expect("generate ioctl bindings with fallback")
@@ -541,6 +541,28 @@ fn run_bindgen(
541541
.unwrap_or_else(|_| panic!("write_to_file for {}", mod_name));
542542
}
543543

544+
fn make_ioctl_builder(
545+
linux_include: &str,
546+
header_name: &str,
547+
clang_target: &str,
548+
rust_arch: &str,
549+
) -> bindgen::Builder {
550+
let mut builder = make_base_builder(linux_include, header_name, clang_target);
551+
552+
if rust_arch == "m68k" {
553+
// GCC's Linux m68k ABI aligns __u64/__s64 to 2 bytes unless the UAPI
554+
// uses explicit aligned types. Clang's m68k target reports 8-byte
555+
// alignment for unsigned long long, which overstates _IO*()
556+
// sizeof(struct ...) values. The ioctl module emits constants only
557+
// after filtering, so limit this compatibility shim to ioctl probing.
558+
builder = builder
559+
.clang_arg("-include")
560+
.clang_arg("include/m68k-ioctl-abi.h");
561+
}
562+
563+
builder
564+
}
565+
544566
/// Extract all `pub const` names from a generated .rs file.
545567
fn extract_const_names(path: &str) -> HashSet<String> {
546568
fs::read_to_string(path)

src/m68k/ioctl.rs

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ pub const ACRN_IOCTL_DESTROY_VM: u32 = 41489;
55
pub const ACRN_IOCTL_START_VM: u32 = 41490;
66
pub const ACRN_IOCTL_PAUSE_VM: u32 = 41491;
77
pub const ACRN_IOCTL_RESET_VM: u32 = 41493;
8-
pub const ACRN_IOCTL_SET_VCPU_REGS: u32 = 1093181974;
8+
pub const ACRN_IOCTL_SET_VCPU_REGS: u32 = 1092919830;
99
pub const ACRN_IOCTL_INJECT_MSI: u32 = 1074831907;
1010
pub const ACRN_IOCTL_VM_INTR_MONITOR: u32 = 1074045476;
1111
pub const ACRN_IOCTL_SET_IRQLINE: u32 = 1074307621;
@@ -56,8 +56,8 @@ pub const VIDIOC_G_PARM: u32 = 3234616853;
5656
pub const VIDIOC_S_PARM: u32 = 3234616854;
5757
pub const VIDIOC_G_STD: u32 = 2148029975;
5858
pub const VIDIOC_S_STD: u32 = 1074288152;
59-
pub const VIDIOC_ENUMSTD: u32 = 3225966105;
60-
pub const VIDIOC_ENUMINPUT: u32 = 3226490394;
59+
pub const VIDIOC_ENUMSTD: u32 = 3225441817;
60+
pub const VIDIOC_ENUMINPUT: u32 = 3226228250;
6161
pub const VIDIOC_G_CTRL: u32 = 3221771803;
6262
pub const VIDIOC_S_CTRL: u32 = 3221771804;
6363
pub const VIDIOC_G_TUNER: u32 = 3226752541;
@@ -105,7 +105,7 @@ pub const VIDIOC_DBG_G_REGISTER: u32 = 3224917584;
105105
pub const VIDIOC_S_HW_FREQ_SEEK: u32 = 1076909650;
106106
pub const VIDIOC_S_DV_TIMINGS: u32 = 3229898327;
107107
pub const VIDIOC_G_DV_TIMINGS: u32 = 3229898328;
108-
pub const VIDIOC_DQEVENT: u32 = 2155894361;
108+
pub const VIDIOC_DQEVENT: u32 = 2155370073;
109109
pub const VIDIOC_SUBSCRIBE_EVENT: u32 = 1075861082;
110110
pub const VIDIOC_UNSUBSCRIBE_EVENT: u32 = 1075861083;
111111
pub const VIDIOC_CREATE_BUFS: u32 = 3237500508;
@@ -325,7 +325,7 @@ pub const BLKSSZGET: u32 = 4712;
325325
pub const BLKBSZGET: u32 = 2147750512;
326326
pub const BLKBSZSET: u32 = 1074008689;
327327
pub const BLKGETSIZE64: u32 = 2147750514;
328-
pub const BLKTRACESETUP: u32 = 3225948787;
328+
pub const BLKTRACESETUP: u32 = 3225293427;
329329
pub const BLKTRACESTART: u32 = 4724;
330330
pub const BLKTRACESTOP: u32 = 4725;
331331
pub const BLKTRACETEARDOWN: u32 = 4726;
@@ -402,8 +402,8 @@ pub const BTRFS_IOC_BALANCE_CTL: u32 = 1074041889;
402402
pub const BTRFS_IOC_BALANCE_PROGRESS: u32 = 2214630434;
403403
pub const BTRFS_IOC_INO_PATHS: u32 = 3224933411;
404404
pub const BTRFS_IOC_LOGICAL_INO: u32 = 3224933412;
405-
pub const BTRFS_IOC_SET_RECEIVED_SUBVOL: u32 = 3234370597;
406-
pub const BTRFS_IOC_SEND: u32 = 1078498342;
405+
pub const BTRFS_IOC_SET_RECEIVED_SUBVOL: u32 = 3233846309;
406+
pub const BTRFS_IOC_SEND: u32 = 1078236198;
407407
pub const BTRFS_IOC_DEVICES_READY: u32 = 2415957031;
408408
pub const BTRFS_IOC_QUOTA_CTL: u32 = 3222311976;
409409
pub const BTRFS_IOC_QGROUP_ASSIGN: u32 = 1075352617;
@@ -415,14 +415,14 @@ pub const BTRFS_IOC_QUOTA_RESCAN_WAIT: u32 = 37934;
415415
pub const BTRFS_IOC_GET_FSLABEL: u32 = 2164298801;
416416
pub const BTRFS_IOC_SET_FSLABEL: u32 = 1090556978;
417417
pub const BTRFS_IOC_GET_DEV_STATS: u32 = 3288896564;
418-
pub const BTRFS_IOC_DEV_REPLACE: u32 = 3391657013;
418+
pub const BTRFS_IOC_DEV_REPLACE: u32 = 3391263797;
419419
pub const BTRFS_IOC_FILE_EXTENT_SAME: u32 = 3222836278;
420420
pub const BTRFS_IOC_GET_FEATURES: u32 = 2149094457;
421421
pub const BTRFS_IOC_SET_FEATURES: u32 = 1076925497;
422422
pub const BTRFS_IOC_GET_SUPPORTED_FEATURES: u32 = 2152240185;
423423
pub const BTRFS_IOC_RM_DEV_V2: u32 = 1342215226;
424424
pub const BTRFS_IOC_LOGICAL_INO_V2: u32 = 3224933435;
425-
pub const BTRFS_IOC_GET_SUBVOL_INFO: u32 = 2180551740;
425+
pub const BTRFS_IOC_GET_SUBVOL_INFO: u32 = 2179503164;
426426
pub const BTRFS_IOC_GET_SUBVOL_ROOTREF: u32 = 3489698877;
427427
pub const BTRFS_IOC_INO_LOOKUP_USER: u32 = 3489698878;
428428
pub const BTRFS_IOC_SNAP_DESTROY_V2: u32 = 1342215231;
@@ -533,7 +533,7 @@ pub const EXT4_IOC_SETVERSION_OLD: u32 = 1074034178;
533533
pub const EXT4_IOC_GETRSVSZ: u32 = 2147771909;
534534
pub const EXT4_IOC_SETRSVSZ: u32 = 1074030086;
535535
pub const EXT4_IOC_GROUP_EXTEND: u32 = 1074030087;
536-
pub const EXT4_IOC_GROUP_ADD: u32 = 1076389384;
536+
pub const EXT4_IOC_GROUP_ADD: u32 = 1076127240;
537537
pub const EXT4_IOC_MIGRATE: u32 = 26121;
538538
pub const EXT4_IOC_ALLOC_DA_BLKS: u32 = 26124;
539539
pub const EXT4_IOC_MOVE_EXT: u32 = 3223873039;
@@ -562,9 +562,9 @@ pub const F2FS_IOC_ABORT_ATOMIC_WRITE: u32 = 62725;
562562
pub const F2FS_IOC_GARBAGE_COLLECT: u32 = 1074066694;
563563
pub const F2FS_IOC_WRITE_CHECKPOINT: u32 = 62727;
564564
pub const F2FS_IOC_DEFRAGMENT: u32 = 3222336776;
565-
pub const F2FS_IOC_MOVE_RANGE: u32 = 3223385353;
565+
pub const F2FS_IOC_MOVE_RANGE: u32 = 3223123209;
566566
pub const F2FS_IOC_FLUSH_DEVICE: u32 = 1074328842;
567-
pub const F2FS_IOC_GARBAGE_COLLECT_RANGE: u32 = 1075377419;
567+
pub const F2FS_IOC_GARBAGE_COLLECT_RANGE: u32 = 1075115275;
568568
pub const F2FS_IOC_GET_FEATURES: u32 = 2147808524;
569569
pub const F2FS_IOC_SET_PIN_FILE: u32 = 1074066701;
570570
pub const F2FS_IOC_GET_PIN_FILE: u32 = 2147808526;
@@ -628,30 +628,30 @@ pub const FDWERRORGET: u32 = 2149057047;
628628
pub const FDRAWCMD: u32 = 600;
629629
pub const FDTWADDLE: u32 = 601;
630630
pub const FDEJECT: u32 = 602;
631-
pub const FW_CDEV_IOC_GET_INFO: u32 = 3223855872;
632-
pub const FW_CDEV_IOC_SEND_REQUEST: u32 = 1076372225;
631+
pub const FW_CDEV_IOC_GET_INFO: u32 = 3223593728;
632+
pub const FW_CDEV_IOC_SEND_REQUEST: u32 = 1076110081;
633633
pub const FW_CDEV_IOC_ALLOCATE: u32 = 3223331586;
634634
pub const FW_CDEV_IOC_DEALLOCATE: u32 = 1074012931;
635-
pub const FW_CDEV_IOC_SEND_RESPONSE: u32 = 1075323652;
635+
pub const FW_CDEV_IOC_SEND_RESPONSE: u32 = 1075061508;
636636
pub const FW_CDEV_IOC_INITIATE_BUS_RESET: u32 = 1074012933;
637637
pub const FW_CDEV_IOC_ADD_DESCRIPTOR: u32 = 3222807302;
638638
pub const FW_CDEV_IOC_REMOVE_DESCRIPTOR: u32 = 1074012935;
639-
pub const FW_CDEV_IOC_CREATE_ISO_CONTEXT: u32 = 3223331592;
639+
pub const FW_CDEV_IOC_CREATE_ISO_CONTEXT: u32 = 3223069448;
640640
pub const FW_CDEV_IOC_QUEUE_ISO: u32 = 3222807305;
641641
pub const FW_CDEV_IOC_START_ISO: u32 = 1074799370;
642642
pub const FW_CDEV_IOC_STOP_ISO: u32 = 1074012939;
643-
pub const FW_CDEV_IOC_GET_CYCLE_TIMER: u32 = 2148541196;
643+
pub const FW_CDEV_IOC_GET_CYCLE_TIMER: u32 = 2148279052;
644644
pub const FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE: u32 = 3222807309;
645645
pub const FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE: u32 = 1074012942;
646646
pub const FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE: u32 = 1075323663;
647647
pub const FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE_ONCE: u32 = 1075323664;
648648
pub const FW_CDEV_IOC_GET_SPEED: u32 = 8977;
649-
pub const FW_CDEV_IOC_SEND_BROADCAST_REQUEST: u32 = 1076372242;
649+
pub const FW_CDEV_IOC_SEND_BROADCAST_REQUEST: u32 = 1076110098;
650650
pub const FW_CDEV_IOC_SEND_STREAM_PACKET: u32 = 1076372243;
651-
pub const FW_CDEV_IOC_GET_CYCLE_TIMER2: u32 = 3222807316;
652-
pub const FW_CDEV_IOC_SEND_PHY_PACKET: u32 = 3222807317;
651+
pub const FW_CDEV_IOC_GET_CYCLE_TIMER2: u32 = 3222545172;
652+
pub const FW_CDEV_IOC_SEND_PHY_PACKET: u32 = 3222545173;
653653
pub const FW_CDEV_IOC_RECEIVE_PHY_PACKETS: u32 = 1074275094;
654-
pub const FW_CDEV_IOC_SET_ISO_CHANNELS: u32 = 1074799383;
654+
pub const FW_CDEV_IOC_SET_ISO_CHANNELS: u32 = 1074537239;
655655
pub const FW_CDEV_IOC_FLUSH_ISO: u32 = 1074012952;
656656
pub const DFL_FPGA_GET_API_VERSION: u32 = 46592;
657657
pub const DFL_FPGA_CHECK_EXTENSION: u32 = 46593;
@@ -670,8 +670,8 @@ pub const DFL_FPGA_FME_PORT_ASSIGN: u32 = 1074050690;
670670
pub const DFL_FPGA_FME_ERR_GET_IRQ_NUM: u32 = 2147792515;
671671
pub const DFL_FPGA_FME_ERR_SET_IRQ: u32 = 1074312836;
672672
pub const FSI_SCOM_CHECK: u32 = 2147775232;
673-
pub const FSI_SCOM_READ: u32 = 3223352065;
674-
pub const FSI_SCOM_WRITE: u32 = 3223352066;
673+
pub const FSI_SCOM_READ: u32 = 3223220993;
674+
pub const FSI_SCOM_WRITE: u32 = 3223220994;
675675
pub const FSI_SCOM_RESET: u32 = 1074033411;
676676
pub const FSI_SBEFIFO_CMD_TIMEOUT_SECONDS: u32 = 1074033409;
677677
pub const FSI_SBEFIFO_READ_TIMEOUT_SECONDS: u32 = 1074033408;
@@ -1020,7 +1020,7 @@ pub const NS_MNT_GET_NEXT: u32 = 2148579083;
10201020
pub const NS_MNT_GET_PREV: u32 = 2148579084;
10211021
pub const NVME_IOCTL_ID: u32 = 20032;
10221022
pub const NVME_IOCTL_ADMIN_CMD: u32 = 3225964097;
1023-
pub const NVME_IOCTL_SUBMIT_IO: u32 = 1076907586;
1023+
pub const NVME_IOCTL_SUBMIT_IO: u32 = 1076645442;
10241024
pub const NVME_IOCTL_IO_CMD: u32 = 3225964099;
10251025
pub const NVME_IOCTL_RESET: u32 = 20036;
10261026
pub const NVME_IOCTL_SUBSYS_RESET: u32 = 20037;
@@ -1258,18 +1258,18 @@ pub const SCIF_LISTEN: u32 = 1074033410;
12581258
pub const SCIF_CONNECT: u32 = 3221779203;
12591259
pub const SCIF_ACCEPTREQ: u32 = 3222303492;
12601260
pub const SCIF_ACCEPTREG: u32 = 3221779205;
1261-
pub const SCIF_SEND: u32 = 3222827782;
1262-
pub const SCIF_RECV: u32 = 3222827783;
1261+
pub const SCIF_SEND: u32 = 3222565638;
1262+
pub const SCIF_RECV: u32 = 3222565639;
12631263
pub const SCIF_REG: u32 = 3223876360;
12641264
pub const SCIF_UNREG: u32 = 3222303497;
1265-
pub const SCIF_READFROM: u32 = 3223876362;
1266-
pub const SCIF_WRITETO: u32 = 3223876363;
1267-
pub const SCIF_VREADFROM: u32 = 3223876364;
1268-
pub const SCIF_VWRITETO: u32 = 3223876365;
1269-
pub const SCIF_GET_NODEIDS: u32 = 3222827790;
1270-
pub const SCIF_FENCE_MARK: u32 = 3222303503;
1265+
pub const SCIF_READFROM: u32 = 3223614218;
1266+
pub const SCIF_WRITETO: u32 = 3223614219;
1267+
pub const SCIF_VREADFROM: u32 = 3223614220;
1268+
pub const SCIF_VWRITETO: u32 = 3223614221;
1269+
pub const SCIF_GET_NODEIDS: u32 = 3222565646;
1270+
pub const SCIF_FENCE_MARK: u32 = 3222041359;
12711271
pub const SCIF_FENCE_WAIT: u32 = 3221517072;
1272-
pub const SCIF_FENCE_SIGNAL: u32 = 3223876369;
1272+
pub const SCIF_FENCE_SIGNAL: u32 = 3223614225;
12731273
pub const IOC_OPAL_SAVE: u32 = 1092120796;
12741274
pub const IOC_OPAL_LOCK_UNLOCK: u32 = 1092120797;
12751275
pub const IOC_OPAL_TAKE_OWNERSHIP: u32 = 1091072222;
@@ -1288,7 +1288,7 @@ pub const IOC_OPAL_WRITE_SHADOW_MBR: u32 = 1092645098;
12881288
pub const IOC_OPAL_GENERIC_TABLE_RW: u32 = 1094217963;
12891289
pub const IOC_OPAL_GET_STATUS: u32 = 2148036844;
12901290
pub const IOC_OPAL_GET_LR_STATUS: u32 = 1093693677;
1291-
pub const IOC_OPAL_GET_GEOMETRY: u32 = 2149609710;
1291+
pub const IOC_OPAL_GET_GEOMETRY: u32 = 2149216494;
12921292
pub const IOC_OPAL_DISCOVERY: u32 = 1074819311;
12931293
pub const IOC_OPAL_REVERT_LSP: u32 = 1091596528;
12941294
pub const IOC_OPAL_SET_SID_PW: u32 = 1109422321;
@@ -1332,7 +1332,7 @@ pub const SNAPSHOT_AVAIL_SWAP_SIZE: u32 = 2148021011;
13321332
pub const SNAPSHOT_ALLOC_SWAP_PAGE: u32 = 2148021012;
13331333
pub const SWITCHTEC_IOCTL_FLASH_INFO: u32 = 2148554560;
13341334
pub const SWITCHTEC_IOCTL_FLASH_PART_INFO: u32 = 3222296385;
1335-
pub const SWITCHTEC_IOCTL_EVENT_SUMMARY: u32 = 2228770626;
1335+
pub const SWITCHTEC_IOCTL_EVENT_SUMMARY: u32 = 2228508482;
13361336
pub const SWITCHTEC_IOCTL_EVENT_SUMMARY_LEGACY: u32 = 2174244674;
13371337
pub const SWITCHTEC_IOCTL_EVENT_CTL: u32 = 3223869251;
13381338
pub const SWITCHTEC_IOCTL_PFF_TO_PORT: u32 = 3222034244;
@@ -1537,7 +1537,7 @@ pub const VIDIOC_SUBDEV_G_CLIENT_CAP: u32 = 2148030053;
15371537
pub const VIDIOC_SUBDEV_S_CLIENT_CAP: u32 = 3221771878;
15381538
pub const VIDIOC_SUBDEV_G_STD: u32 = 2148029975;
15391539
pub const VIDIOC_SUBDEV_S_STD: u32 = 1074288152;
1540-
pub const VIDIOC_SUBDEV_ENUMSTD: u32 = 3225966105;
1540+
pub const VIDIOC_SUBDEV_ENUMSTD: u32 = 3225441817;
15411541
pub const VIDIOC_SUBDEV_G_EDID: u32 = 3223606824;
15421542
pub const VIDIOC_SUBDEV_S_EDID: u32 = 3223606825;
15431543
pub const VIDIOC_SUBDEV_QUERYSTD: u32 = 2148030015;
@@ -1561,12 +1561,12 @@ pub const VDUSE_GET_API_VERSION: u32 = 2148040960;
15611561
pub const VDUSE_SET_API_VERSION: u32 = 1074299137;
15621562
pub const VDUSE_CREATE_DEV: u32 = 1095794946;
15631563
pub const VDUSE_DESTROY_DEV: u32 = 1090552067;
1564-
pub const VDUSE_IOTLB_GET_FD: u32 = 3223355664;
1564+
pub const VDUSE_IOTLB_GET_FD: u32 = 3222962448;
15651565
pub const VDUSE_DEV_GET_FEATURES: u32 = 2148040977;
15661566
pub const VDUSE_DEV_SET_CONFIG: u32 = 1074299154;
15671567
pub const VDUSE_DEV_INJECT_CONFIG_IRQ: u32 = 33043;
15681568
pub const VDUSE_VQ_SETUP: u32 = 1075872020;
1569-
pub const VDUSE_VQ_GET_INFO: u32 = 3224404245;
1569+
pub const VDUSE_VQ_GET_INFO: u32 = 3224011029;
15701570
pub const VDUSE_VQ_SETUP_KICKFD: u32 = 1074299158;
15711571
pub const VDUSE_VQ_INJECT_IRQ: u32 = 1074037015;
15721572
pub const VDUSE_IOTLB_REG_UMEM: u32 = 1076920600;

0 commit comments

Comments
 (0)