From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31200 invoked by alias); 4 Nov 2013 08:19:37 -0000 Mailing-List: contact libc-ports-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: libc-ports-owner@sourceware.org Received: (qmail 31189 invoked by uid 89); 4 Nov 2013 08:19:37 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.5 required=5.0 tests=AWL,BAYES_50,FREEMAIL_FROM,RDNS_NONE,SPF_PASS,URIBL_BLOCKED autolearn=no version=3.3.2 X-HELO: mail-wi0-f170.google.com Received: from Unknown (HELO mail-wi0-f170.google.com) (209.85.212.170) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Mon, 04 Nov 2013 08:19:35 +0000 Received: by mail-wi0-f170.google.com with SMTP id ex4so1561122wid.5 for ; Mon, 04 Nov 2013 00:19:26 -0800 (PST) MIME-Version: 1.0 X-Received: by 10.180.73.109 with SMTP id k13mr11018379wiv.35.1383553166544; Mon, 04 Nov 2013 00:19:26 -0800 (PST) Received: by 10.217.119.193 with HTTP; Mon, 4 Nov 2013 00:19:26 -0800 (PST) In-Reply-To: <52774A2F.5010505@codesourcery.com> References: <52774A2F.5010505@codesourcery.com> Date: Mon, 04 Nov 2013 08:19:00 -0000 Message-ID: Subject: Re: struct statfs/statfs64 in linux-generic From: Andrew Pinski To: Chung-Lin Tang Cc: "libc-ports@sourceware.org" , Chris Metcalf Content-Type: multipart/mixed; boundary=f46d043891d9052f5304ea55934b X-IsSubscribed: yes X-SW-Source: 2013-11/txt/msg00002.txt.bz2 --f46d043891d9052f5304ea55934b Content-Type: text/plain; charset=UTF-8 Content-length: 3993 On Sun, Nov 3, 2013 at 11:18 PM, Chung-Lin Tang wrote: > Hi, > > I'm currently working on the glibc port for Altera Nios II, and per the > kernel upstreaming requirements, we're making it a user of linux-generic > in glibc. > > I've come across an issue about struct statfs/statfs64, where I've > listed the struct definitions in both glibc and the kernel below. > > In linux-generic, both struct statfs/statfs64 has some fields as 64-bit > words, padded properly if need on 32-bit targets. Effectively, they have > to be same-format, to pass to the statfs64 syscall uniformly. > > __SWORD_TYPE appears to be int/long on 32/64-bit targets. This means > that for 32-bit targets, struct statfs[64] will be made of 32-bit words, > with a few 64-bit fields embedded in the middle. > > > In the kernel however, the fields of importance in struct statfs is made > up of entirely '__statfs_word', defined to be 64-bit or 32-bit depending > on target (putting aside signedness for now). > > Notice how that, while this does work for 64-bit targets, 32-bit targets > cannot properly define a compatible struct statfs[64], at least not with > simple typedefs. > > Chris, as you seem the original developer/maintainer of linux-generic > and the tile ports (as I observed from the mail archives), I'm curious > if you saw any similar problems with tilegx -m32? The only users of > linux-generic appears to be only aarch64 and tile, and nios2 will be > another 32-bit user. > > The exact FAIL I saw was posix/tst-getconf, which I traced to a failed > statfs64 call in pathconf(), due to a failed sizeof(struct statfs64) > check inside the kernel syscall code. Yes I ran into this same issue when I was working on ILP32 for AARCH64. Attached is the patch which I used. Thanks, Andrew Pinski > > Thanks, > Chung-Lin > > > In glibc, ports/sysdeps/unix/sysv/linux/generic/bits/statfs.h: > struct statfs > { > __SWORD_TYPE f_type; > __SWORD_TYPE f_bsize; > __field64(__fsblkcnt_t, __fsblkcnt64_t, f_blocks); > __field64(__fsblkcnt_t, __fsblkcnt64_t, f_bfree); > __field64(__fsblkcnt_t, __fsblkcnt64_t, f_bavail); > __field64(__fsfilcnt_t, __fsfilcnt64_t, f_files); > __field64(__fsfilcnt_t, __fsfilcnt64_t, f_ffree); > __fsid_t f_fsid; > __SWORD_TYPE f_namelen; > __SWORD_TYPE f_frsize; > __SWORD_TYPE f_flags; > __SWORD_TYPE f_spare[4]; > } __attribute__((__aligned__(8))); > > #ifdef __USE_LARGEFILE64 > struct statfs64 > { > __SWORD_TYPE f_type; > __SWORD_TYPE f_bsize; > __fsblkcnt64_t f_blocks; > __fsblkcnt64_t f_bfree; > __fsblkcnt64_t f_bavail; > __fsfilcnt64_t f_files; > __fsfilcnt64_t f_ffree; > __fsid_t f_fsid; > __SWORD_TYPE f_namelen; > __SWORD_TYPE f_frsize; > __SWORD_TYPE f_flags; > __SWORD_TYPE f_spare[4]; > } __attribute__((__aligned__(8))); > #endif > > > In Linux kernel, include/uapi/asm-generic/statfs.h: > > #ifndef __statfs_word > #if __BITS_PER_LONG == 64 > #define __statfs_word long > #else > #define __statfs_word __u32 > #endif > #endif > > struct statfs { > __statfs_word f_type; > __statfs_word f_bsize; > __statfs_word f_blocks; > __statfs_word f_bfree; > __statfs_word f_bavail; > __statfs_word f_files; > __statfs_word f_ffree; > __kernel_fsid_t f_fsid; > __statfs_word f_namelen; > __statfs_word f_frsize; > __statfs_word f_flags; > __statfs_word f_spare[4]; > }; > > #ifndef ARCH_PACK_STATFS64 > #define ARCH_PACK_STATFS64 > #endif > > struct statfs64 { > __statfs_word f_type; > __statfs_word f_bsize; > __u64 f_blocks; > __u64 f_bfree; > __u64 f_bavail; > __u64 f_files; > __u64 f_ffree; > __kernel_fsid_t f_fsid; > __statfs_word f_namelen; > __statfs_word f_frsize; > __statfs_word f_flags; > __statfs_word f_spare[4]; > } ARCH_PACK_STATFS64; --f46d043891d9052f5304ea55934b Content-Type: text/plain; charset=US-ASCII; name="fixstatfs.diff.txt" Content-Disposition: attachment; filename="fixstatfs.diff.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hnlft0650 Content-length: 4401 Y29tbWl0IDgyYzFlOWJkNWUxMDVkZTdhOTdkMjlmMDcxNDhkYTgxYTAzNDlk M2UKQXV0aG9yOiBBbmRyZXcgUGluc2tpIDxhcGluc2tpQGNhdml1bS5jb20+ CkRhdGU6ICAgU3VuIEF1ZyAxMSAxMzoxNjowMiAyMDEzIC0wNzAwCgogICAg MjAxMy0wOC0xMSAgQW5kcmV3IFBpbnNraSAgPGFwaW5za2lAY2F2aXVtLmNv bT4KICAgIAogICAgCSogcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgv YWFyY2g2NC9iaXRzL3R5cGVzaXplcy5oIChfX0ZTV09SRF9UX1RZUEUpOiBD aGFuZ2UgdG8KICAgIAliZSBfX1NZU0NBTExfU0xPTkdfVFlQRS4KICAgIAkq IHBvcnRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2dlbmVyaWMvYml0cy9z dGF0ZnMuaCAoc3RhdGZzKTogVXBkYXRlIHRvIHVzZSBfX2Zzd29yZF90Lgog ICAgCShzdGF0ZnM2NCk6IExpa2V3aXNlLgoKZGlmZiAtLWdpdCBhL0NoYW5n ZUxvZy5hYXJjaDY0IGIvQ2hhbmdlTG9nLmFhcmNoNjQKaW5kZXggOTIwZmIw Zi4uYmM0NGEyYSAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nLmFhcmNoNjQKKysr IGIvQ2hhbmdlTG9nLmFhcmNoNjQKQEAgLTEsMyArMSwxMCBAQAorMjAxMy0w OC0xMSAgQW5kcmV3IFBpbnNraSAgPGFwaW5za2lAY2F2aXVtLmNvbT4KKwor CSogcG9ydHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYWFyY2g2NC9iaXRz L3R5cGVzaXplcy5oIChfX0ZTV09SRF9UX1RZUEUpOiBDaGFuZ2UgdG8KKwli ZSBfX1NZU0NBTExfU0xPTkdfVFlQRS4KKwkqIHBvcnRzL3N5c2RlcHMvdW5p eC9zeXN2L2xpbnV4L2dlbmVyaWMvYml0cy9zdGF0ZnMuaCAoc3RhdGZzKTog VXBkYXRlIHRvIHVzZSBfX2Zzd29yZF90LgorCShzdGF0ZnM2NCk6IExpa2V3 aXNlLgorCiAyMDEzLTA4LTEwICBBbmRyZXcgUGluc2tpICA8YXBpbnNraUBj YXZpdW0uY29tPgogCiAJKiBwb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51 eC9hYXJjaDY0L2JpdHMvdHlwZXNpemVzLmggKF9fVElNRV9UXzY0X0JJVFMp OiBOZXcgZGVmaW5lLgpkaWZmIC0tZ2l0IGEvcG9ydHMvc3lzZGVwcy91bml4 L3N5c3YvbGludXgvYWFyY2g2NC9iaXRzL3R5cGVzaXplcy5oIGIvcG9ydHMv c3lzZGVwcy91bml4L3N5c3YvbGludXgvYWFyY2g2NC9iaXRzL3R5cGVzaXpl cy5oCmluZGV4IDc0NTc2YWIuLmYzYTUxZTggMTAwNjQ0Ci0tLSBhL3BvcnRz L3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FhcmNoNjQvYml0cy90eXBlc2l6 ZXMuaAorKysgYi9wb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hYXJj aDY0L2JpdHMvdHlwZXNpemVzLmgKQEAgLTUzLDcgKzUzLDcgQEAKICNkZWZp bmUJX19GU0JMS0NOVDY0X1RfVFlQRQlfX1VRVUFEX1RZUEUKICNkZWZpbmUJ X19GU0ZJTENOVF9UX1RZUEUJX19VTE9OR1dPUkRfVFlQRQogI2RlZmluZQlf X0ZTRklMQ05UNjRfVF9UWVBFCV9fVVFVQURfVFlQRQotI2RlZmluZQlfX0ZT V09SRF9UX1RZUEUJCV9fU1dPUkRfVFlQRQorI2RlZmluZQlfX0ZTV09SRF9U X1RZUEUJCV9fU1lTQ0FMTF9TTE9OR19UWVBFCiAjZGVmaW5lCV9fSURfVF9U WVBFCQlfX1UzMl9UWVBFCiAjZGVmaW5lIF9fQ0xPQ0tfVF9UWVBFCQlfX1NZ U0NBTExfU0xPTkdfVFlQRQogI2RlZmluZSBfX1RJTUVfVF9UWVBFCQlfX1NZ U0NBTExfU0xPTkdfVFlQRQpkaWZmIC0tZ2l0IGEvcG9ydHMvc3lzZGVwcy91 bml4L3N5c3YvbGludXgvZ2VuZXJpYy9iaXRzL3N0YXRmcy5oIGIvcG9ydHMv c3lzZGVwcy91bml4L3N5c3YvbGludXgvZ2VuZXJpYy9iaXRzL3N0YXRmcy5o CmluZGV4IGJmNDc5ZTguLmFmYWRiZjEgMTAwNjQ0Ci0tLSBhL3BvcnRzL3N5 c2RlcHMvdW5peC9zeXN2L2xpbnV4L2dlbmVyaWMvYml0cy9zdGF0ZnMuaAor KysgYi9wb3J0cy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9nZW5lcmljL2Jp dHMvc3RhdGZzLmgKQEAgLTQ2LDE4ICs0NiwxOCBAQAogCiBzdHJ1Y3Qgc3Rh dGZzCiAgIHsKLSAgICBfX1NXT1JEX1RZUEUgZl90eXBlOwotICAgIF9fU1dP UkRfVFlQRSBmX2JzaXplOworICAgIF9fZnN3b3JkX3QgZl90eXBlOworICAg IF9fZnN3b3JkX3QgZl9ic2l6ZTsKICAgICBfX2ZpZWxkNjQoX19mc2Jsa2Nu dF90LCBfX2ZzYmxrY250NjRfdCwgZl9ibG9ja3MpOwogICAgIF9fZmllbGQ2 NChfX2ZzYmxrY250X3QsIF9fZnNibGtjbnQ2NF90LCBmX2JmcmVlKTsKICAg ICBfX2ZpZWxkNjQoX19mc2Jsa2NudF90LCBfX2ZzYmxrY250NjRfdCwgZl9i YXZhaWwpOwogICAgIF9fZmllbGQ2NChfX2ZzZmlsY250X3QsIF9fZnNmaWxj bnQ2NF90LCBmX2ZpbGVzKTsKICAgICBfX2ZpZWxkNjQoX19mc2ZpbGNudF90 LCBfX2ZzZmlsY250NjRfdCwgZl9mZnJlZSk7CiAgICAgX19mc2lkX3QgZl9m c2lkOwotICAgIF9fU1dPUkRfVFlQRSBmX25hbWVsZW47Ci0gICAgX19TV09S RF9UWVBFIGZfZnJzaXplOwotICAgIF9fU1dPUkRfVFlQRSBmX2ZsYWdzOwot ICAgIF9fU1dPUkRfVFlQRSBmX3NwYXJlWzRdOworICAgIF9fZnN3b3JkX3Qg Zl9uYW1lbGVuOworICAgIF9fZnN3b3JkX3QgZl9mcnNpemU7CisgICAgX19m c3dvcmRfdCBmX2ZsYWdzOworICAgIF9fZnN3b3JkX3QgZl9zcGFyZVs0XTsK ICAgfSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg4KSkpOwogCiAjdW5k ZWYgX19maWVsZDY0CkBAIC02NSwxOCArNjUsMTggQEAgc3RydWN0IHN0YXRm cwogI2lmZGVmIF9fVVNFX0xBUkdFRklMRTY0CiBzdHJ1Y3Qgc3RhdGZzNjQK ICAgewotICAgIF9fU1dPUkRfVFlQRSBmX3R5cGU7Ci0gICAgX19TV09SRF9U WVBFIGZfYnNpemU7CisgICAgX19mc3dvcmRfdCBmX3R5cGU7CisgICAgX19m c3dvcmRfdCBmX2JzaXplOwogICAgIF9fZnNibGtjbnQ2NF90IGZfYmxvY2tz OwogICAgIF9fZnNibGtjbnQ2NF90IGZfYmZyZWU7CiAgICAgX19mc2Jsa2Nu dDY0X3QgZl9iYXZhaWw7CiAgICAgX19mc2ZpbGNudDY0X3QgZl9maWxlczsK ICAgICBfX2ZzZmlsY250NjRfdCBmX2ZmcmVlOwogICAgIF9fZnNpZF90IGZf ZnNpZDsKLSAgICBfX1NXT1JEX1RZUEUgZl9uYW1lbGVuOwotICAgIF9fU1dP UkRfVFlQRSBmX2Zyc2l6ZTsKLSAgICBfX1NXT1JEX1RZUEUgZl9mbGFnczsK LSAgICBfX1NXT1JEX1RZUEUgZl9zcGFyZVs0XTsKKyAgICBfX2Zzd29yZF90 IGZfbmFtZWxlbjsKKyAgICBfX2Zzd29yZF90IGZfZnJzaXplOworICAgIF9f ZnN3b3JkX3QgZl9mbGFnczsKKyAgICBfX2Zzd29yZF90IGZfc3BhcmVbNF07 CiAgIH0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oOCkpKTsKICNlbmRp ZgogCg== --f46d043891d9052f5304ea55934b--