UPDATING revision 1.313
1$NetBSD: UPDATING,v 1.313 2020/09/07 10:19:02 mrg Exp $
2
3This file (UPDATING) is intended to be a brief reference to recent
4changes that might cause problems in the build process, and a guide for
5what to do if something doesn't work.
6
7For a more detailed description of the recommended way to build NetBSD
8using build.sh, see the BUILDING file.
9
10Note that much of the advice in this UPDATING file was written before
11build.sh existed.  Nevertheless, the advice here may be useful for
12working around specific problems with build.sh.
13
14Sections are marked with "^^^^^".  After the section on "Recent changes"
15are several sections containing more general information.
16
17See also: BUILDING, build.sh, Makefile.
18
19Recent changes:
20^^^^^^^^^^^^^^^
21
2220200907:
23	GCC 9 is coming, and binutils has been updated for MIPS.  This
24	probably requires cleaning the tools/binutils.
25
2620200811:
27	GCC updates may require cleaning the objdir.  This may occur
28	due to GCC 7.5 update, GCC 8.4 move to gcc.old, or the upcoming
29	GCC 9 upgrade.
30
3120200614:
32	blacklist* has been renamed to blocklist*. postinstall(8)
33	should handle the migration
34
3520200601:
36	Due to a mistake in LIBISPRIVATE handling, .so libraries were
37	created in the build directories and need cleaning.
38
3920200311:
40	GCC 8 ports will need cleaning in src/tools/gcc and
41	src/external/gpl3/gcc due to GCC 8.4 update.
42
4320191118:
44	More architectures were switched to gcc8:
45	    i386, ia64 powerpc64, sparc, sparc64, arm
46	The same comments as in 20191022 apply.
47
4820191112:
49	The LLVM update requires a clean rebuild for all architectures using
50	LLVM during the tools build phase (i386, amd64, aarch64).
51
5220191022:
53	Ports amd64 and aarch64 switched to GCC 8.3 by default.
54	In-place ("expert mode", build.sh -E) builds are not supported
55	when going from a GCC 7 userland to GCC 8. Do a regular
56	build to a different DESTDIR (or preferably: build.sh -U) at least
57	once and install sets, or download comp.{tar.xz,tgz} from the
58	daily builds and install that before doing the next in-place build.
59
6020191001:
61	GCC 8.3 was imported.  Builds of src/tools/gcc may fail if
62	old builds with GCC 7 output now uses GCC 8.  Clean this
63	directory, and also clean src/external/gpl3/gcc.
64
6520190903:
66	Files with names that coincide with existing files' names on
67	case-insensitive file systems were inadvertently committed, for
68	radeon GPU firmware.  We cannot mark these as obsolete for
69	postinstall to fix, so if you updated src since 2019-08-26, and
70	ran build.sh distribution or ran build.sh release, you must
71	manually delete the following files in your DESTDIR (which is
72	usually $OBJDIR/destir.$ARCH), or from / if you have installed
73	them:
74
75		/libdata/firmware/radeon/bonaire_ce.bin
76		/libdata/firmware/radeon/bonaire_mc.bin
77		/libdata/firmware/radeon/bonaire_me.bin
78		/libdata/firmware/radeon/bonaire_mec.bin
79		/libdata/firmware/radeon/bonaire_pfp.bin
80		/libdata/firmware/radeon/bonaire_rlc.bin
81		/libdata/firmware/radeon/bonaire_sdma.bin
82		/libdata/firmware/radeon/bonaire_smc.bin
83		/libdata/firmware/radeon/bonaire_uvd.bin
84		/libdata/firmware/radeon/hainan_ce.bin
85		/libdata/firmware/radeon/hainan_mc.bin
86		/libdata/firmware/radeon/hainan_me.bin
87		/libdata/firmware/radeon/hainan_pfp.bin
88		/libdata/firmware/radeon/hainan_rlc.bin
89		/libdata/firmware/radeon/hainan_smc.bin
90		/libdata/firmware/radeon/hawaii_ce.bin
91		/libdata/firmware/radeon/hawaii_mc.bin
92		/libdata/firmware/radeon/hawaii_me.bin
93		/libdata/firmware/radeon/hawaii_mec.bin
94		/libdata/firmware/radeon/hawaii_pfp.bin
95		/libdata/firmware/radeon/hawaii_rlc.bin
96		/libdata/firmware/radeon/hawaii_sdma.bin
97		/libdata/firmware/radeon/hawaii_smc.bin
98		/libdata/firmware/radeon/kabini_ce.bin
99		/libdata/firmware/radeon/kabini_me.bin
100		/libdata/firmware/radeon/kabini_mec.bin
101		/libdata/firmware/radeon/kabini_pfp.bin
102		/libdata/firmware/radeon/kabini_rlc.bin
103		/libdata/firmware/radeon/kabini_sdma.bin
104		/libdata/firmware/radeon/kaveri_ce.bin
105		/libdata/firmware/radeon/kaveri_me.bin
106		/libdata/firmware/radeon/kaveri_mec.bin
107		/libdata/firmware/radeon/kaveri_mec2.bin
108		/libdata/firmware/radeon/kaveri_pfp.bin
109		/libdata/firmware/radeon/kaveri_rlc.bin
110		/libdata/firmware/radeon/kaveri_sdma.bin
111		/libdata/firmware/radeon/mullins_ce.bin
112		/libdata/firmware/radeon/mullins_me.bin
113		/libdata/firmware/radeon/mullins_mec.bin
114		/libdata/firmware/radeon/mullins_pfp.bin
115		/libdata/firmware/radeon/mullins_rlc.bin
116		/libdata/firmware/radeon/mullins_sdma.bin
117		/libdata/firmware/radeon/oland_ce.bin
118		/libdata/firmware/radeon/oland_mc.bin
119		/libdata/firmware/radeon/oland_me.bin
120		/libdata/firmware/radeon/oland_pfp.bin
121		/libdata/firmware/radeon/oland_rlc.bin
122		/libdata/firmware/radeon/oland_smc.bin
123		/libdata/firmware/radeon/pitcairn_ce.bin
124		/libdata/firmware/radeon/pitcairn_mc.bin
125		/libdata/firmware/radeon/pitcairn_me.bin
126		/libdata/firmware/radeon/pitcairn_pfp.bin
127		/libdata/firmware/radeon/pitcairn_rlc.bin
128		/libdata/firmware/radeon/pitcairn_smc.bin
129		/libdata/firmware/radeon/tahiti_ce.bin
130		/libdata/firmware/radeon/tahiti_mc.bin
131		/libdata/firmware/radeon/tahiti_me.bin
132		/libdata/firmware/radeon/tahiti_pfp.bin
133		/libdata/firmware/radeon/tahiti_rlc.bin
134		/libdata/firmware/radeon/tahiti_smc.bin
135		/libdata/firmware/radeon/verde_ce.bin
136		/libdata/firmware/radeon/verde_mc.bin
137		/libdata/firmware/radeon/verde_me.bin
138		/libdata/firmware/radeon/verde_pfp.bin
139		/libdata/firmware/radeon/verde_rlc.bin
140		/libdata/firmware/radeon/verde_smc.bin
141
142	We will re-import these radeon firmware images another way
143	later.
144
14520190727:
146	The uefi bootloader has gained tftp support and needs a clean
147	build. If you do update builds, manually clean its object
148	directory by something like:
149	cd sys/arch/i386/stand/efiboot && make clean
150
15120190723:
152	The jemalloc allocator in libc is now build without extended
153	debugging (for performance reasons). In update builds make sure
154	to rebuild it completly, by removing all affected object files,
155	including compat builds, something like:
156	cd /usr/obj && find . -type d -name jemalloc|xargs rm -rf
157
15820190207:
159	GCC 7 switched for many ports.  Update builds are likely to fail.
160
16120180924:
162	A newer OpenSSL version has been imported. If you are doing
163	update builds, make sure to remove all old obj dirs, like:
164	cd /usr/obj && find . -type d -name openssl | xargs rm -rf
165
16620180717:
167	On aarch64 int64_t and related types have changed from long long
168	to long. This requires recompiling all C++ binaries.
169
17020180713:
171	On amd64 and i386 static binaries are now build position
172	independend. This requires recompilation of all object
173	files used to create the crunched /rescue binary.
174	Clean the rescue directory in your obj directory before
175	doing an update build, otherwise linking will fail.
176
17720180414:
178	Existing binutils was migrated to binutils.old.  Manual
179	removal of tools/binutils objects directory may be required
180	to fix tools build failure.
181
18220180311:
183	bdftopcf was updated and may need cleaning in the
184	src/external/mit/xorg/tools/bdftopcf subdirectory if there are
185	link errors.
186
18720180212:
188	between OpenSSL and GCC updates, many things may fail to build.
189	any failure that looks like GCC or openssl is best handled by
190	a clean destdir and objdir.  Full cleandir and destdir deletion
191	is recommended if build failures occur.
192
19320171225:
194	removal of the vadvise syscall requires manual removal of all
195	associated files from the libc build object directory (including
196	the .depend files) - a command like:
197		cd $OBJ && find . -type d -name libc | xargs rm -rf
198	For architectures that support multiple "compat" binary targets,
199	you'll need to cleanup both the regular libc directory and the
200	compat ones (the above command will do that).
201
20220171010:
203	a change to the build structure of external/bsd/acpica/bin/iasl
204	means that its objdir (or *.d and .depend at least) might need
205	to be manually removed - or a build done once without -u.
206
20720170822:
208	a new version of GMP has been imported and probably
209	will break parts of builds related to themselves or GCC, both
210	in the tools and the native section.  Remove all GCC, GMP, MPFR
211	and MPC objdirs or build once without -u.
212
21320170816:
214	a new version of MPFR and MPC have been imported and probably
215	will break parts of builds related to themselves or GCC, both
216	in the tools and the native section.  Remove all GCC, GMP, MPFR
217	and MPC objdirs or build once without -u.
218
21920170402:
220	a new version of dhcpcd has been imported, which does not support
221	update builds from the previous version. Remove your
222	external/bsd/dhcpcd object dir or build once without -u.
223
22420170211:
225	a new terminfo database has been imported.
226	The structure of it has changed slightly from prior versions and
227	an updated tic tool is required.
228	If you build.sh, don't use -u
229
23020170207:
231	various arch dependent libc/exect.S files were removed
232	Either remove the obj directories (lib/libc and compat/amd64/i386/lib
233	if it exists) or do a clean build.
234	(This is a bug in the make system, it should be corrected without
235	human intervention, but isn't.)
236
23720170104:
238	xinput build options have changed.
239	Remove the obj directory (external/mit/xorg/bin/xinput)
240	if you build.sh -u
241
24220170103:
243	a new version of flex has been imported.
244	Remove the file from obj (external/bsd/flex)
245	if you build.sh -u
246
24720161014:
248	a new version of OpenSSL has been imported.
249	Remove the files from obj (crypto/external/bsd/openssl) 
250	if you build.sh -u
251
25220161009:
253	a new version of dhcpcd has been imported with slightly changed
254	build infrastructure. When doing a build.sh -u this requires
255	pruning the external/bsd/dhcpcd objdir.
256
25720160914:
258	i386, amd64, shark, ofppc and macppc have joined shark and x68k
259	ports in using xorg-server 1.18. This requires a clean destdir
260	and a clean objdir.
261
26220160527:
263	i386 needs a full cleandir or objdir deletion because PIE has
264	been enabled. (see the amd64 entry two down for further info)
265
26620160418:
267	libedit needs manual removal of all autogenerated files since
268	some of them are not autogenerated anymore. Remember that there
269	might be two copies of libedit if your platform builds "compat".
270
27120160410:
272	amd64 needs full "make cleandir" or deletion of objdir now that
273	PIE has been enabled for amd64.  PIE, or position-independent
274	executables, means all code, including executables and not just
275	shared libraries, is position-independent and hence able to be
276	relocated by ASLR, address space layout randomization.
277
278	The change was made in Makefile variables for compiler and
279	linker flags, for which make(1) does not record dependencies,
280	hence it is unable to detect that all .o files need rebuilding.
281
282	Partial rebuilds with some modified source files will likely
283	fail when linking executables, since the linker refuses to mix
284	position-independent code with position-dependent code in
285	position-independent executables:
286
287		.../x86_64--netbsd/bin/ld: foo.o: relocation R_X86_64_32 against `...' cannot be used when making a shared object; recompile with -fPIC
288
28920160401:
290	Ports switching to GCC 5.3 will need a full "make cleandir".
291	Some people have found that cleandir is not sufficient, so if
292	in doubt delete the entire object directory tree for gcc.
293
29420160306:
295	NetBSD's regexp implementation is now part of libnbcompat.
296	Nblex, nbm4, nbpax, nbsed use it and they may crash on
297	non-NetBSD hosts if linked with stale object files produced
298	while they included a non-NetBSD regex.h.
299	In any case, you should "make cleandir" at least these tools
300	before updating your toolchain.
301
30220160125:
303	Dtrace has been enabled by default on some architectures.
304	When doing an update build, make sure to clean the etc/mtree
305	object directory before starting the build - otherwise the
306	needed directories in destdir will not be created.
307	An easy way to do this is:
308	   cd src/etc/mtree && $TOOLDIR/bin/nbmake-$arch cleandir
309
31020150818:
311	New acpica requires "make cleandir" in src/external/bsd/acpica
312	again.
313
31420150413:
315	New acpica requires "make cleandir" and reinstalling yacc
316	in /usr/src/external/bsd/byacc and /usr/src/tools/yacc and
317	also "make cleandir" in /usr/src/external/bsd/acpica.
318
31920150404:
320	Lint changes require a full rebuild of the tool, so make
321	sure to build without -u option to build.sh, or manually
322	do a make cleandir in src/tools/lint1 and
323	src/usr.bin/xlint.
324
32520150310:
326	Improvements to openssl for arm mean that update builds of
327	the openssl libraries will fail. A make cleandir in
328	external/bsd/openssl/lib is needed
329
33020141026:
331	A mishap during the import of pppd may cause your corruption
332	in your cvs directory if you happened to do a cvs update
333	during a short period of time. To fix, just remove the
334	directory src/external/bsd/ppp/dist/pppd completely
335	and let cvs restore it on next update.
336
33720140721:
338	The src/external/mit/lua/src directory was accidentally created
339	and then deleted in the CVS repository.  If you get errors like
340
341	cvs [update aborted]: cannot open directory
342	/cvsroot/src/external/mit/lua/src: No such file or directory
343
344	then delete your local copy of that directory tree and try again.
345
34620140530:
347	ARM eABI switched to DWARF based exception handling. This requires
348	rebuilding all C++ code. It is strongly advised to do a clean build.
349
35020140131:
351	The new compiler_rt/libc integration moved a few things. It is strongly
352	advised to do a clean build. At least lib/libc, the compat version(s)
353	of libc, libkern, rump and the kernels need to be cleaned.
354
35520131227:
356	1. The new ntpd runs in a restricted mode to prevent amplification
357	   attacks. If you need ntpdc to work you need to explicitly enable
358	   mode7 in your config file. Make sure you put the necessary restrict
359	   statements to avoid being exposed.
360	2. strncat has moved from lib/libc to common/lib/libc; you might need
361	   to make clean in libc
362
36320131129:
364	The GMP sources were updated, and builds will likely fail without
365	cleaning their build trees for both tools and in-tree, like below.
366
36720131128:
368	The MPC and MPFR sources were updated, and builds may require their
369	tools and in-tree directories cleaned for successful updates.
370
37120130605:
372	The kernel option FAST_IPSEC no longer exists, it's been renamed
373	to IPSEC (and the older IPSEC version removed).
374
37520130605:
376	Previous freetype installations eroneously installed private
377	header files. If you are building against a non-empty $DESTDIR,
378	please remove ${DESTDIR}//usr/X11R7/include/freetype2/freetype/.
379
38020130531:
381	The xdm update may cause build failure due to xdm.man being
382	in the obj tree.  Make sure to ensure any like this:
383		nbmake: nbmake: don't know how to make xdm.man. Stop
384	is fixed by deleting the xdm.man in the obj tree.
385
38620130530:
387	Updates of many xsrc packages will leave old .pc files around.
388	Best to clean out the xsrc objdir entirely before rebuilds.
389
39020130301:
391	The removal of netiso requires manual removal of /usr/include/netiso
392	prior to the build and make cleandir in /usr/src/usr.bin/{ktruss,kdump}
393
39420120726:
395	The update of OpenSSL requires cleaning both the OpenSSL build
396	directory and DESTDIR.  *Even non-update builds require cleaning
397	DESTDIR.* Builds done without taking these steps may fail, or in
398	some cases may succeed and install broken OpenSSL libraries that
399	cause third-party software to link incorrectly and/or crash.
400
40120120507:
402	The database schema for makemandb was changed.  You will
403	need to update the database using 'makemandb -f' or wait
404	for the next weekly run to fix it.
405
40620120319:
407	sys/conf/Makefile.kern.inc has been modified to adjust the
408	size of db_symtab automatically.  You need to update dbsym in
409	your $TOOLDIR to build kernels with options SYMTAB_SPACE.  If
410	you don't want this behavior, add AUTO_SYMTAB_SPACE=no to your
411	mk.conf.
412
41320120216:
414	Default for MKCATPAGES changed to NO.  Update builds will fail
415	unless DESTDIR is cleaned manually.  If you built between 20120207
416	and 20120216, daily and weekly could have created an unreadable
417	/var/db/man.db index for apropos.  Running makemandb -f or
418	the next run of weekly will fix it.
419
42020111227:
421	If you built between 20111225 and 20111227 you need to remove
422	/usr/lib/libpam.so.4* and /usr/lib/security/*.so.4, since the
423	bump has been reverted.
424
42520111125:
426	The "rnd" pseudodevice has been added to sys/conf/std, which
427	means it should no longer be explicitly listed in kernel
428	configuration files.  The line "pseudo-device rnd" should be
429	removed from any custom kernel config files users may have.
430
43120111119:
432	A problem with the datastructures used by the rndctl(8)
433	utility (pointers in datastructures in an array, making 32->64
434	bit compatibility very painful) has been fixed in a
435	non-backwards-compatible way.  If you replace your kernel,
436	replace your rndctl executable too.
437
43820111001:
439	the prop_*_send_syscall() functions from proplib(3) have been
440	changed and their new version is not backward compatible with the old
441	one.  So ensure that all consumers of these functions (currently:
442	quota2 code and its tests) are updated together with the new lib.
443
44420110817:
445	sparc has been changed to use GCC 4.5.3, so any objdir or
446	DESTDIR for them should be deleted before updating.
447
44820110806:
449	i386 and amd64 have been changed to use GCC 4.5.3, so any
450	objdir or DESTDIR for them should be deleted before updating.
451
45220110805:
453	The update to GCC 4.5.3 requires a non-trivial portion of
454	the tree to be cleaned.  Best to delete both objdir and
455	DESTDIR before running this update.  So far, only the
456	sparc64, mips and powerpc platforms have changed.
457
45820110803:
459	The layout of external/public-domain/xz has changed.  To do an
460	update build you will have to remove the contents of the OBJDIR
461	for external/public-domain/xz/bin by hand as the xz entry there
462	is now a directory.
463
46420110410:
465	The configuration of src/tools/gcc has changed.  To do an
466	update build you have to clean both tools/binutils and
467	tools/gcc by hand.
468
46920110328:
470	Building the Xorg binary was moved into a subdirectory to fix
471	ordering issues with "make all".  It may be necessary to remove
472	the OBJDIR for external/mit/xorg/server/xorg-server/hw/xfree86
473	if your update build fails, as the "Xorg" entry there is now a
474	directory.
475
47620110121:
477	Assembler files no longer use -traditional-cpp.  This can break
478	the build of individual parts of the tree.  This is handled
479	correctly by build.sh.  Manual builds have to update /usr/share/mk
480	and re-run config(1) for any kernel configurations as needed.
481
48220101217:
483	The tcpdump(8) program was changed to drop privileges and chroot(2)
484	by default.  It may be necessary to manually update passwd(5) and
485	group(5) in order to make the program work with existing setups.
486
48720101125:
488	The latest changes to setenv(3) dissallow setting environment
489	variables with names that contain '='.  Revision 1.18 of env.c
490	assumed that this was allowed.  Installing a new libc with an
491	old copy of /usr/bin/env causes env x=1 printenv | grep x= to
492	break which affects the autoconf tests for dependency finding,
493	so building gcc will end up printing:
494	    checking dependency style of gcc... none
495	    configure: error: no usable dependency style found
496	Fix it by rebuilding and re-installing env.
497
49820101119:
499	Recent Xorg updates in xsrc/external/mit/ may cause various build
500	or run-time problems.  Delete your entire DESTDIR and OBJDIR if you
501	have any build problems with xsrc, or problems with mismatched
502	versions between xorg-server and drivers.
503
50420100604:
505	The update of ATF to 0.9 causes old tests written in shell to fail
506	unless they are rebuilt.  If you are building with MKUPDATE=yes,
507	you need to clean the src/external/bsd/atf/tests/ and the src/tests/
508	trees by hand.
509
51020100522:
511	Recent Xorg updates in xsrc/external/mit/ will cause various build
512	problems.  Delete your entire DESTDIR and OBJDIR if you have any
513	build problems with xsrc.
514
51520100522:
516	private section of <ctype.h> was splitted, and now mklocale(1)
517	include ctype_local.h, so you have to make cleandir in tools/mklocale.
518
51920100520:
520	The location of the xkb compiled descriptions has changed.  Please
521	remove usr/X11R7/lib/X11/xkb/compiled from your $DESTDIR.
522
52320100222:
524	The shared objects file extension has been changed from .so to
525	.pico, in order to avoid conflicts with shared libraries names
526	libXX.so.  All now stale regular .so files can be removed from
527	your object directories.
528
52920100204:
530	The termcap database has been removed from the sources,
531	but has not been marked obsolete so it is not removed
532	from the system when upgrading.
533	As such, you will need to remove them from your object
534	and destination directories.
535
53620091101:
537        After updating, it may be necessary to make the 'cleandir'
538        target in src/tools/yacc/ and in src/usr.bin/yacc/ before a
539        'build.sh -u tools' or 'build.sh -u distribution'.  Ditto
540        src/tools/lex/ and src/usr.bin/lex/.
541
54220091001:
543	On amd64 you must rebuild tools (to get the new binutils)
544	before building a kernel, or the build fails on cpufunc.S.
545
54620091001:
547	An error will create a ./usr/X11R7/lib/X11/xkb/compiled/xkb
548	symlink, failing the build.  Delete the link, and the subdir
549	it is in, and retry your build.
550
55120090718:
552	libc build changed so that strchr() provides the extra entry
553	point for index().  Update build of libc.a (and libc_pic.a)
554	may fail because the archive contains the unwanted index.o.
555	(Similarly for strrchr() and rindex().)
556
55720090709:
558	Native Xorg was upgraded again.  Builds will probably fail again
559	without a clean objdir, at least for src/external/mit/xorg.
560
56120090616:
562	Native Xorg was upgraded.  Builds will need a clean objdir for
563	src/external/mit/xorg.  Upgrading a system from sets will not
564	work properly yet as the /usr/X11R7/lib/X11/xkb/symbols/pc
565	subdirectory has been changed into a file, and this needs to
566	be manually "rm -r"'ed before installing xbase.tgz.
567
56820090501:
569	Several new functions were added to string.h/libc, and this
570	can cause autoconf problems during the tool build for people
571	who fail to clean out their tools objects properly.  If you
572	note messages about stpcpy, stpncpy or strnlen accompanying a
573	failure during the tool build, clean out all your tools
574	objects and start again.
575
57620090325:
577	The i386 port was switched to i486 default toolchain.  This requires
578	cleaning your src/tools directory and $TOOLDIR and rebuilding them.
579
58020090126:
581	The __posix_fadvise50 system call changed assembly stub type.  You
582	need to 'rm -f __posix_fadvise50.*' in the libc build directory
583	to avoid using the old assembly stub.
584
58520090202:
586	pkg_install now depends on the pkgdb cache for automatic conflict
587	detection.  It is recommented to rebuild the cache with
588	``pkg_admin rebuild''.
589
59020090110:
591	time_t and dev_t have been bumped to 64 bit quantities.  To upgrade:
592	1. Make sure your kernel has COMPAT_50 in it.  Build and install.
593	   This is needed even in the MODULAR kernel because there is
594	   conditionally compiled code in rtsock.c.
595	2. make sure build.sh completes and the binaries in a chroot work
596	   before installing.
597	3. If you don't use build.sh and you build directly to root, and
598	   your build breaks in the middle, don't despair.  Make sure headers
599	   are installed properly, and start building libraries first libc
600	   and libutil, install them and then continue building all the
601	   libraries in src/lib and src/gnu/lib and install them.  Once
602	   the new libraries are installed, you can restart the build.
603	4. If you compile packages and you notice link time warnings,
604	   rebuild the required packages to update their shared libraries.
605	   Any package you rebuild will require rebuilding all the packages
606	   that depend on it.
607	5. Next time you run pwd_mkdb with the new binary, the file
608	   will be upgraded and it will not be backwards compatible.
609	6. The utmpx/wtmpx files (/var/run/utmpx and /var/log/wtmpx, see
610	   lastlogx(5)) have been versioned, and there is a heuristic
611	   for utmp.  You are better off removing the old files after
612	   upgrading.  The automated clearing of /var/run during
613	   boot, and the automated rotating of files in /var/log by
614	   newsyslog(8), may mean that you do not have to remove the
615	   files manually.
616	7. The optional accounting file (/var/account/acct, see
617	   accton(8)) has not been versioned, and will need to be
618	   removed.  The automatic rotation of the accounting file by
619	   /etc/daily limits the bad consequences of failure to remove
620	   the file.
621	8. Application software that writes time_t to binary files on
622	   disk will break or need attention.  Most notably: if you are
623	   using PostgreSQL < 8.4, you need to dump your databases,
624	   rebuild PostgreSQL with the new time_t, then restore.
625
62620081219:
627	config(1) has been updated, and one of the files it creates -
628	swapnetbsd.o - has changed format.  You need to rebuild config
629	(done automatically by build.sh) and then you need to rerun
630	config on all kernel configuration files before rebuilding those
631	kernels.
632
63320081205:
634	If you build with MKX11=no, you should remove /etc/rc.d/xdm and
635	/etc/rc.d/xfs from DESTDIR because those files were moved to the xetc
636	set and will appear as extra files for MKX11=no update builds.
637
63820081122:
639	On i386, various kernel options(4) in GENERIC including
640	file systems have been disabled and moved into kernel modules.
641	Before trying a new GENERIC kernel, you have to prepare the
642	following files as well as a new GENERIC kernel:
643
644	- build and install kernel modules from src/sys/modules
645
646	- install the latest bootloader, which will load a module
647	  for the file system from which the kernel is loaded automatically
648
649	If you have to load your kernel from a file system which is not of
650	the same type as the root file system, you have to load the necessary
651	file system module manually on the boot prompt or in the boot.cfg file.
652
65320080827:
654	If you built and installed a libc from sources between
655	2008/08/20 and 2008/08/26 you got a broken strtouq(3)
656	which results in false errors reported by lint(1).
657	Since this breaks the libc build itself, manual help is
658	needed -- lint must be disabled temporarily, e.g.:
659	  $ (cd lib/libc && make MKLINT=no dependall install)
660
66120080813:
662	MKDEBUG build was broken because the .depend files did not know
663	about .go files.  You need to remove all .depend files and rebuild.
664
66520080802:
666	A regression in binary compatibility for pthread_mutex_t has
667	been fixed.  Unfortunately, the price is breaking compatibility
668	for -current.
669
670	Threaded programs (using libpthread) and C++ programs (using
671	libstdc++) compiled after 20070907 and before 20080802 need to
672	be recompiled.
673
674	One way to find affected pkgsrc packages:
675
676	  $ grep REQUIRES=/usr/lib/libpthread /var/db/pkg/*/+BUILD_INFO
677	  $ grep REQUIRES=/usr/lib/libstdc++ /var/db/pkg/*/+BUILD_INFO
678
67920080731:
680	WAPBL (metadata journaling support) has been added, but at this
681	time isn't backwards compatible with pre-WAPBL aware kernels
682	and userland (fsck_ffs in particular).  Please make sure you
683	don't use a journaled filesystem with an older kernel/userland,
684	especially an uncleanly mounted journaled filesystem.  WAPBL
685	also requires the super block to be in the UFS2 format.  You
686	can use fsck_ffs -c 4 to update the superblock format.
687
68820080721:
689	Assembler warnings are now fatal if $WARNS>0 and $NOGCCERROR
690	isn't defined.
691
69220080531:
693	The ioctl number of DRVSUSPENDDEV command on /dev/drvctl changed
694	from 125 (conflicted with DRVCTLCOMMAND) to 129.  The drvctl(8)
695	utility needs to be rebuilt and reinstalled as older binaries
696	won't work correctly.  The following sequence of commands:
697
698	  $ (cd sys/sys/ && nbmake-$arch includes)
699	  $ (cd sbin/drvctl/ && nbmake-$arch clean)
700	  $ (cd sbin/drvctl/ && nbmake-$arch all)
701
702	leaves new drvctl utility in sbin/drvctl build directory.
703
70420080503:
705	The <bsd.lib.mk> variable MKPRIVATELIB was renamed to LIBISPRIVATE.
706
70720080521:
708	For a while, unprivileged UPDATE builds would fail to
709	succeed at the checkflist stage, complaining that
710	${DESTDIR}/stand/<arch>/ did not exist.  A fix for this
711	problem was committed to share/mk/bsd.kmodule.mk, revision 1.9.
712	If you already hit this problem, update the .mk file,
713	remove ${DESTDIR}/stand/<arch>, and re-run the build.
714
71520080303:
716	Linker warnings are now fatal if $WARNS>0.
717
71820080126:
719	The posix_fadvise system call has been changed from an assembly
720	stub, to a c file that calls an assembly stub.  You need to
721	'rm -f posix_fadvise.* .depend' in the libc build directory to
722	avoid using the old assembly stub.
723
72420071209:
725	The acpiec(4) driver has been split into two attachments.  If you
726	get ACPI errors before the attachment, please update your kernel
727	configuration file appropriately or see GENERIC for more details.
728
72920071115:
730	The it(4) driver has been renamed to itesio(4) and the old port
731	argument specified in the kernel configuration file is not valid
732	anymore.  The itesio(4) driver now uses the Super I/O address port
733	rather than the EC address port.  Please update your kernel
734	configuration file appropriately or see GENERIC for more details.
735
73620071028:
737	The pccons(4) driver has been removed from the NetBSD/shark port.
738	You need to update any custom kernel configuration file you have
739	to remove any references to pccons (which includes removing the
740	now useless XSERVER option) and replace them with the correct
741	entries for the wscons driver.  See the GENERIC configuration file
742	for more details.
743
74420070913:
745	A latent bug in dhclient/dhcpd that caused it to be unable to
746	enumerate interfaces was fixed.  The bug began to cause
747	problems after 20070911 when the kernel's SIOCGIFCONF
748	implementation was repaired.  From 20070529 to 20070911 racoon
749	could not enumerate interfaces.  (These are noted because
750	normal kernel/userspace version matching hygiene is not
751	sufficient to avoid this problem.)  Ensure that both kernel
752	and userland are from after 20070913.
753
75420070703:
755	nbinstall has been renamed ${MACHINE_GNU_ARCH}-install.  It
756	calls the target-specific strip program, and the logic to pass
757	down STRIP from make has been removed.  This requires a
758	re-installation of tools.
759
76020070422:
761	The way OS emulations lookup filenames inside the emulation root
762	has been changed.  Rather than modify the pathname (and copy back
763	to userspace) namei() and lookup() directly check the emulation
764	root.  One side effect is that absolute symlinks inside the emulated
765	root file system will be relative to that file system - unless they
766	start /../ this is useful when the emulated root is a real install
767	that has such links.
768	This might affect symlinks that have been added to reference outside
769	the emulated root.
770
77120070412:
772	The pckbc driver on sgimips IP32 has been removed.  Use macekbc
773	instead.  See the GENERIC32_IP3x kernel configuration for an
774	example.
775
77620070319:
777        src/lib/libc/Makefile revision 1.129 broke libc and ld.elf_so
778        on many platforms due to incorrect flags settings.  If you
779        updated and built after about 20070315, do "nbmake-$arch
780	cleandir" in src/lib/libc and src/libexec/ld.elf_so to force a
781	rebuild of object files that might have been built
782	incorrectly, and ensure that you have at least
783	src/lib/libc/Makefile 1.130.
784
78520070210:
786        src/sys/sys/{sa.h,savar.h} were removed.
787          find ${OBJDIR} \( -name .depend -o -name '*.d' \) -print \
788              | xargs egrep -l '/sa.h|/savar.h' | xargs rm
789        will allow dependencies on those files to get get rebuilt
790
79120070209:
792        The threading model was changed when the newlock2 branch
793        was merged to NetBSD-current.  If you boot with a new
794        kernel (version 4.99.10), then you also need a new pthread
795        library (/usr/lib/libpthread.so.0.7).  If you boot with
796        an old kernel, then you need the old pthread library
797        (/usr/lib/libpthread.so.0.6).  Provided you keep the kernel and
798        the pthread library in sync, old threaded applications should
799        continue to work with an old or new kernel.  Note that named(8)
800	is the only threaded application in the base system.
801
80220061214:
803	Following the move of string_to_flags() and flags_to_string()
804	from the bin/ls/ sources to libutil, users doing UPDATE builds
805	will need to do a "make cleandir" in
806		tools/mtree/, tools/makefs/, tools/binstall/, tools/pax/,
807		bin/pax/, bin/ls/, usr.sbin/mtree/, usr.sbin/makefs/,
808		usr.bin/xinstall/, libexec/ftpd/, rescue/, as well
809		as the installation images in distrib/
810	in order to excise stale references to the old stat_flags.h header
811	file in the ls sources -- stat_flags.h has been removed.
812
81320061108:
814	The configure script used in the src/tools/gcc compiler has been
815	changed to indicate that our libc has ssp support built-in and
816	does not depend on -lssp and -lssp-nonshared.  You'll need to
817	make clean in src/tools/gcc first to rebuild the compiler.
818
81920061009:
820	The sysctl variables net.inet{,6}.tcp{,6}.newreno are no longer
821	available.  Use net.inet{,6}.tcp{,6}.congctl.selected instead.
822
82320060814:
824	The vt, vidcconsole, kbd, and rpckbd drivers on acorn32 have been
825	withdrawn.  Use vidcvideo and pckbd instead.  See the GENERIC
826	kernel configuration for an example.  X servers from the last
827	few years should cope.
828
82920060703:
830	MPACPI is no more.  We always configure PCI interrupts using ACPI
831	if we have an ACPI kernel.  The option MPACPI_SCANPCI has been renamed
832	to ACPI_SCANPCI.  Thanks to work from fvdl.
833
83420060627:
835	socket(2) has changed, and its system call has been versioned.
836	For userlands with the old version of socket(2), make sure that
837	your kernel has 'options COMPAT_30' set, or else 'bad system call'
838	errors will result.
839
840Hints for a more successful build:
841^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
842    Use build.sh, but do not use its "expert mode":
843	This will automatically build the tools in the
844	   correct order, and it will keep the tools and the
845	   new build products from interfering with the running
846	   system.  This will allow you to ignore most of the
847	   other advice in this file.
848    Build a new kernel first:
849	This makes sure that any new system calls or features
850	   expected by the new userland will be present.  This
851	   helps to avoid critical errors when upgrading.
852    Use object directories:
853	This helps to keep stale object
854	   files from polluting the build if a Makefile "forgets"
855	   about one.  It also makes it easier to clean up after
856	   a build.  It's also necessary if you want to use the
857	   same source tree for multiple machines.
858	   To use object directories with build.sh:
859	    a) invoke build.sh with the "-M" or "-O" options.
860	   To use object directories without using build.sh:
861	    a) cd /usr/src ; make cleandir
862	    b) Add "OBJMACHINE=yes" to /etc/mk.conf
863	    c) Add "MKOBJDIRS=yes" to /etc/mk.conf
864	    d) cd /usr/src ; make build
865	   Note that running "make obj" in a directory will create
866	   in obj.$MACHINE directory.
867    Build to a DESTDIR:
868	This helps to keep old installed files (especially libraries)
869	   from interfering with the new build.
870	   To build to a DESTDIR with build.sh, use the "-D" option.
871	   To build to a DESTDIR without using build.sh, set the DESTDIR
872	   environment variable before running make build.  It should be
873	   set to the pathname of an initially empty directory.
874	   Problems: if you do not use build.sh, you might need to
875		update critical utilities without using DESTDIR since
876		nothing is executed from what is installed in DESTDIR.
877		(See critical utils, below.)
878    Build often:
879	This keeps critical utilities current enough to not choke
880	on any other part of the source tree that depends on up to
881	date functionality.  If you use build.sh, you should not have
882	this problem.
883
884What to do if things don't work:
885^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
886When things don't work there are usually a few things that commonly
887should be done.
888    1)	make includes
889	This should be done automatically by make build.
890    2)  cd share/mk && make install
891	Again, automatically done by make build.
892
893Failsafe rebuild of a small part of the tree:
894^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
895To make sure you rebuild something correctly you want to do
896something like the following:
897    1)  Make sure the includes and .mk files are up to date.
898    2)  Make sure any program used to build the particular
899	utility is up to date.  (yacc, lex, etc...)
900    3)  cd ...path/to/util...
901	make cleandir
902	rm ...all obj directories...
903	make cleandir			# yes, again
904	make obj
905	make depend && make
906
907Failsafe rebuild of the entire tree:
908^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
909If you really want to make sure the source tree is clean and
910ready for a build try the following.  Note that sourcing /etc/mk.conf
911(a make(1) Makefile) in this manner is not right, and will not work
912for anyone who uses any make(1) features in /etc/mk.conf.
913
914---cut here---
915#!/bin/sh
916. /etc/mk.conf
917
918if [ -z $NETBSDSRCDIR ] ; then
919    NETBSDSRCDIR=/usr/src
920fi
921if [ \! -d $NETBSDSRCDIR ] ; then
922    echo Unable to find sources
923    exit 1
924fi
925find $NETBSDSRCDIR -name \*.o -o -name obj.\* -o -name obj -exec rm \{\} \;
926
927if [ -z $BSDOBJDIR ] ; then
928    BSDOBJDIR=/usr/obj
929fi
930if [ -d $BSDOBJDIR ] ; then
931    rm -rf $BSDOBJDIR
932fi
933
934cd $NETBSDSRCDIR && make cleandir
935
936---cut here---
937
938Critical utilities:
939^^^^^^^^^^^^^^^^^^^
940	usr.bin/compile_et
941	usr.bin/make
942	usr.bin/yacc
943	usr.bin/lex
944	usr.bin/xlint
945	usr.bin/config
946
947Other problems and possible solutions:
948^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
949Symptom:Complaints involving a Makefile.
950Fix:	Rebuild usr.bin/make:
951	cd usr.bin/make && make && make install
952	Or, a failsafe method if that doesn't work:
953	cd usr.bin/make && cc *.c */*.c -I . -o make && mv make /usr/bin
954
955Fix:	Make sure .mk files are up to date.
956	cd share/mk && make install
957
958Symptom:Kernel `config' fails to configure any kernel, including GENERIC.
959Fix:	Rebuild usr.bin/config
960
961Symptom:
962Fix:	Rebuild usr.bin/yacc
963
964Symptom:
965Fix:	Rebuild usr.bin/lex
966
967Symptom:
968Fix:	rm /usr/lib/libbfd.a
969
970Symptom:Obsolete intermediate files are used during compilation
971Fix:	Try the following sequence of commands in the directory in question.
972	make cleandir; rm `make print-objdir`; make cleandir; make obj
973	(If you built the tree without "make obj" in the past, obsolete files
974	may remain.  The command tries to clean everything up)
975
976Symptom:.../sysinst/run.c:xx: warning: initialization from incompatible
977	pointer type
978Fix:	Rebuild and install usr.bin/menuc
979
980Symptom:mklocale not found during build in share/locale/ctype
981Fix:	Build and install usr.bin/mklocale
982
983Symptom:undefined reference to `__assert13' or `__unsetenv13'
984Fix:    Rebuild and install lib/libc
985
986Symptom:usr.bin/config fails to build.
987Fix:	Try building with -DMAKE_BOOTSTRAP added to CFLAGS in Makefile.
988
989Symptom:undefined reference to `getprogname' or `setprogname'
990Fix:    Rebuild and install lib/libc
991
992Symptom:lint does not understand the '-X' option
993Fix:    May need to build & install libs with NOLINT=1 before rebuilding lint
994
995Symptom:Update build fails in src/tools/gcc complaining that a variable
996	(e.g. CPPFLAGS) has changed since the previous run.
997Fix:    Run "nbmake-${ARCH} clean" in src/tools/gcc or do a clean build.
998
999Symptom:cvs [update aborted]: cannot open directory /cvsroot/src/...:
1000	No such file or directory.
1001Cause:	If a directory is created by mistake, then it is sometimes
1002	deleted from the CVS repository using administrative commands
1003	that bypass the normal cvs access controls.  If your cvs working tree
1004	contains references to a directory that has been deleted on the
1005	server in this way, then "cvs update" reports this error.
1006Fix:	Recursively delete the affected directory from your working tree
1007	and try the update again.
1008