svn commit: r354095 - in head/sys: amd64/amd64 amd64/include kern

Konstantin Belousov kostikbel at gmail.com
Sat Oct 26 08:27:04 UTC 2019


On Sat, Oct 26, 2019 at 08:24:09AM +0200, Antoine Brodin wrote:
> On Fri, Oct 25, 2019 at 10:09 PM Konstantin Belousov <kib at freebsd.org> wrote:
> >
> > Author: kib
> > Date: Fri Oct 25 20:09:42 2019
> > New Revision: 354095
> > URL: https://svnweb.freebsd.org/changeset/base/354095
> >
> > Log:
> >   amd64: move pcb out of kstack to struct thread.
> >
> >   This saves 320 bytes of the precious stack space.
> >
> >   The only negative aspect of the change I can think of is that the
> >   struct thread increased by 320 bytes obviously, and that 320 bytes are
> >   not swapped out anymore. I believe the freed stack space is much more
> >   important than that.  Also, current struct thread size is 1392 bytes
> >   on amd64, so UMA will allocate two thread structures per (4KB) slab,
> >   which leaves a space for pcb without increasing zone memory use.
> >
> >   Reviewed by:  alc, markj
> >   Tested by:    pho
> >   Sponsored by: The FreeBSD Foundation
> >   MFC after:    2 weeks
> >   Differential revision:        https://reviews.freebsd.org/D22138
> 
> Hi,
> 
> It seems that this breaks at least some versions of gcc:
> 
> In file included from /usr/include/sys/proc.h:75,
>                  from /usr/include/sys/user.h:51,
>                  from ./md-unwind-support.h:34,
>                  from
> /wrkdirs/usr/ports/lang/gcc10-devel/work/gcc-10-20191020/libgcc/unwind-dw2.c:412:
> /usr/include/machine/proc.h:76:13: error: field 'md_pcb' has incomplete type
>    76 |  struct pcb md_pcb;
>       |             ^~~~~~
> 

It is very strange.  Are gcc 9 or 8 affected ?

As a blind guess, please try this patch.

diff --git a/sys/amd64/include/pcb.h b/sys/amd64/include/pcb.h
index 44e34fa5c83..9758e684da2 100644
--- a/sys/amd64/include/pcb.h
+++ b/sys/amd64/include/pcb.h
@@ -45,7 +45,7 @@
 #include <machine/fpu.h>
 #include <machine/segments.h>
 
-#ifdef __amd64__
+#if defined(__amd64__) || defined(__x86_64__)
 /*
  * NB: The fields marked with (*) are used by kernel debuggers.  Their
  * ABI should be preserved.


More information about the svn-src-all mailing list