Commit Graph

353 Commits

Author SHA1 Message Date
ian
1eacff75a7 Add strlcat() and strlcpy() to libstand. 2015-12-14 23:09:30 +00:00
marcel
d1d7744157 If we can't open the file, skip devclose() for the exclusive_file_system
case. We never called devopen(), so we know there's nothing to close.
2015-10-08 17:59:05 +00:00
bdrewery
f37faa57f7 META_MODE: Remove DEP_RELDIR from Makefile.depend files.
This has not been needed since r284171 in projects/bmake.

Sponsored by:	EMC / Isilon Storage Division
2015-09-25 19:26:08 +00:00
imp
d1be0bf24e Use CFLAGS_NO_SIMD in preference to varying lists of -mno-xxxx flags.
Go ahead and defined -D_STANDALONE for all targets (only strictly
needed for some architecture, but harmless on those it isn't required
for). Also add -msoft-float to all architectures uniformly rather
that higgley piggley like it is today.

Differential Revision: https://reviews.freebsd.org/D3496
2015-08-27 23:46:42 +00:00
sjg
008d7c831f Add META_MODE support.
Off by default, build behaves normally.
WITH_META_MODE we get auto objdir creation, the ability to
start build from anywhere in the tree.

Still need to add real targets under targets/ to build packages.

Differential Revision:       D2796
Reviewed by: brooks imp
2015-06-13 19:20:56 +00:00
sjg
65145fa4c8 Merge sync of head 2015-05-27 01:19:58 +00:00
emaste
92ea72653a Reduce diffs between the three copies of libstand's Makefile
This should be a non-functional change.  A future change should
address the functional differences between these three and converge
on a single source.

Differential Revision:	https://reviews.freebsd.org/D2058
Reviewed by:	jhb
Sponsored by:	The FreeBSD Foundation
2015-04-23 14:04:33 +00:00
andrew
36d1438826 Add the start of libc and libstand for arm64. Not all of the machine
dependent functions have been implemented, but this is enough for world.

Differential Revision:	https://reviews.freebsd.org/D2132
Reviewed by:	emaste
Sponsored by:	The FreeBSD Foundation
2015-04-07 09:52:14 +00:00
jhb
463cde4030 The System V ABI for amd64 allows functions to use space in a 128 byte
redzone below the stack pointer for scratch space and requires
interrupt and signal frames to avoid overwriting it. However, EFI uses
the Windows ABI which does not support this. As a result, interrupt
handlers in EFI push their interrupt frames directly on top of the
stack pointer. If the compiler used the red zone in a function in the
EFI loader, then a device interrupt that occurred while that function
was running could trash its local variables.  In practice this happens
fairly reliable when using gzipfs as an interrupt during decompression
can trash the local variables in the inflate_table() function
resulting in corrupted output or hangs.

Fix this by disabling the redzone for amd64 EFI binaries. This
requires building not only the loader but any libraries used by the
loader without redzone support.

Thanks to Jilles for pointing me at the redzone once I found the stack
corruption.

Differential Revision:	https://reviews.freebsd.org/D2054
Reviewed by:	imp
MFC after:	2 weeks
Sponsored by:	Cisco Systems, Inc.
2015-03-13 09:38:16 +00:00
jhb
b09e9b6f52 Spin the twiddle in dosfs to give visual feedback for disk I/O on
FAT filesystems as is done for other filesystems in the loader.

MFC after:	1 week
2015-03-12 17:10:04 +00:00
nwhitehorn
cf77261296 Fix loader on PowerPC following r279784. It turns out that, due to .PATH
confusion, the _setjmp.S in libstand was never being used and was instead
being shadowed by the libc version. Since the libc version now uses FPRs,
it caused loader to crash.
2015-03-09 02:19:44 +00:00
danfe
d20a416d73 Fix usage example in kvprintf(9) and its copy in libstand(3): trailing '\n'
in bitfield argument is wrong, as it will be treated as bit 10, causing any
code printing >=10 bits with bit 10 on as having a trailing comma.

Newline (intended one) should be part of the format string (already present
in the examples).

Also fix grammar and kill EOL whitespace in comment while here.

PR:		195005
Approved by:	bdrewery
2015-01-23 07:30:57 +00:00
dim
59eeccaa33 Apparently more Makefiles use stuff from compiler-rt, so fix them up
too.  (This did not show during a make universe, strangely.)
2015-01-08 20:11:38 +00:00
nwhitehorn
ac89714515 Fix loader's ability to read the 10.1 release PowerPC ISOs. There appears to
be some kind of problem with the version of makefs used for these disks.
There may be a better way to handle this problem, so I've set the MFC
timer for a fairly long time period.

MFC after:	2 weeks
2014-12-30 16:55:53 +00:00
ian
e44e2ac96c Add a divisor parameter to twiddle() so that callers can request that output
only happen on every Nth call.  Update the existing twiddle() calls done in
various IO loops to roughly reflect the relative IO sizes.  That is, tftp
and nfs call twiddle() on every 1K block, ufs on every filesystem block,
so the network calls now use a much larger divisor than disk IO calls.

Also add a new twiddle_divisor() function that allows an application to set
a global divisor that is applied on top of the per-call divisors.  Nothing
calls this yet, but loader(8) will be using it to further throttle the
cursor for slow serial consoles.
2014-12-22 20:42:36 +00:00
sjg
b137080f19 Merge from head@274682 2014-11-19 01:07:58 +00:00
andrew
d588d5723d Remove MK_ARM_EABI, the armeb issues have been fixed. The code to support
the oabi is still in the tree, but it is expected this will be removed
as developers work on surrounding code.

With this commit the ARM EABI is the only supported supported ABI by
FreeBSD on ARMa 32-bit processors.

X-MFC after:	never
Relnotes:	yes
Differential Revision: https://reviews.freebsd.org/D876
2014-10-01 08:26:51 +00:00
sjg
d7cd1d425c Merge head from 7/28 2014-08-19 06:50:54 +00:00
marcel
e8c9682c95 Add pkgfs, a file system implementation for reading files out of a
compressed tarball, aka package. The file system assumes that the
files are layed-out in the same order as needed to allow for the
package to be streamed. As such, it does not read an entire package
into memory first.

Some properties of the file system:
o   Files that start with '+' are silently skipped. These are found
    in FreeBSD package files.
o   Files smaller than or equal to 4KB will be cached in memory and
    as such allow for some flexibility in accessing files out of
    order.
o   Files with the .tgz suffix are assumed to be (sub-)packages and
    signal the end for a directory scan.

Obtained from:	Juniper Networks, Inc.
2014-07-31 23:25:13 +00:00
marcel
d8a11be2f4 Provide a means for loaders to control which file system to use. This
to counteract the default behaviour of always trying each and every
file system until one succeeds, or the open fails. The problem with the
loader is that we've implemented features based on this behavior. The
handling of compressed files is a good example of this. However, it is
in general highly undesirable to not have a one-time probe (or taste
in the geom lingo), followed by something similar to a mount whenever
we (first) read from a device. Everytime we go to the same device, we
can reasonably assume it (still) has the same file system. For file
systems that need to do far more that a trivial read of a super block,
not having something similar to a mount operation is disastrous from
a performance (and thus usability) perspective.

But, again, since we've implemented features based on this stateless
approach, things can get complicated quickly if and when we want to
change this. And yet, we sometimes do need stateful behaviour.

For this reason, this change simply introduces exclusive_file_system.
When set to the fsops of the file system to use, the open call will
only try this file system. Setting it to NULL restores the default
behaviour. It's a low-cost (low-brow?) approach to provide enough
control without re-implementing the guts of the loader.

A good example of when this is useful is when we're trying to load
files out of a container (say, a software packaga) that itself lives
on a file system or is fetched over the network. While opening the
container can be done in the normal stateless manner, once it is
opened, subsequent opens should only consider the container.

Obtained from:	Juniper Networks, Inc.
2014-07-30 16:08:16 +00:00
sbruno
68a15d81de libstand's qdivrem.c assumes that sizeof(int) == sizeof(long), this is not
true on amd64 I'm not quite positive this is the "correct" solution for
this but it does seem to compile and shut up the spew of warnings when
compiling libstand for userboot.

Add two _Static_asserts() so that in the future somebody will get a compile
failure if an architecture develops that violates the assumptions of this
code. (strongly suggested by jmg)

Change commetns to indicate int types instead of long.  (noted by ian in
phabric review)

Phabric:	https://phabric.freebsd.org/D443
2014-07-24 19:06:15 +00:00
marcel
9f28abd980 Remove ia64.
This includes:
o   All directories named *ia64*
o   All files named *ia64*
o   All ia64-specific code guarded by __ia64__
o   All ia64-specific makefile logic
o   Mention of ia64 in comments and documentation

This excludes:
o   Everything under contrib/
o   Everything under crypto/
o   sys/xen/interface
o   sys/sys/elf_common.h

Discussed at: BSDcan
2014-07-07 00:27:09 +00:00
bapt
1f77f137dc use .Mt to mark up email addresses consistently (part3)
PR:		191174
Submitted by:	Franco Fichtner  <franco at lastsummer.de>
2014-06-23 08:23:05 +00:00
hselasky
4c1dfc8806 style(9) requires an empty line when function have no local variables.
Suggested by:	ae @
Sponsored by:	DARPA, AFRL
2014-05-30 10:18:01 +00:00
hselasky
6b258c1f80 Add support for snprintf() to libstand.
Reviewed by:	brooks @
Sponsored by:	DARPA, AFRL
2014-05-30 09:43:32 +00:00
sjg
5860f0d106 Updated dependencies 2014-05-16 14:09:51 +00:00
sjg
ed3fc70bf5 Merge from head 2014-05-08 23:54:15 +00:00
imp
2118f42afd Use src.opts.mk in preference to bsd.own.mk except where we need stuff
from the latter.
2014-05-06 04:22:01 +00:00
sjg
0c7e03a54c Merge head 2014-04-27 08:13:43 +00:00
imp
29752a1c14 Spell NO_PROFILE= as MK_PROFILE=no. 2014-04-25 19:25:26 +00:00
emaste
1d20cbce2a Build libstand as a 64-bit library on ppc64
The 32-bit bootloaders now link against libstand.a in sys/boot/libstand32,
so there is no need to force /usr/lib/libstand.a to be 32-bit.

This is equivalent to r261568 for amd64.

Sponsored by:	The FreeBSD Foundation
2014-02-09 16:37:17 +00:00
nwhitehorn
de22423c00 Make libstand setjmp work for both 64- and 32-bit ABIs. 2014-02-07 14:24:36 +00:00
emaste
087fcb444d Build libstand as a 64-bit library on amd64
The 32-bit bootloaders now link against libstand.a in sys/boot/libstand32,
so there is no need to force /usr/lib/libstand.a to be 32-bit.

Sponsored by:	The FreeBSD Foundation
2014-02-06 21:57:27 +00:00
ian
06622912a6 Set the malloc alignment to 64 bytes on platforms that use the U-Boot API
device drivers.  Recent versions of u-boot run with the MMU enabled, and
require DMA-based I/O to be aligned to cache line boundaries.

These changes are based on a patch originally submitted by Juergen Weiss,
but I reworked them and thus any problems are purely my fault.

Submitted by:	"Juergen Weiss" <weiss@uni-mainz.de>
Reviewed by:	imp, nwhitehorn, jhb
2014-02-05 22:53:58 +00:00
dim
f6df8d5718 For libstand and sys/boot, split off gcc-only flags into CFLAGS.gcc.
MFC after:	3 days
X-MFC-With:	r259730
2013-12-26 11:32:39 +00:00
marcel
c05f51eb85 Fix readdir for the root directory on a FAT32 file system. The root
directory is like any subdirectory and as such needs to use a real
cluster number. To this end, keep a DE structure for the root in
the DOS_FS structure and populate it accordingly.

While here:
o   allow consecutive path separators by skipping them all.
o   add missing $FreeBSD$ keyword to dosfs.h.
2013-12-19 05:23:10 +00:00
marcel
566238caa7 Fix an inappropriate free of a non-dynamic value. While here, make the
code more naive and robust:
1.  When setting ev_value, also always set ev_flags appropriately
2.  Always check ev_value and ev_flags before calling free.

Both the value and the EV_DYNAMIC property can come directly from the
consumers of the environment functionality, so it's good to be careful.
And since this code is typically not looked at for long periods of
time, it's good to have it be a little "dumb-looking".

Trigger case for the bug:
        env_setenv("foo", 0, "1", NULL, NULL);
        env_setenv("foo", 0, "2", NULL, NULL);

Obtained from:	Juniper Networks, Inc.
2013-12-18 17:03:43 +00:00
marcel
cec28dc92d Clear f_rabuf after freeing the memory it points to. This prevents a
possible double free.

Obtained from:	Juniper Networks, Inc.
2013-12-18 04:52:30 +00:00
marcel
9ca55833b6 Support long filenames.
Obtained from:	Juniper Networks, Inc.
2013-12-18 04:44:38 +00:00
emaste
9b6af95f7e Note that libstand is 32-bit on amd64 and powerpc64
Sponsored by:	The FreeBSD Foundation
2013-11-29 15:05:49 +00:00
sjg
b96a9cee39 Saver to rm first when making link to dir 2013-10-17 20:03:24 +00:00
sjg
7fcd33c1fa Merge head@256284 2013-10-13 02:35:19 +00:00
kan
0f43811dc1 Unbreak zfsloader with LOADER_TFTP_SUPPORT on
Only accept 'net' and 'pxe' devices as underlying transport
in tftp.c on x86. Prior to this change tftp code would attempt
to send packets over any boot device, including zfs one with
predictably sad results.

Approved by: re (gjb)
MFC After: 1 month
2013-10-09 21:33:19 +00:00
sjg
62bb106222 Merge from head 2013-09-05 20:18:59 +00:00
mav
de60c55689 Move pos++ out of the complicated equation, introduced at r240780.
There is an oppinion that result of that equation is compiler-specific.

Submitted by:	dt71@gmx.com, kientzle
Reviewed by:	rmacklem
MFC after:	3 days
2013-07-01 17:23:13 +00:00
pfg
2d8b3ad7fa libstand: Reset the seek pointer in ext2fs as done in UFS.
Based on r134760:

Reset the seek pointer to 0 when a file is successfully opened,
since otherwise the initial seek offset will contain the directory
offset of the filesystem block that contained its directory entry.
This bug was mostly harmless because typically the directory is
less than one filesystem block in size so the offset would be zero.
It did however generally break loading a kernel from the (large)
kernel compile directory.

Also reset the seek pointer when a new inode is opened in read_inode(),
though this is not actually necessary now because all callers set
it afterwards.

PR:		177328
Submitted by:	Eric van Gyzen
Reviewed by:	iedowse
MFC after:	5 days
2013-06-09 01:19:22 +00:00
andrew
10396f68a6 Remove an extra copy of _setjmp from libstand. We have used the libc version
of this function since r183876.
2013-06-07 21:06:19 +00:00
rwatson
f53b49b70c Enable building string functions as part of libstand on mips; the Makefile
is a bit obfuscated here, as ia64 adds string source files elsewhere, so
simply exclude it here.

Reviewed by:	imp
MFC after:	3 days
Sponsored by:	DARPA, AFRL
2013-04-28 16:35:24 +00:00
rwatson
2821386d34 Merge @228176 from Perforce to fix a bug introduced in r249553:
Trim two now-unneeded (and likely harmful) lines from the libstand
  setjmp/longjmp for MIPS.

  Spotted by:   jmallett

MFC after:      3 days
Sponsored by:	DARPA, AFRL
2013-04-28 14:40:29 +00:00
rwatson
8bcd0583fd Use a suitable code generation when building libstand for MIPS.
Reviewed by:	imp
Sponsored by:	DARPA, AFRL
MFC after:	3 days
2013-04-16 17:20:52 +00:00