From: "H. Peter Anvin" <hpa@zytor.com>
To: Mike Frysinger <vapier@gentoo.org>
Cc: Netdev List <netdev@vger.kernel.org>, klibc list <klibc@zytor.com>
Subject: Re: [klibc] [patch] import socket defines
Date: Wed, 02 Jan 2008 10:09:56 -0800 [thread overview]
Message-ID: <477BD374.6060506@zytor.com> (raw)
In-Reply-To: <200801020830.43449.vapier@gentoo.org>
[-- Attachment #1: Type: text/plain, Size: 912 bytes --]
Mike Frysinger wrote:
> On Tuesday 01 January 2008, H. Peter Anvin wrote:
>> Mike Frysinger wrote:
>>> The kernel __GLIBC__ hacks were re-added so as to appease klibc people,
>>> but the klibc people didnt actually fix the problem on their side. This
>>> patch imports the structures/defines that klibc seems to need. Build
>>> tested on x86_64 (i dont actually use klibc so no idea how to test it).
>> The whole point was to NOT need to replicate all these structures and
>> constants, which are part of the ABI, in klibc...
>
> then figure out a way that doesnt make the kernel headers blow for everyone
> else out there. change the __GLIBC__ crap to __KLIBC__ or something.
Seems the most logical thing to do would be to break out the small
portion that everyone wants into <linux/sockaddr.h> or somesuch, and
then remove those ifdefs entirely.
Proposed patch (still being tested) attached...
-hpa
[-- Attachment #2: 0001-linux-socket.h-break-out-glibc-portions-into-l.patch --]
[-- Type: text/x-patch, Size: 3780 bytes --]
>From 727c56ac213bdaedb9247c442375a5979686acf5 Mon Sep 17 00:00:00 2001
From: H. Peter Anvin <hpa@zytor.com>
Date: Wed, 2 Jan 2008 10:08:16 -0800
Subject: [PATCH] <linux/socket.h>: break out "glibc" portions into <linux/sockaddr.h>
Some userspaces (e.g. klibc) want to be able to use the full set of
ABI constants in <linux/socket.h>, others (e.g. glibc) do not, and
rather want just the bare minimum to build a kernel-valid
sockaddr... but apparently they want that much. This is currently
keyed on the existence of __GLIBC__, which is clearly wrong.
This patch breaks out the "bare minimum" into <linux/sockaddr.h> for
the userspaces who want to do it themselves, and eliminates the
ifdefs completely.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
---
include/linux/Kbuild | 1 +
include/linux/sockaddr.h | 19 +++++++++++++++++++
include/linux/socket.h | 21 ++-------------------
3 files changed, 22 insertions(+), 19 deletions(-)
create mode 100644 include/linux/sockaddr.h
diff --git a/include/linux/Kbuild b/include/linux/Kbuild
index f30fa92..f8bbb31 100644
--- a/include/linux/Kbuild
+++ b/include/linux/Kbuild
@@ -139,6 +139,7 @@ header-y += rose.h
header-y += serial_reg.h
header-y += smbno.h
header-y += snmp.h
+header-y += sockaddr.h
header-y += sockios.h
header-y += som.h
header-y += sound.h
diff --git a/include/linux/sockaddr.h b/include/linux/sockaddr.h
new file mode 100644
index 0000000..f182083
--- /dev/null
+++ b/include/linux/sockaddr.h
@@ -0,0 +1,19 @@
+#ifndef _KERNEL_SOCKADDR_H
+#define _KERNEL_SOCKADDR_H
+
+/*
+ * Desired design of maximum size and alignment (see RFC2553)
+ */
+#define _K_SS_MAXSIZE 128 /* Implementation specific max size */
+#define _K_SS_ALIGNSIZE (__alignof__ (struct sockaddr *))
+ /* Implementation specific desired alignment */
+
+struct __kernel_sockaddr_storage {
+ unsigned short ss_family; /* address family */
+ /* Following field(s) are implementation specific */
+ char __data[_K_SS_MAXSIZE - sizeof(unsigned short)];
+ /* space to achieve desired size, */
+ /* _SS_MAXSIZE value minus size of ss_family */
+} __attribute__ ((aligned(_K_SS_ALIGNSIZE))); /* force desired alignment */
+
+#endif /* _KERNEL_SOCKADDR_H */
diff --git a/include/linux/socket.h b/include/linux/socket.h
index c22ef1c..9cd6edc 100644
--- a/include/linux/socket.h
+++ b/include/linux/socket.h
@@ -1,23 +1,7 @@
#ifndef _LINUX_SOCKET_H
#define _LINUX_SOCKET_H
-/*
- * Desired design of maximum size and alignment (see RFC2553)
- */
-#define _K_SS_MAXSIZE 128 /* Implementation specific max size */
-#define _K_SS_ALIGNSIZE (__alignof__ (struct sockaddr *))
- /* Implementation specific desired alignment */
-
-struct __kernel_sockaddr_storage {
- unsigned short ss_family; /* address family */
- /* Following field(s) are implementation specific */
- char __data[_K_SS_MAXSIZE - sizeof(unsigned short)];
- /* space to achieve desired size, */
- /* _SS_MAXSIZE value minus size of ss_family */
-} __attribute__ ((aligned(_K_SS_ALIGNSIZE))); /* force desired alignment */
-
-#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2)
-
+#include <linux/sockaddr.h>
#include <asm/socket.h> /* arch-dependent defines */
#include <linux/sockios.h> /* the SIOCxxx I/O controls */
#include <linux/uio.h> /* iovec support */
@@ -310,7 +294,6 @@ extern int memcpy_toiovec(struct iovec *v, unsigned char *kdata, int len);
extern int move_addr_to_user(void *kaddr, int klen, void __user *uaddr, int __user *ulen);
extern int move_addr_to_kernel(void __user *uaddr, int ulen, void *kaddr);
extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data);
+#endif /* __KERNEL__ */
-#endif
-#endif /* not kernel and not glibc */
#endif /* _LINUX_SOCKET_H */
--
1.5.3.6
next parent reply other threads:[~2008-01-02 18:10 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <200801012029.21432.vapier@gentoo.org>
[not found] ` <477AF86E.1080309@zytor.com>
[not found] ` <200801020830.43449.vapier@gentoo.org>
2008-01-02 18:09 ` H. Peter Anvin [this message]
2008-01-11 6:16 ` [klibc] [patch] import socket defines David Miller
2008-01-11 6:23 ` Mike Frysinger
2008-01-11 6:41 ` H. Peter Anvin
2008-01-11 6:47 ` David Miller
2008-01-11 7:02 ` H. Peter Anvin
2008-01-11 7:07 ` Mike Frysinger
2008-01-11 7:10 ` H. Peter Anvin
2008-01-11 7:42 ` H. Peter Anvin
2008-01-11 7:57 ` Mike Frysinger
2008-01-11 8:00 ` H. Peter Anvin
2008-01-11 9:02 ` Mike Frysinger
2008-01-11 9:28 ` Mike Frysinger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=477BD374.6060506@zytor.com \
--to=hpa@zytor.com \
--cc=klibc@zytor.com \
--cc=netdev@vger.kernel.org \
--cc=vapier@gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.