about summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux/m68k/bits
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2016-05-23 19:43:09 +0200
committerFlorian Weimer <fweimer@redhat.com>2016-05-23 19:43:09 +0200
commit3375cfafa7961c6ae0e509c31c3b3cef9ad1f03d (patch)
tree0c2ba750f8b7e15a6b826f9767fbb533bfb4f567 /sysdeps/unix/sysv/linux/m68k/bits
parentd912d3a1198dfa9acd59cb5a07e5ed27c910cb7f (diff)
downloadglibc-3375cfafa7961c6ae0e509c31c3b3cef9ad1f03d.tar.gz
glibc-3375cfafa7961c6ae0e509c31c3b3cef9ad1f03d.tar.xz
glibc-3375cfafa7961c6ae0e509c31c3b3cef9ad1f03d.zip
Make padding in struct sockaddr_storage explicit [BZ #20111]
This avoids aliasing issues with GCC 6 in -fno-strict-aliasing
mode.  (With implicit padding, not all data is copied.)

This change makes it explicit that struct sockaddr_storage is
only 126 bytes large on m68k (unlike elsewhere, where we end up
with the requested 128 bytes).  The new test case makes sure that
this does not happen on other architectures.
Diffstat (limited to 'sysdeps/unix/sysv/linux/m68k/bits')
-rw-r--r--sysdeps/unix/sysv/linux/m68k/bits/sockaddr.h42
1 files changed, 42 insertions, 0 deletions
diff --git a/sysdeps/unix/sysv/linux/m68k/bits/sockaddr.h b/sysdeps/unix/sysv/linux/m68k/bits/sockaddr.h
new file mode 100644
index 0000000000..5721f99fd9
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/m68k/bits/sockaddr.h
@@ -0,0 +1,42 @@
+/* Definition of struct sockaddr_* members and sizes, Linux/m68k version.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * Never include this file directly; use <sys/socket.h> instead.
+ */
+
+#ifndef _BITS_SOCKADDR_H
+#define _BITS_SOCKADDR_H	1
+
+
+/* POSIX.1g specifies this type name for the `sa_family' member.  */
+typedef unsigned short int sa_family_t;
+
+/* This macro is used to declare the initial common members
+   of the data types used for socket addresses, `struct sockaddr',
+   `struct sockaddr_in', `struct sockaddr_un', etc.  */
+
+#define	__SOCKADDR_COMMON(sa_prefix) \
+  sa_family_t sa_prefix##family
+
+#define __SOCKADDR_COMMON_SIZE	(sizeof (unsigned short int))
+
+/* Size of struct sockaddr_storage.  */
+#define _SS_SIZE 126
+
+#endif	/* bits/sockaddr.h */