dragonfly.git
2 years agoMerge branch 'vendor/OPENSSL'
Peter Avalos [Tue, 27 Mar 2012 23:47:37 +0000 (16:47 -0700)]
Merge branch 'vendor/OPENSSL'

2 years agoImport OpenSSL-1.0.1.
Peter Avalos [Sun, 25 Mar 2012 17:44:51 +0000 (10:44 -0700)]
Import OpenSSL-1.0.1.

  Major changes between OpenSSL 1.0.0h and OpenSSL 1.0.1:

      o TLS/DTLS heartbeat support.
      o SCTP support.
      o RFC 5705 TLS key material exporter.
      o RFC 5764 DTLS-SRTP negotiation.
      o Next Protocol Negotiation.
      o PSS signatures in certificates, requests and CRLs.
      o Support for password based recipient info for CMS.
      o Support TLS v1.2 and TLS v1.1.
      o Preliminary FIPS capability for unvalidated 2.0 FIPS module.
      o SRP support.

  Major changes between OpenSSL 1.0.0g and OpenSSL 1.0.0h:

      o Fix for CMS/PKCS#7 MMA CVE-2012-0884
      o Corrected fix for CVE-2011-4619
      o Various DTLS fixes.

2 years agokernel -- DEBUG_LOCKS: Do not panic if releasing a lockmgr lock w/ spinlocks held.
Venkatesh Srinivas [Tue, 27 Mar 2012 14:55:17 +0000 (07:55 -0700)]
kernel -- DEBUG_LOCKS: Do not panic if releasing a lockmgr lock w/ spinlocks held.

2 years agomountlist_exists(): use a TAILQ_FOREACH macro again
Francois Tigeot [Mon, 26 Mar 2012 17:58:30 +0000 (19:58 +0200)]
mountlist_exists(): use a TAILQ_FOREACH macro again

Removing a few lines of code in the process.

2 years agokernel: msdosfs -- Use -1 rather than 32-bit 0xffffffff in mount().
Venkatesh Srinivas [Mon, 26 Mar 2012 15:59:02 +0000 (08:59 -0700)]
kernel: msdosfs -- Use -1 rather than 32-bit 0xffffffff in mount().

Corrects bug mounting 8GB msdosfs filesystem on x86-64.

Submitted-by: G. Isenmann
2 years agotcp: Properly update tcps_rttcantdetect
Sepherosa Ziehau [Mon, 26 Mar 2012 05:39:10 +0000 (13:39 +0800)]
tcp: Properly update tcps_rttcantdetect

- Fix the logic which detects that RTT based spurious retransmition
  detection does not work.
- Add missing tcps_rttcantdetect updating in header prediction code

2 years agonetstat: Print the statistics that Eifel works but RTT based spurious rexmt not
Sepherosa Ziehau [Mon, 26 Mar 2012 05:37:46 +0000 (13:37 +0800)]
netstat: Print the statistics that Eifel works but RTT based spurious rexmt not

2 years agotcp/sack: Prevent invalid SACK option from being processed
Sepherosa Ziehau [Mon, 26 Mar 2012 03:36:53 +0000 (11:36 +0800)]
tcp/sack: Prevent invalid SACK option from being processed

If the received SACK blocks contain one invalid SACK block,
discard the whole SACK blocks.

2 years agoacpi_hp(4): Fix acquisition of acpi's softc.
Sascha Wildner [Sun, 25 Mar 2012 12:34:03 +0000 (14:34 +0200)]
acpi_hp(4): Fix acquisition of acpi's softc.

Now that acpi_hp is acpi_wmi's child, the softc must be taken from
its grandparent (acpi).

This fixes a crash in the setup of the sysctl tree.

Reported-by: tuxillo
2 years agortld: Sync memory allocation with FreeBSD
John Marino [Sun, 25 Mar 2012 10:49:17 +0000 (12:49 +0200)]
rtld: Sync memory allocation with FreeBSD

Taken from:
FreeBSD SVN 233306 (22 March 2012)
FreeBSD SVN 233307 (22 March 2012)
FreeBSD SVN 233357 (22 March 2012)

Remove unused CalTech #ifdef fragments.

Use xmalloc() instead of malloc() in the places where malloc() calls
are assumed to not fail. Make the xcalloc() calling conventions follow
the calloc(3) calling conventions and replace unchecked calls to calloc()
with calls to xcalloc(). Remove redundand declarations from xmalloc.c,
which are already present in rtld.h.

Implement xstrdup() using strlen()/xmalloc()/memcpy() already presented
in rtld, instead of pulling in libc strdup().

2 years agortld: Fix ELF filter implementation
John Marino [Sun, 25 Mar 2012 10:28:13 +0000 (12:28 +0200)]
rtld: Fix ELF filter implementation

Vertatim from FreeBSD SVN 233231 (20 March 2012):

Do not relocate twice an object which happens to be needed by loaded
binary (or dso) and some filtee opened due to symbol resolution when
relocating need objects.  Record the state of the relocation
processing in Obj_Entry and short-circuit relocate_objects() if
current object already processed.

Do not call constructors for filtees loaded during the early
relocation processing before image is initialized enough to run
user-provided code.  Filtees are loaded using dlopen_object(), which
normally performs relocation and initialization.  If filtee is
lazy-loaded during the relocation of dso needed by the main object,
dlopen_object() runs too earlier, when most runtime services are not
yet ready.

Postpone the constructors call to the time when main binary and
depended libraries constructors are run, passing the new flag
RTLD_LO_EARLY to dlopen_object().  Symbol lookups callers inform
symlook_* functions about early stage of initialization with
SYMLOOK_EARLY.  Pass flags through all functions participating in
object relocation.

Use the opportunity and fix flags argument to find_symdef() in
arch-specific reloc.c to use proper name SYMLOOK_IN_PLT instead of
true, which happen to have the same numeric value.

2 years agoVFS accounting: use an explicit TAILQ_FIRST/TAILQ_NEXT loop in mountlist_exists()
Francois Tigeot [Sun, 25 Mar 2012 10:38:51 +0000 (12:38 +0200)]
VFS accounting: use an explicit TAILQ_FIRST/TAILQ_NEXT loop in mountlist_exists()

The previous TAILQ_FOREACH loop body was never executed

2 years agoVFS accounting: do not set vp->v_pfsmp for non-nullfs mounts
Francois Tigeot [Sun, 25 Mar 2012 08:27:07 +0000 (10:27 +0200)]
VFS accounting: do not set vp->v_pfsmp for non-nullfs mounts

* the test in _cache_setvp() was wrong and was initializing a pfs-specific
  accounting variable in vnodes for all filesystem types, possibly causing
  unnecessary work for each filesystem write operation.

2 years agodefaults: remove /usr/lib/gcc* from ldconfig search path
John Marino [Sat, 24 Mar 2012 08:55:38 +0000 (09:55 +0100)]
defaults: remove /usr/lib/gcc* from ldconfig search path

It is not necessary for ldconfig to add /usr/lib/gcc44 and /usr/lib/gcc41
directories to the default library search path.  Every binary built with
gcc41 and gcc44 embeds these paths into the DT_RPATH dynamic tag which
tells the runtime linker to look their first.  In effect, this means these
paths are potentially searched multiple times: once due to the rpath and
again due to the ldconfig hints file.  Let's do away will the redundant,
always-fails check here.

Another reason is that the gcc libraries have different versions of the
same libraries.  Surely the gcc41 version isn't preferred over the gcc44
version, but it gets searched first.  Again, let rpath take care of this
for gcc.

To update the rc.conf defaults, "make upgrade" after building world is
required.

2 years agogcc41: remove /usr/lib from rpath
John Marino [Sat, 24 Mar 2012 08:14:15 +0000 (09:14 +0100)]
gcc41: remove /usr/lib from rpath

The gcc41 specs were unconditionally adding /usr/lib to the rpath, making
it impossible to use the -z nodefaultlibs linker flag.  RTLD will look in
/usr/lib by default as the last priority of the library search path as
long as the object wasn't built with -z nodefaultlibs.

Also the __DragonFly__ macro was bumped from 1 to 3.  It's supposed to
reflect the major version of DragonFly.

2 years agogcc44: remove /usr/lib from rpath
John Marino [Sat, 24 Mar 2012 08:08:48 +0000 (09:08 +0100)]
gcc44: remove /usr/lib from rpath

The gcc44 specs were unconditionally adding /usr/lib to the rpath, making
it impossible to use the -z nodefaultlibs linker flag.  RTLD will look in
/usr/lib by default as the last priority of the library search path as
long as the object wasn't built with -z nodefaultlibs.

2 years agortld: Implement DT_RUNPATH and -z nodefaultlib
John Marino [Sat, 24 Mar 2012 05:40:50 +0000 (06:40 +0100)]
rtld: Implement DT_RUNPATH and -z nodefaultlib

DT_RUNPATH is incorrectly being considered as an alias of DT_RPATH.  The
purpose of DT_RUNPATH is to have two different types of rpath: one that
can be overridden by the environment variable LD_LIBRARY_PATH and one that
can't.  With the currently implementation, LD_LIBRARY_PATH will always
trump any embedded rpath or runpath tags.

Current path search order by rtld:
==================================
LD_LIBRARY_PATH
DT_RPATH / DT_RUNPATH (always the same)
ldconfig hints file (default: /var/run/ld-elf.so.hints)
/usr/lib

New path search order by rtld:
==============================
DT_RPATH of the calling object if no DT_RUNPATH
DT_RPATH of the main binary if no DT_RUNPATH and binary isn't calling obj
LD_LIBRARY_PATH
DT_RUNPATH
ldconfig hints file
/usr/lib

The new path search matches how the linux runtime loader works.  The other
major added feature is support for linker flag "-z nodefaultlib".  When
this flag is passed to the linker, rtld will skip all references to the
standard library search path ("/usr/lib" in this case but it could handle
more color delimited paths) except in DT_RPATH and DT_RUNPATH.

New path search order by rtld with -z nodefaultlib flag set:
============================================================
DT_RPATH of the calling object if no DT_RUNPATH
DT_RPATH of the main binary if no DT_RUNPATH and binary isn't calling obj
LD_LIBRARY_PATH
DT_RUNPATH
ldconfig hints file (skips all references to /usr/lib)

Currently gcc41 and gcc44 are embedding /usr/lib directly in every
DT_RPATH tag of every binary and shared library it creates.  This is
both unnecessary due to rtld default search path order and it also
defaults the purpose of -z nodefaultlib, so this behavior must be
changed before the flag works.  This will be done in a separate commit.

2 years agoELF: Update header, sync with binutils 2.22
John Marino [Tue, 20 Mar 2012 18:40:41 +0000 (19:40 +0100)]
ELF: Update header, sync with binutils 2.22

2 years agoVFS accounting: fix an issue with unlink operations
Francois Tigeot [Sat, 24 Mar 2012 12:40:27 +0000 (13:40 +0100)]
VFS accounting: fix an issue with unlink operations

* Space counters were previously decreased for every unlink(2)
  on regular files.

* They are only updated for the last link now

2 years agovquota(8): Only count files with more than 2 hard links once
Francois Tigeot [Sat, 24 Mar 2012 13:43:47 +0000 (14:43 +0100)]
vquota(8): Only count files with more than 2 hard links once

True, false, what's the difference ?

2 years agolibc - Do not allow a stuck syslogd to screw up the entire system
Matthew Dillon [Sat, 24 Mar 2012 00:33:51 +0000 (17:33 -0700)]
libc - Do not allow a stuck syslogd to screw up the entire system

* If syslogd gets stuck the socket buffer will still full forever.
  Only try writing a limited number of times before giving up.

2 years agokernel - Add workaround for errata #721 on AMD cpus (found by Matt Dillon)
Matthew Dillon [Fri, 23 Mar 2012 22:49:54 +0000 (15:49 -0700)]
kernel - Add workaround for errata #721 on AMD cpus (found by Matt Dillon)

* Official reference for errata 721:

    http://support.amd.com/us/Processor_TechDocs/41322_10h_Rev_Gd.pdf

* This is the cpu bug found by Matthew Dillon, present on all K10 cores
  (so far).  AMD has indicated that the bug is not present on Bulldozer
  cpus.

* The MSR workaround is now reported and programmed during kernel boot.

* No discernable difference in performance was detected running GCC
  with and without the MSR adjustment.

* Verified to have fixed our test case w/GCC.  It no longer seg-faults.

2 years agorpc.yppasswdd(8): Fix some warnings and raise WARNS to 5.
Sascha Wildner [Fri, 23 Mar 2012 21:06:37 +0000 (22:06 +0100)]
rpc.yppasswdd(8): Fix some warnings and raise WARNS to 5.

2 years agokernel - Improve NFS server error responses when an inode goes away
Matthew Dillon [Fri, 23 Mar 2012 20:38:29 +0000 (13:38 -0700)]
kernel - Improve NFS server error responses when an inode goes away

* When an inode goes away and FHTOVP fails return ESTALE instead of
  what the VFS returned.

* Greatly improves the re-acquisition of files on NFS clients which have
  been ripped out by the server or other clients.

2 years agokernel - Fix improper unlock/relock sequence in HAMMER
Matthew Dillon [Fri, 23 Mar 2012 20:36:27 +0000 (13:36 -0700)]
kernel - Fix improper unlock/relock sequence in HAMMER

* VOP_FSYNC() can be called during a vnode inactivation or reclaim.
  In this case the vnode lock absolutely cannot be released or it
  can create a window of opportunity for another thread that results
  in a panic.

* Fixes a NFS server crash when multiple clients are trying to
  delete/create/write the same file at the same time.

2 years agokernel - Fix bug in SILI, remove debugging in AHCI
Matthew Dillon [Fri, 23 Mar 2012 16:06:57 +0000 (09:06 -0700)]
kernel - Fix bug in SILI, remove debugging in AHCI

* Fix the same unlock/lock sequence bug in the SILI driver that was
  fixed in the AHCI driver.

* Remove a flag that was being added to the service set in AHCI for
  debugging purposes.

2 years agokernel - Fix another AHCI bug
Matthew Dillon [Fri, 23 Mar 2012 08:47:48 +0000 (01:47 -0700)]
kernel - Fix another AHCI bug

* Remove the unlock/lock sequences around the xpt_done() calls.  These
  temporary unlocks create a gap which can allow another interrupt to
  squeeze in and interfere with the interrupt thread that is already
  running, resulting in corruption.

  This bug occurs under very heavy loads, and typically required multiple
  concurrent ops to a SSD to trigger.

* Add additional assertions to catch issues and reorder one of the
  chiploads.

* This is a bit non-optimal, be on the lookout for deadlocks in case it
  turns out that holding the lock is a bad idea.

2 years agotcp/sack: Add comment about the implemented TCP/SACK related RFCs
Sepherosa Ziehau [Fri, 23 Mar 2012 06:48:26 +0000 (14:48 +0800)]
tcp/sack: Add comment about the implemented TCP/SACK related RFCs

2 years agokernel - Fix mount refs interactions and umount races
Matthew Dillon [Fri, 23 Mar 2012 04:37:25 +0000 (21:37 -0700)]
kernel - Fix mount refs interactions and umount races

* It is possible for a umount to race other operations on active mount
  point, causing one or the other to deadlock.

* vfs_busy()/vfs_unbusy() now incr/decr mp->mnt_refs.

* cache_findmount() now increments mp->mnt_refs, and add a new API
  function cache_dropmount() which decrements it.

2 years agokernel - Fix three AHCI bugs
Matthew Dillon [Fri, 23 Mar 2012 04:31:31 +0000 (21:31 -0700)]
kernel - Fix three AHCI bugs

* This fixes spurious timeouts which occur on SMP boxes with faster devices
  (such as SSDs or more recent hard drives)

* The global interrupt status register appears to be latched on some parts
  rather than wire-or.  Clearing it after signaling the port threads or
  processing the interrupt can cause interrupts to be lost.

* In cases where it is actually wire-or we may get a double-interrupt,
  but stability is more important here.

* Fix the port signaling code.  The mask was being cleared with the
  port interlock released.  It has to be cleared when the interlock is
  held.

* Reorder the per-port interrupt status register clearing code in two
  places to execute before processing the operation rather than after,
  which may fix another source of lost interrupts.

2 years agokernel - Cluster fixes + Enable clustering for HAMMER1
Matthew Dillon [Thu, 22 Mar 2012 23:45:55 +0000 (16:45 -0700)]
kernel - Cluster fixes + Enable clustering for HAMMER1

* Add cluster_awrite(), which replaces vfs_bio_awrite() and has the same
  basic semantics as bawrite().

* Remove vfs_bio_awrite(), which had an odd API that required the buffer
  to be locked but not removed from its queues.

* Make cluster operations work on disk device buffers as well as on
  regular files.

* Add a blkflags argument to getcacheblk(), allowing GETBLK_NOWAIT to
  be passed to it.

* Enhance cluster_wbuild() to support cluster_awrite() by having it take
  an optional bp to incorporate into the cluster.  The caller disposes of
  the bp by calling bawrite() if the cluster_wbuild() code could not use it.

* Certain adjustments to cluster_write() and related code in checking against
  the file EOF to not break when variable block sizes are used.

* Fix a bug in calls made to buf_checkwrite().  The caller is required to
  initiate the I/O if the function returns good (0).  HAMMER1 uses this
  save side effects and blows up if the I/O is then not initiated.

* Enable clustering in HAMMER1 for both data and meta-data.

2 years agokernel/kobj: Put the default kobj_method inside the kobjop_desc struct.
Sascha Wildner [Thu, 22 Mar 2012 18:35:13 +0000 (19:35 +0100)]
kernel/kobj: Put the default kobj_method inside the kobjop_desc struct.

Also, make kobj_methods constant. See FreeBSD's r227343 and r227384 for
more information.

This change reduces the size of a LINT64 kernel by 18KB and our source
by 7 lines!

Taken-from: FreeBSD

2 years agoVFS accounting: handle file truncation on open(2)
Francois Tigeot [Thu, 22 Mar 2012 16:51:47 +0000 (17:51 +0100)]
VFS accounting: handle file truncation on open(2)

* Files succesfully opened with O_TRUNC are truncated to zero length.
  This case was not previously handled, leading to a growing drift
  between VFS counters and reality.

* Fix a buildworld issue caused by the last VFS accounting commit

2 years agopstat.8: The fstat manpage is in section 1.
Sascha Wildner [Thu, 22 Mar 2012 15:50:05 +0000 (16:50 +0100)]
pstat.8: The fstat manpage is in section 1.

2 years agoVFS accounting: isolate the code to find the real mp
Fran├žois Tigeot [Thu, 22 Mar 2012 12:48:33 +0000 (13:48 +0100)]
VFS accounting: isolate the code to find the real mp

* It was not specific to vop_write()

* Put it in a standalone vq_vptomp() function so that it may be easily
  used in other places

2 years agokernel - Add argument to nvtruncbuf()
Matthew Dillon [Tue, 20 Mar 2012 22:10:02 +0000 (15:10 -0700)]
kernel - Add argument to nvtruncbuf()

* Add a 'trivial' arg to nvtruncbuf() that works similarly to
  nvextendbuf().

  This will allow hammer2 to tell nvtruncbuf() not to mess with the
  buffer that overlaps EOF, so hammer2 can mess with it atomically.

2 years agompt(4): Fix an issue that caused the driver to attach to mfi(4) cards.
Sascha Wildner [Tue, 20 Mar 2012 20:19:25 +0000 (21:19 +0100)]
mpt(4): Fix an issue that caused the driver to attach to mfi(4) cards.

FreeBSD's commit message (r232411) explains it:

Fix a problem that was causing the mpt(4) driver to attach to MegaRAID
cards that should be handled by the mfi(4) driver.

The root of the problem is that the mpt(4) driver was masking off the
bottom bit of the PCI device ID when deciding which cards to attach to.

It appears that a number of the mpt(4) Fibre Channel cards had a LAN
variant whose PCI device ID was just one bit off from the FC card's device
ID.  The FC cards were even and the LAN cards were odd.

The problem was that this pattern wasn't carried over on the SAS and
parallel SCSI mpt(4) cards.  Luckily the SAS and parallel SCSI PCI device
IDs were either even numbers, or they would get masked to a supported
adjacent PCI device ID, and everything worked well.

Now LSI is using some of the odd-numbered PCI device IDs between the 3Gb
SAS device IDs for their new MegaRAID cards.  This is causing the mpt(4)
driver to attach to the RAID cards instead of the mfi(4) driver.

The solution is to stop masking off the bottom bit of the device ID, and
explicitly list the PCI device IDs of all supported cards.

This change should be a no-op for mpt(4) hardware.  The only intended
functional change is that for the 929X, the is_fc variable gets set.  It
wasn't being set previously, but needs to be because the 929X is a Fibre
Channel card.

2 years agoaesni(4): Move some unused variables into the #if 0'd parts.
Sascha Wildner [Tue, 20 Mar 2012 15:32:45 +0000 (16:32 +0100)]
aesni(4): Move some unused variables into the #if 0'd parts.

2 years agondis(4): Use the device_t for getting the softc.
Sascha Wildner [Tue, 20 Mar 2012 12:25:43 +0000 (13:25 +0100)]
ndis(4): Use the device_t for getting the softc.

2 years agokernel - Fix buffer cache deadlock due to multiple buffer cache sizes
Matthew Dillon [Tue, 20 Mar 2012 04:14:13 +0000 (21:14 -0700)]
kernel - Fix buffer cache deadlock due to multiple buffer cache sizes

* The buffer daemon was triggering off of dirtybufspace[hw], comparing
  it against bufspace.  However, bufspace is an aggregation of the
  total buffer kva reserved, not the dirty count based on b_bufsize.

* Add dirtykvasize to track the dirty space in terms of the kva reservation
  and change the buffer daemons to use that instead.

* systat and other displays still use the bufsize, which is a more
  accurate indicator for human consumption.

2 years agokernel - Fix clustered read bug (2)
Matthew Dillon [Tue, 20 Mar 2012 00:52:48 +0000 (17:52 -0700)]
kernel - Fix clustered read bug (2)

* Fix an edge case that can cause hammer1 to panic.  The read-ahead
  must not go past the filesize limit.  HAMMER1 uses this to
  implement two different logical buffer sizes for regular files.

2 years agokernel - Fix clustered read bug
Matthew Dillon [Tue, 20 Mar 2012 00:11:09 +0000 (17:11 -0700)]
kernel - Fix clustered read bug

* cluster_read() was improperly reducing the 'maxra' variable when
  handling the read-ahead mark, creating a degenerate situation which
  would cause only the first few burst reads from a file to cluster,
  and the remainder to read-ahead but not cluster.

2 years agodma.8: Avoid a dead link in the online manual pages.
Sascha Wildner [Mon, 19 Mar 2012 21:08:36 +0000 (22:08 +0100)]
dma.8: Avoid a dead link in the online manual pages.

For the purposes of the manpage, referring to sendmail(8) (where a
manual page is available) alone is enough.

Reported-by: Loganaden Velvindron
2 years agokernel: Remove two unneeded inclusions of <sys/cdefs.h>.
Sascha Wildner [Mon, 19 Mar 2012 19:31:13 +0000 (20:31 +0100)]
kernel: Remove two unneeded inclusions of <sys/cdefs.h>.

2 years agotcp/md5sig: White space and indentation cleanup
Sepherosa Ziehau [Mon, 19 Mar 2012 06:33:45 +0000 (14:33 +0800)]
tcp/md5sig: White space and indentation cleanup

2 years agokernel/acpi: Add a missing file to the module.
Sascha Wildner [Sun, 18 Mar 2012 22:30:50 +0000 (23:30 +0100)]
kernel/acpi: Add a missing file to the module.

Reported-by: tuxillo
2 years ago<sys/gmon.h>: Add prototypes for moncontrol() and monstartup().
Sascha Wildner [Sun, 18 Mar 2012 12:31:33 +0000 (13:31 +0100)]
<sys/gmon.h>: Add prototypes for moncontrol() and monstartup().

2 years ago<uuid.h>: Add four missing prototypes.
Sascha Wildner [Sun, 18 Mar 2012 11:25:26 +0000 (12:25 +0100)]
<uuid.h>: Add four missing prototypes.

For uuid_enc_le(), uuid_dec_le(), uuid_enc_be() and uuid_dec_be().

While here, do a little whitespace cleanup.

Taken-from: FreeBSD

2 years ago<sys/socket.h>: Add missing prototype for sockatmark().
Sascha Wildner [Sun, 18 Mar 2012 12:29:24 +0000 (13:29 +0100)]
<sys/socket.h>: Add missing prototype for sockatmark().

2 years agoopieinfo(1): Raise WARNS to 1.
Sascha Wildner [Sun, 18 Mar 2012 09:50:47 +0000 (10:50 +0100)]
opieinfo(1): Raise WARNS to 1.

2 years agortld: fixing bad patch
John Marino [Sun, 18 Mar 2012 02:30:43 +0000 (03:30 +0100)]
rtld: fixing bad patch

This code should have been part of the last rtld commit, but apparently
the wrong patch was committed.

2 years agocrtstuff: Stop calling _init/_fini methods on dyn binaries
John Marino [Sat, 17 Mar 2012 19:05:10 +0000 (20:05 +0100)]
crtstuff: Stop calling _init/_fini methods on dyn binaries

The runtime linker has already been modified to add the ability to call
_init and _fini methods on the main executable.  Previously it would
only do this for shared libraries.

A new ELF note with value 0x20 is added to signify that the crt code
no longer calls these methods so that rtld will know that it needs
to do it.  The name of the note section has been changed from
.note.ABI-tag to .note.tag.  There was an option to put the two notes
each in their own section, or put both notes in the same section.  The
latter was selected.  Since the second note is not an ABI-tag, the
section was simply renamed.  This doesn't cause any issues.

Taken from: FreeBSD SVN 232832 (2012-03-11)

2 years agortld: Add main object initialization and finalization
John Marino [Sat, 17 Mar 2012 18:52:17 +0000 (19:52 +0100)]
rtld: Add main object initialization and finalization

Since DragonFly's inception, crt1 has called _init and _fini functions of
the binary rather than leaving this task to the runtime linker.  Likely
this was done in order to use the same crt code for both statically and
dynamically linked binaries.

When FreeBSD imported DragonFly's preinit, init, and fini array handling
code, they moved the _init and _fini calls to rtld.  In order for rtld to
maintain compatiblity with binaries created with crt code that call these
functions, rtld looks for an ELF note that indicates the binary was built
with a crt that does not call _init and _fini.

This commit imports this capability as well as synchronizes some of the
changes FreeBSD made to the DragonFly code.  Many of the differences
weren't necessary, but some represented improvements.  In any case, it
benefits both operating systems to minimize the differences between the
runtime linkers in order to continue to collaborate and share new
features.

Taken from: FreeBSD SVN 232831 (2012-03-11)

One key difference between the DragonFly and FreeBSD implementations is
that FreeBSD will not properly execute a binary that requires
initialization and/or finalization if the PT_NOTE program header is
intentionally omitted using a custom linker script and the PHDRS
directive.  In the same case, DragonFly will look to see if the main
binary contains a gnu hash dynamic tag.  If it does, it assumes the binary
was built with the new crt, which is a very good assumption.  Since gnu
hash was inserted by default into binaries only a week ago, there's only
a window of few days where this isn't true, and PT_NOTE-free binaries are
very rare.

2 years agocrtstuff: refactor
John Marino [Sat, 17 Mar 2012 15:37:14 +0000 (16:37 +0100)]
crtstuff: refactor

Add common/initfini.c file to provide common prototypes and functions
to all DragonFly arches, particularly focusing on the various types
of initialization and finalization.

2 years agocrtstuff: Move ELF note definitions to dedicated header
John Marino [Sat, 17 Mar 2012 11:15:04 +0000 (12:15 +0100)]
crtstuff: Move ELF note definitions to dedicated header

Currently only note.ABI-tag is defined in crt files for the purpose
of identifying the operating system and version that created the binary.
Soon a new type of note will be created to indicate whether crt is
responsible for calling the _init function or not.  Creating a separate
header avoids duplicate note definitions.

2 years agocrtstuff: Move 6 identical sed patterns to variable
John Marino [Sat, 17 Mar 2012 10:45:02 +0000 (11:45 +0100)]
crtstuff: Move 6 identical sed patterns to variable

This note.ABI-tag pattern will be changed in an upcoming commit.
Taken from: FreeBSD SVN 232832 (2012-03-11)

2 years agortld: Don't use toupper function in rtld_printf.c
John Marino [Sat, 17 Mar 2012 10:23:45 +0000 (11:23 +0100)]
rtld: Don't use toupper function in rtld_printf.c

The libc function toupper may not function correctly due to TLS use when
LD_DEBUG is in effect.  Rather than determine this for sure, just use the
FreeBSD approach of eliminating ctype.h macro.

Taken from: FreeBSD SVN 232729 (2012-03-09)

2 years agocrtstuff: Remove unused crtbegin/crtend support files
John Marino [Sat, 17 Mar 2012 14:46:52 +0000 (15:46 +0100)]
crtstuff: Remove unused crtbegin/crtend support files

These files were imported:
commit 9b1e249481830caa2004c437ecda34c48b92798d (joerg, 2004-06-14)

The files stop being useful here:
commit fd8b66cd017f88e1baffc6426ca74ea7f57dbadd (corecode, 2007-01-15)

2 years agokernel/acpi: Bring in acpi_wmi(4) from FreeBSD, which acpi_hp(4) needs.
Sascha Wildner [Sat, 17 Mar 2012 16:53:51 +0000 (17:53 +0100)]
kernel/acpi: Bring in acpi_wmi(4) from FreeBSD, which acpi_hp(4) needs.

Also, hook acpi_hp(4) back into the build.

Some fixes to acpi_hp(4) were brought in, too.

It is all untested, unfortunately. The hope is, that someone with a
HP laptop might check it out.

2 years agokernel: Add sbuf_done() (taken from FreeBSD).
Sascha Wildner [Sat, 17 Mar 2012 16:24:04 +0000 (17:24 +0100)]
kernel: Add sbuf_done() (taken from FreeBSD).

2 years agokernel: Really fix DEV_SUPPORT for sys/dev/virtual.
Sascha Wildner [Sat, 17 Mar 2012 16:00:46 +0000 (17:00 +0100)]
kernel: Really fix DEV_SUPPORT for sys/dev/virtual.

Reported-by: aggelos
2 years agovkernel: Fix DEV_SUPPORT.
Sascha Wildner [Sat, 17 Mar 2012 15:26:43 +0000 (16:26 +0100)]
vkernel: Fix DEV_SUPPORT.

2 years agodev/virtual/vkernel Makefiles: Remove bogus .PATHs.
Sascha Wildner [Sat, 17 Mar 2012 14:44:17 +0000 (15:44 +0100)]
dev/virtual/vkernel Makefiles: Remove bogus .PATHs.

2 years agovkernel: Move things from dev/virtual to dev/virtual/vkernel.
Sascha Wildner [Sat, 17 Mar 2012 14:24:53 +0000 (15:24 +0100)]
vkernel: Move things from dev/virtual to dev/virtual/vkernel.

This is so we can later put any other "virtual" device drivers in their
own subdirectories in dev/virtual.

2 years agokernel/{a,b}list: Remove some unused variables in the debug code.
Sascha Wildner [Sat, 17 Mar 2012 11:08:27 +0000 (12:08 +0100)]
kernel/{a,b}list: Remove some unused variables in the debug code.

2 years agokernel/gre: Remove unused variables.
Sascha Wildner [Sat, 17 Mar 2012 11:03:49 +0000 (12:03 +0100)]
kernel/gre: Remove unused variables.

2 years agokernel/hammer: Remove an unused variable.
Sascha Wildner [Sat, 17 Mar 2012 10:37:51 +0000 (11:37 +0100)]
kernel/hammer: Remove an unused variable.

2 years agoalc(4): Ifdef out an unused variable and assignment.
Sascha Wildner [Sat, 17 Mar 2012 10:27:03 +0000 (11:27 +0100)]
alc(4): Ifdef out an unused variable and assignment.

2 years agokernel/sili: Actually print the generation.
Sascha Wildner [Sat, 17 Mar 2012 10:04:59 +0000 (11:04 +0100)]
kernel/sili: Actually print the generation.

2 years agortld: Shrink by eliminating stdio
John Marino [Fri, 16 Mar 2012 19:46:52 +0000 (20:46 +0100)]
rtld: Shrink by eliminating stdio

Eliminate stdio for parsing libmap.conf, and instead parse it from direct
mapping.  Also stop using strerror(3) in rtld which sucks in msgcat and
stdio.  Instead directly access sys_errlist array of error messages with
private rtld_strerror() function.

Results on x86_64 (includes debug symbols):

> size /usr/libexec/ld-elf.so.2*
   text    data     bss     dec     hex filename
  95294    1560    7680  104534   19856 /usr/libexec/ld-elf.so.2
 108830    3128   18216  130174   1fc7e /usr/libexec/ld-elf.so.2.old

> ls -al /usr/libexec/ld-elf.so.2*
-r-xr-xr-x  1 root  wheel  305763 Mar 16 20:33 /usr/libexec/ld-elf.so.2
-r-xr-xr-x  1 root  wheel  370392 Mar 14 00:02 /usr/libexec/ld-elf.so.2.old

Taken from:
FreeBSD SVN 232862 (2012-03-12)
FreeBSD SVN 232974 (2012-03-14)

2 years agotcp: Remove the workaround for the old servers in the retransmit timeout
Sepherosa Ziehau [Fri, 16 Mar 2012 10:53:10 +0000 (18:53 +0800)]
tcp: Remove the workaround for the old servers in the retransmit timeout

These old timers don't understand timestamp and window scale options;
they really should be retired.

2 years agotcp: Lowering initial RTO according to RFC 6298
Sepherosa Ziehau [Fri, 16 Mar 2012 10:23:47 +0000 (18:23 +0800)]
tcp: Lowering initial RTO according to RFC 6298

The SYN retransmit backoff is roughly according to the tcp_syn_backoff[]
as following:
                                      15s
tcp_syn_backoff[]     rexmt: 3 3 3 3 3 | 6 12 24 (ended at 57s)
tcp_syn_backoff_low[] rexmt: 1 2 4 4 4 | 8 16 16 (ended at 55s)

It is on by default and could be turned off by using sysctl
net.inet.tcp.low_rtobase

2 years agotcp: More RFC 3390 conforming
Sepherosa Ziehau [Fri, 16 Mar 2012 08:51:58 +0000 (16:51 +0800)]
tcp: More RFC 3390 conforming

If SYN or SYN|ACK was lost, the IW should be set to one MSS

This affects initial snd_cwnd and snd_cwnd after a long idle period

2 years agotcp_input: Factor out tcp_established()
Sepherosa Ziehau [Fri, 16 Mar 2012 07:43:19 +0000 (15:43 +0800)]
tcp_input: Factor out tcp_established()

2 years agotcp/syncache: Simplify syncache_add() interface
Sepherosa Ziehau [Fri, 16 Mar 2012 06:56:20 +0000 (14:56 +0800)]
tcp/syncache: Simplify syncache_add() interface

Since the passed in 'sop' are always NULL upon returning, we do not need
to pass in "struct socket **"; just pass in the listen socket, i.e.
struct socket *.

Nuke the code follows the syncache_add(), which acts upon non-NULL 'sop'
returns from syncache_add().  These codes are actually never executed.

2 years agojoin.1: Remove useless .Bk/.Ek
Sascha Wildner [Fri, 16 Mar 2012 04:06:37 +0000 (05:06 +0100)]
join.1: Remove useless .Bk/.Ek

2 years agofstat(1): Little fix in a cast.
Sascha Wildner [Fri, 16 Mar 2012 02:16:13 +0000 (03:16 +0100)]
fstat(1): Little fix in a cast.

2 years agoLINT/LINT64 configs: Reduce differences.
Sascha Wildner [Fri, 16 Mar 2012 02:11:54 +0000 (03:11 +0100)]
LINT/LINT64 configs: Reduce differences.

2 years agofstat - Include current offset in output
Matthew Dillon [Fri, 16 Mar 2012 00:40:08 +0000 (17:40 -0700)]
fstat - Include current offset in output

* When output regular file data also output the current seek offset,
  which can be very useful information.

2 years agoboot - Fix overflow in CD I/O code
Matthew Dillon [Fri, 16 Mar 2012 00:36:02 +0000 (17:36 -0700)]
boot - Fix overflow in CD I/O code

* Fix an overflow in cdb2devb():
from ((bno) * ISO_DEFAULT_BLOCK_SIZE / DEV_BSIZE)
to   ((bno) * (ISO_DEFAULT_BLOCK_SIZE / DEV_BSIZE))

* Adjust several fields from signed -> unsigned

2 years agokernel: Add mps(4) to our GENERIC kernels.
Sascha Wildner [Thu, 15 Mar 2012 18:30:22 +0000 (19:30 +0100)]
kernel: Add mps(4) to our GENERIC kernels.

2 years agoarp: Don't send gratuitous ARP for devices that are not ethernet typed
Sepherosa Ziehau [Thu, 15 Mar 2012 10:22:20 +0000 (18:22 +0800)]
arp: Don't send gratuitous ARP for devices that are not ethernet typed

Reported-by: alexh@ and swildner@
2 years agoLINT64: Adjust comment about TCP_MD5SIG; we use TCP_SIGNATURE_ENABLE
Sepherosa Ziehau [Thu, 15 Mar 2012 09:49:58 +0000 (17:49 +0800)]
LINT64: Adjust comment about TCP_MD5SIG; we use TCP_SIGNATURE_ENABLE

2 years agotcp/md5sig: Disallow enable/disable TCP MD5SIG after connect(2)/listen(2)
Sepherosa Ziehau [Thu, 15 Mar 2012 09:48:05 +0000 (17:48 +0800)]
tcp/md5sig: Disallow enable/disable TCP MD5SIG after connect(2)/listen(2)

2 years agotcp_input: Always call tcp_mss(), so snd_cwnd could be properly updated
Sepherosa Ziehau [Thu, 15 Mar 2012 07:01:29 +0000 (15:01 +0800)]
tcp_input: Always call tcp_mss(), so snd_cwnd could be properly updated

2 years agoftpd(8): Remove OLD_SETPROCTITLE related dead code.
Sascha Wildner [Wed, 14 Mar 2012 18:26:20 +0000 (19:26 +0100)]
ftpd(8): Remove OLD_SETPROCTITLE related dead code.

2 years agoioapic: By default, disable I/O APIC if we are booting on a virtual machine
Sepherosa Ziehau [Wed, 14 Mar 2012 03:18:44 +0000 (11:18 +0800)]
ioapic: By default, disable I/O APIC if we are booting on a virtual machine

I/O APIC causes too much trouble on virtual machines; simply disable
I/O APIC for virtual machines by default.

You could always explicitly enable I/O APIC on virtual machines by
setting tunable hw.ioapic_enable to 1

Thank swildner@ for hint on virtual machine detection method.

Reported-by: many
2 years agospacialreg: Add CPUID2_VMM according to AMD's CPUID specification
Sepherosa Ziehau [Wed, 14 Mar 2012 03:18:00 +0000 (11:18 +0800)]
spacialreg: Add CPUID2_VMM according to AMD's CPUID specification

2 years agogcc44: Update version to gcc-4.4.7 RELEASE
John Marino [Tue, 13 Mar 2012 22:30:14 +0000 (23:30 +0100)]
gcc44: Update version to gcc-4.4.7 RELEASE

The previous version of gcc was a pre-release snapshot of 4.4.7, dated
2011-10-25.  This is the final release of gcc-4.4.  The gcc-4.4 branch
has officially been closed by the gcc project.

Also cfgloop.c was added to modified files list as a result of Matt
Dillon's work-around for the AMD bug.

2 years agoMerge branch 'vendor/GCC44'
John Marino [Tue, 13 Mar 2012 23:06:56 +0000 (00:06 +0100)]
Merge branch 'vendor/GCC44'

2 years agoUpgrade GCC from 4.4.7 snapshot 2011-10-25 to 4.4.7-RELEASE vendor/GCC44
John Marino [Tue, 13 Mar 2012 22:22:06 +0000 (23:22 +0100)]
Upgrade GCC from 4.4.7 snapshot 2011-10-25 to 4.4.7-RELEASE

2 years agopstat.8: add reference to the fstat(8) command.
Chris Turner [Tue, 13 Mar 2012 21:13:35 +0000 (21:13 +0000)]
pstat.8: add reference to the fstat(8) command.

Seems relavent, and kept me from discovering the handyness of fstat(8).

2 years agoMerged thread-specific cleanup patch from FreeBSD.
Aycan iRiCAN [Tue, 13 Mar 2012 20:48:27 +0000 (22:48 +0200)]
Merged thread-specific cleanup patch from FreeBSD.

  See: http://lists.freebsd.org/pipermail/freebsd-threads/2009-June/004563.html

2 years agorc.conf.5: Fix the wlan setup example.
Sascha Wildner [Sun, 11 Mar 2012 18:05:08 +0000 (19:05 +0100)]
rc.conf.5: Fix the wlan setup example.

Submitted-by: Johannes Hofmann <johannes.hofmann@gmx.de>
Dragonfly-bug: <https://bugs.dragonflybsd.org/issues/2330>

2 years ago<sys/cdefs.h>: For C++, unhide our interfaces via __{BEGIN,END}_DECLS.
Sascha Wildner [Sun, 11 Mar 2012 12:50:29 +0000 (13:50 +0100)]
<sys/cdefs.h>: For C++, unhide our interfaces via __{BEGIN,END}_DECLS.

This follows up on a previous (pthread specific) commit by alexh
(e7322b09faff75b1298e9bfe444633425d173536) that used a per-proto
macro. Revert this commit, too. In principle, we do it like NetBSD
now.

See http://gcc.gnu.org/wiki/Visibility in the GCC wiki for details
on the issue.

This solution was suggested by Martin Husemann in a thread about
xulrunner building issues:

http://mail-index.netbsd.org/tech-pkg/2012/03/11/msg008680.html

Reported-and-tested-by: marino and others
2 years agogcc44: Instruct linkers to create GNU hash tables
John Marino [Sun, 11 Mar 2012 00:45:39 +0000 (01:45 +0100)]
gcc44: Instruct linkers to create GNU hash tables

The real-time linker has just been taught how to use GNU hash tables
to speed up symbol lookup.  However, the linkers only generate SysV
hashes by default, so the specs file is being altered to generate
both types of hashes for every shared library and dynamic executable
for a while.  Maybe after a release or two we can consider only
generating the superior GNU hash, which will break forward compatibility
with older releases.

2 years agortld: Support DT_GNU_HASH (startup performance increase)
John Marino [Fri, 9 Mar 2012 07:40:34 +0000 (08:40 +0100)]
rtld: Support DT_GNU_HASH (startup performance increase)

This is another "First BSD to get" feature that Linux and Solaris
had years ago.  Essentially DT_GNU_HASH is a GNU extension to the ELF
format that allows symbol searches much faster than the System V ABI
standard hash does.  Both versions of our binutils have the capability
of generating GNU hashes alongside of (or instead of) the SysV hash.

The benefit comes at the real-time link stage when the rtld is
searching the libraries for symbols.  For very large programs
written in languages such as c++ that tend to link in many libraries
with many symbols, the reduction in start-time can be dramatic.

According to benchmarks done by binutils team in 2006, more than 90% of
the symbol queries of OpenOffice Writer are rejected by the Bloom filter
before the string comparison takes place:

http://sources.redhat.com/ml/libc-alpha/2006-07/msg00034.html

2 years agoMerge branch 'master' of git://git.dragonflybsd.org/dragonfly
Chris Turner [Sat, 10 Mar 2012 11:43:41 +0000 (11:43 +0000)]
Merge branch 'master' of git://git.dragonflybsd.org/dragonfly

2 years agopkill(1): add '-j jid' flag to restrict matches to jailed processes.
Chris Turner [Sat, 10 Mar 2012 11:37:48 +0000 (11:37 +0000)]
pkill(1): add '-j jid' flag to restrict matches to jailed processes.

Add a '-j' option to pgrep(1)/pkill(1).
Update manual page to reflect usage.

As DragonFlyBSD did not have this option previously, the 'COMPATIBILITY'
notes outlined in FreeBSD's '-j' options do not apply - namely,
the '-j 0' option defaults to non-jailed processes, and '-1' is used
to indicate all jailed processes should be matched. Also, the 'any'/'none'
string options were not ported as they require more invasive changes.

Inspired-by: FreeBSD
2 years agoRemove the old (and broken) kzip(8) utility.
Sascha Wildner [Sat, 10 Mar 2012 08:57:49 +0000 (09:57 +0100)]
Remove the old (and broken) kzip(8) utility.