Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 26 Jun 2017 02:25:19 +0000 (UTC)
From:      Justin Hibbits <jhibbits@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r320347 - in head: . share/man/man7 sys/compat/freebsd32 sys/net sys/powerpc/include sys/sys
Message-ID:  <201706260225.v5Q2PJCT046112@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jhibbits
Date: Mon Jun 26 02:25:19 2017
New Revision: 320347
URL: https://svnweb.freebsd.org/changeset/base/320347

Log:
  Solve the y2038 problem for powerpc
  
  AKA Make time_t 64 bits on powerpc(32).
  
  PowerPC currently (until now) was one of two architectures with a 32-bit time_t
  on 32-bit archs (the other being i386).  This is an ABI breakage, so all ports,
  and all local binaries, *must* be recompiled.
  
  Tested by:	andreast, others
  MFC after:	Never
  Relnotes:	Yes

Modified:
  head/UPDATING
  head/share/man/man7/arch.7
  head/sys/compat/freebsd32/freebsd32.h
  head/sys/compat/freebsd32/freebsd32_misc.c
  head/sys/net/bpf.c
  head/sys/powerpc/include/_types.h
  head/sys/powerpc/include/proc.h
  head/sys/sys/acct.h
  head/sys/sys/param.h

Modified: head/UPDATING
==============================================================================
--- head/UPDATING	Mon Jun 26 02:00:22 2017	(r320346)
+++ head/UPDATING	Mon Jun 26 02:25:19 2017	(r320347)
@@ -51,6 +51,15 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 12.x IS SLOW:
 
 ****************************** SPECIAL WARNING: ******************************
 
+20170625:
+	The FreeBSD/powerpc platform now uses a 64-bit type for time_t.  This is
+	a very major ABI incompatible change, so users of FreeBSD/powerpc must
+	be careful when performing source upgrades.  It is best to run
+	'make installworld' from an alternate root system, either a live
+	CD/memory stick, or a temporary root partition.  Additionally, all ports
+	must be recompiled.  powerpc64 is largely unaffected, except in the case
+	of 32-bit compatibility.  All 32-bit binaries will be affected.
+
 20170623:
 	Forward compatibility for the "ino64" project have been committed. This
 	will allow most new binaries to run on older kernels in a limited

Modified: head/share/man/man7/arch.7
==============================================================================
--- head/share/man/man7/arch.7	Mon Jun 26 02:00:22 2017	(r320346)
+++ head/share/man/man7/arch.7	Mon Jun 26 02:25:19 2017	(r320347)
@@ -203,8 +203,8 @@ Machine-dependent type sizes:
 .It mips64el    Ta 8 Ta  8 Ta 8
 .It mips64elhf  Ta 8 Ta  8 Ta 8
 .It mips64hf    Ta 8 Ta  8 Ta 8
-.It powerpc     Ta 4 Ta  8 Ta 4
-.It powerpcspe  Ta 4 Ta  8 Ta 4
+.It powerpc     Ta 4 Ta  8 Ta 8
+.It powerpcspe  Ta 4 Ta  8 Ta 8
 .It powerpc64   Ta 8 Ta  8 Ta 8
 .It riscv64     Ta 8 Ta 16 Ta 8
 .It riscv64sf   Ta 8 Ta 16 Ta 8

Modified: head/sys/compat/freebsd32/freebsd32.h
==============================================================================
--- head/sys/compat/freebsd32/freebsd32.h	Mon Jun 26 02:00:22 2017	(r320346)
+++ head/sys/compat/freebsd32/freebsd32.h	Mon Jun 26 02:25:19 2017	(r320347)
@@ -45,7 +45,7 @@
 /*
  * Being a newer port, 32-bit FreeBSD/MIPS uses 64-bit time_t.
  */
-#ifdef __mips__
+#if defined (__mips__) || defined(__powerpc__)
 typedef	int64_t	time32_t;
 #else
 typedef	int32_t	time32_t;

Modified: head/sys/compat/freebsd32/freebsd32_misc.c
==============================================================================
--- head/sys/compat/freebsd32/freebsd32_misc.c	Mon Jun 26 02:00:22 2017	(r320346)
+++ head/sys/compat/freebsd32/freebsd32_misc.c	Mon Jun 26 02:25:19 2017	(r320347)
@@ -109,13 +109,13 @@ __FBSDID("$FreeBSD$");
 
 FEATURE(compat_freebsd_32bit, "Compatible with 32-bit FreeBSD");
 
-#ifndef __mips__
+#if !defined(__mips__) && !defined(__powerpc__)
 CTASSERT(sizeof(struct timeval32) == 8);
 CTASSERT(sizeof(struct timespec32) == 8);
 CTASSERT(sizeof(struct itimerval32) == 16);
 #endif
 CTASSERT(sizeof(struct statfs32) == 256);
-#ifndef __mips__
+#if !defined(__mips__) && !defined(__powerpc__)
 CTASSERT(sizeof(struct rusage32) == 72);
 #endif
 CTASSERT(sizeof(struct sigaltstack32) == 12);
@@ -125,7 +125,7 @@ CTASSERT(sizeof(struct msghdr32) == 28);
 #ifdef __amd64__
 CTASSERT(sizeof(struct stat32) == 208);
 #endif
-#ifndef __mips__
+#if !defined(__mips__) && !defined(__powerpc__)
 CTASSERT(sizeof(struct freebsd11_stat32) == 96);
 #endif
 CTASSERT(sizeof(struct sigaction32) == 24);

Modified: head/sys/net/bpf.c
==============================================================================
--- head/sys/net/bpf.c	Mon Jun 26 02:00:22 2017	(r320346)
+++ head/sys/net/bpf.c	Mon Jun 26 02:25:19 2017	(r320347)
@@ -1283,7 +1283,7 @@ bpfioctl(struct cdev *dev, u_long cmd, caddr_t addr, i
 #endif
 		case BIOCGETIF:
 		case BIOCGRTIMEOUT:
-#if defined(COMPAT_FREEBSD32) && !defined(__mips__)
+#if defined(COMPAT_FREEBSD32) && !defined(__mips__) && !defined(__powerpc__)
 		case BIOCGRTIMEOUT32:
 #endif
 		case BIOCGSTATS:
@@ -1295,7 +1295,7 @@ bpfioctl(struct cdev *dev, u_long cmd, caddr_t addr, i
 		case FIONREAD:
 		case BIOCLOCK:
 		case BIOCSRTIMEOUT:
-#if defined(COMPAT_FREEBSD32) && !defined(__mips__)
+#if defined(COMPAT_FREEBSD32) && !defined(__mips__) && !defined(__powerpc__)
 		case BIOCSRTIMEOUT32:
 #endif
 		case BIOCIMMEDIATE:
@@ -1519,7 +1519,7 @@ bpfioctl(struct cdev *dev, u_long cmd, caddr_t addr, i
 	 * Set read timeout.
 	 */
 	case BIOCSRTIMEOUT:
-#if defined(COMPAT_FREEBSD32) && !defined(__mips__)
+#if defined(COMPAT_FREEBSD32) && !defined(__mips__) && !defined(__powerpc__)
 	case BIOCSRTIMEOUT32:
 #endif
 		{
@@ -1550,12 +1550,12 @@ bpfioctl(struct cdev *dev, u_long cmd, caddr_t addr, i
 	 * Get read timeout.
 	 */
 	case BIOCGRTIMEOUT:
-#if defined(COMPAT_FREEBSD32) && !defined(__mips__)
+#if defined(COMPAT_FREEBSD32) && !defined(__mips__) && !defined(__powerpc__)
 	case BIOCGRTIMEOUT32:
 #endif
 		{
 			struct timeval *tv;
-#if defined(COMPAT_FREEBSD32) && !defined(__mips__)
+#if defined(COMPAT_FREEBSD32) && !defined(__mips__) && !defined(__powerpc__)
 			struct timeval32 *tv32;
 			struct timeval tv64;
 
@@ -1567,7 +1567,7 @@ bpfioctl(struct cdev *dev, u_long cmd, caddr_t addr, i
 
 			tv->tv_sec = d->bd_rtout / hz;
 			tv->tv_usec = (d->bd_rtout % hz) * tick;
-#if defined(COMPAT_FREEBSD32) && !defined(__mips__)
+#if defined(COMPAT_FREEBSD32) && !defined(__mips__) && !defined(__powerpc__)
 			if (cmd == BIOCGRTIMEOUT32) {
 				tv32 = (struct timeval32 *)addr;
 				tv32->tv_sec = tv->tv_sec;

Modified: head/sys/powerpc/include/_types.h
==============================================================================
--- head/sys/powerpc/include/_types.h	Mon Jun 26 02:00:22 2017	(r320346)
+++ head/sys/powerpc/include/_types.h	Mon Jun 26 02:25:19 2017	(r320347)
@@ -98,16 +98,18 @@ typedef	__int64_t	__register_t;
 typedef	__int64_t	__segsz_t;		/* segment size (in pages) */
 typedef	__uint64_t	__size_t;		/* sizeof() */
 typedef	__int64_t	__ssize_t;		/* byte count or error */
-typedef	__int64_t	__time_t;		/* time()... */
-typedef	__uint64_t	__uintfptr_t;
-typedef	__uint64_t	__uintptr_t;
 #else
 typedef	__int32_t	__ptrdiff_t;		/* ptr1 - ptr2 */
 typedef	__int32_t	__register_t;
 typedef	__int32_t	__segsz_t;		/* segment size (in pages) */
 typedef	__uint32_t	__size_t;		/* sizeof() */
 typedef	__int32_t	__ssize_t;		/* byte count or error */
-typedef	__int32_t	__time_t;		/* time()... */
+#endif
+typedef	__int64_t	__time_t;		/* time()... */
+#ifdef __LP64__
+typedef	__uint64_t	__uintfptr_t;
+typedef	__uint64_t	__uintptr_t;
+#else
 typedef	__uint32_t	__uintfptr_t;
 typedef	__uint32_t	__uintptr_t;
 #endif

Modified: head/sys/powerpc/include/proc.h
==============================================================================
--- head/sys/powerpc/include/proc.h	Mon Jun 26 02:00:22 2017	(r320346)
+++ head/sys/powerpc/include/proc.h	Mon Jun 26 02:25:19 2017	(r320347)
@@ -48,9 +48,9 @@ struct mdproc {
 
 #ifdef __powerpc64__
 #define	KINFO_PROC_SIZE 1088
-#define	KINFO_PROC32_SIZE 768
+#define	KINFO_PROC32_SIZE 816
 #else
-#define	KINFO_PROC_SIZE 768
+#define	KINFO_PROC_SIZE 816
 #endif
 
 struct syscall_args {

Modified: head/sys/sys/acct.h
==============================================================================
--- head/sys/sys/acct.h	Mon Jun 26 02:00:22 2017	(r320346)
+++ head/sys/sys/acct.h	Mon Jun 26 02:25:19 2017	(r320347)
@@ -66,9 +66,6 @@ struct acctv3 {
 	float	  ac_io;		/* count of IO blocks */
 	__dev_t   ac_tty;		/* controlling tty */
 	uint32_t  ac_pad0;
-#if defined(__powerpc__) && !defined(_LP64)
-	uint32_t  ac_pad1;
-#endif
 	uint16_t  ac_len2;		/* record length */
 	union {
 		uint32_t  ac_align;	/* force v1 compatible alignment */

Modified: head/sys/sys/param.h
==============================================================================
--- head/sys/sys/param.h	Mon Jun 26 02:00:22 2017	(r320346)
+++ head/sys/sys/param.h	Mon Jun 26 02:25:19 2017	(r320347)
@@ -58,7 +58,7 @@
  *		in the range 5 to 9.
  */
 #undef __FreeBSD_version
-#define __FreeBSD_version 1200035	/* Master, propagated to newvers */
+#define __FreeBSD_version 1200036	/* Master, propagated to newvers */
 
 /*
  * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201706260225.v5Q2PJCT046112>