From 723180da5978dcc980d754534061238273453b45 Mon Sep 17 00:00:00 2001 From: Vincenzo Maffione Date: Fri, 7 Feb 2020 19:26:26 +0000 Subject: [PATCH 001/144] netmap: improve netmap(4) and vale(4) man pages Clean up obsolete sysctl descriptions and add missing ones. PR: 243838 Reviewed by: bcr MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D23546 --- share/man/man4/netmap.4 | 27 ++++++++++++++++++++------- share/man/man4/vale.4 | 20 ++++++-------------- sys/dev/netmap/netmap_kern.h | 2 -- 3 files changed, 26 insertions(+), 23 deletions(-) diff --git a/share/man/man4/netmap.4 b/share/man/man4/netmap.4 index 91c0e3728cd..8ea34cdac22 100644 --- a/share/man/man4/netmap.4 +++ b/share/man/man4/netmap.4 @@ -27,7 +27,7 @@ .\" .\" $FreeBSD$ .\" -.Dd November 8, 2019 +.Dd February 6, 2020 .Dt NETMAP 4 .Os .Sh NAME @@ -694,7 +694,7 @@ or are called with a write event (POLLOUT/wfdset) or a full ring. .Pp When registering a virtual interface that is dynamically created to a -.Xr vale 4 +.Nm VALE switch, we can specify the desired number of rings (1 by default, and currently up to 16) on it using nr_tx_rings and nr_rx_rings fields. .It Dv NIOCTXSYNC @@ -861,8 +861,10 @@ The sysctl variable .Va dev.netmap.admode globally controls how netmap mode is implemented. .Sh SYSCTL VARIABLES AND MODULE PARAMETERS -Some aspect of the operation of +Some aspects of the operation of .Nm +and +.Nm VALE are controlled through sysctl variables on .Fx .Em ( dev.netmap.* ) @@ -883,15 +885,14 @@ Number of rings used for emulated netmap mode Ring size used for emulated netmap mode .It Va dev.netmap.generic_mit: 100000 Controls interrupt moderation for emulated mode -.It Va dev.netmap.mmap_unreg: 0 .It Va dev.netmap.fwd: 0 Forces NS_FORWARD mode -.It Va dev.netmap.flags: 0 .It Va dev.netmap.txsync_retry: 2 +Number of txsync loops in the +.Nm VALE +flush function .It Va dev.netmap.no_pendintr: 1 Forces recovery of transmit buffers on system calls -.It Va dev.netmap.mitigate: 1 -Propagates interrupt mitigation to user processes .It Va dev.netmap.no_timestamp: 0 Disables the update of the timestamp in the netmap ring .It Va dev.netmap.verbose: 0 @@ -914,6 +915,18 @@ as it impacts the total amount of memory used by netmap. .It Va dev.netmap.if_curr_num: 0 .It Va dev.netmap.if_curr_size: 0 Actual values in use. +.It Va dev.netmap.priv_buf_num: 4098 +.It Va dev.netmap.priv_buf_size: 2048 +.It Va dev.netmap.priv_ring_num: 4 +.It Va dev.netmap.priv_ring_size: 20480 +.It Va dev.netmap.priv_if_num: 2 +.It Va dev.netmap.priv_if_size: 1024 +Sizes and number of objects (netmap_if, netmap_ring, buffers) +for private memory regions. +A separate memory region is used for each +.Nm VALE +port and each pair of +.Nm netmap pipes . .It Va dev.netmap.bridge_batch: 1024 Batch size used when moving packets across a .Nm VALE diff --git a/share/man/man4/vale.4 b/share/man/man4/vale.4 index a3b1bce0985..9128ce68e79 100644 --- a/share/man/man4/vale.4 +++ b/share/man/man4/vale.4 @@ -28,7 +28,7 @@ .\" $FreeBSD$ .\" $Id: $ .\" -.Dd January 9, 2019 +.Dd February 6, 2020 .Dt VALE 4 .Os .Sh NAME @@ -77,21 +77,13 @@ See for details on the API. .Ss LIMITS .Nm -currently supports up to 4 switches, 16 ports per switch, with -1024 buffers per port. -These hard limits will be -changed to sysctl variables in future releases. +currently supports up to 8 switches, with 254 ports per switch. .Sh SYSCTL VARIABLES +See +.Xr netmap 4 +for a list of sysctl variables that affect .Nm -uses the following sysctl variables to control operation: -.Bl -tag -width dev.netmap.verbose -.It dev.netmap.bridge_batch -The maximum number of packets processed internally -in each iteration. -Defaults to 1024, use lower values to trade latency -with throughput. -.It dev.netmap.verbose -Set to non-zero values to enable in-kernel diagnostics. +bridges. .El .Sh EXAMPLES Create one switch, with a traffic generator connected to one diff --git a/sys/dev/netmap/netmap_kern.h b/sys/dev/netmap/netmap_kern.h index 690d45def35..14896ebaa6a 100644 --- a/sys/dev/netmap/netmap_kern.h +++ b/sys/dev/netmap/netmap_kern.h @@ -1591,7 +1591,6 @@ int netmap_adapter_put(struct netmap_adapter *na); #define NETMAP_BUF_BASE(_na) ((_na)->na_lut.lut[0].vaddr) #define NETMAP_BUF_SIZE(_na) ((_na)->na_lut.objsize) extern int netmap_no_pendintr; -extern int netmap_mitigate; extern int netmap_verbose; #ifdef CONFIG_NETMAP_DEBUG extern int netmap_debug; /* for debugging */ @@ -1613,7 +1612,6 @@ enum { /* debug flags */ }; extern int netmap_txsync_retry; -extern int netmap_flags; extern int netmap_generic_hwcsum; extern int netmap_generic_mit; extern int netmap_generic_ringsize; From 5aa0576b330d8ecdf4506b1819c6be838a851e50 Mon Sep 17 00:00:00 2001 From: Ed Maste Date: Fri, 7 Feb 2020 19:53:07 +0000 Subject: [PATCH 002/144] Miscellaneous typo fixes Submitted by: Gordon Bergling Differential Revision: https://reviews.freebsd.org/D23453 --- sys/dev/ixl/if_iavf.c | 2 +- sys/dev/le/lancevar.h | 2 +- sys/dev/pms/RefTisa/discovery/dm/dmdisc.c | 4 ++-- sys/dev/ppbus/lpt.c | 2 +- sys/dev/puc/pucdata.c | 2 +- sys/dev/usb/net/if_axe.c | 2 +- sys/netinet/netdump/netdump_client.c | 2 +- sys/netinet/tcp_sack.c | 2 +- sys/netinet/tcp_stacks/bbr.c | 4 ++-- sys/netinet/tcp_stacks/tcp_bbr.h | 2 +- sys/opencrypto/xform_enc.h | 2 +- usr.bin/truss/syscalls.c | 2 +- usr.sbin/bsdconfig/share/media/network.subr | 2 +- 13 files changed, 15 insertions(+), 15 deletions(-) diff --git a/sys/dev/ixl/if_iavf.c b/sys/dev/ixl/if_iavf.c index 7ff659b78e4..640a9807529 100644 --- a/sys/dev/ixl/if_iavf.c +++ b/sys/dev/ixl/if_iavf.c @@ -705,7 +705,7 @@ iavf_if_init(if_ctx_t ctx) } /* - * iavf_attach() helper function; initalizes the admin queue + * iavf_attach() helper function; initializes the admin queue * and attempts to establish contact with the PF by * retrying the initial "API version" message several times * or until the PF responds. diff --git a/sys/dev/le/lancevar.h b/sys/dev/le/lancevar.h index 87804f84563..2fbbabbf1f0 100644 --- a/sys/dev/le/lancevar.h +++ b/sys/dev/le/lancevar.h @@ -198,7 +198,7 @@ ether_cmp(void *one, void *two) diff |= *a++ - *b++; #else /* - * Most modern CPUs do better with a single expresion. + * Most modern CPUs do better with a single expression. * Note that short-cut evaluation is NOT helpful here, * because it just makes the code longer, not faster! */ diff --git a/sys/dev/pms/RefTisa/discovery/dm/dmdisc.c b/sys/dev/pms/RefTisa/discovery/dm/dmdisc.c index a792fbe1e68..9bee9722cc5 100644 --- a/sys/dev/pms/RefTisa/discovery/dm/dmdisc.c +++ b/sys/dev/pms/RefTisa/discovery/dm/dmdisc.c @@ -5618,7 +5618,7 @@ dmSubReportRemovals( } - /* this function is called at the end of discovery; reinitalizes oneDeviceData->reported */ + /* this function is called at the end of discovery; reinitializes oneDeviceData->reported */ oneDeviceData->reported = agFALSE; return; } @@ -5661,7 +5661,7 @@ dmSubReportChanges( } - /* this function is called at the end of discovery; reinitalizes oneDeviceData->reported */ + /* this function is called at the end of discovery; reinitializes oneDeviceData->reported */ oneDeviceData->reported = agFALSE; return; } diff --git a/sys/dev/ppbus/lpt.c b/sys/dev/ppbus/lpt.c index df0fe573546..30820dc8fc0 100644 --- a/sys/dev/ppbus/lpt.c +++ b/sys/dev/ppbus/lpt.c @@ -272,7 +272,7 @@ lpt_port_test(device_t ppbus, u_char data, u_char mask) * * 2) You should be able to write to and read back the same value * to the control port lower 5 bits, the upper 3 bits are reserved - * per the IBM PC technical reference manauls and different boards + * per the IBM PC technical reference manuals and different boards * do different things with them. Do an alternating zeros, alternating * ones, walking zero, and walking one test to check for stuck bits. * diff --git a/sys/dev/puc/pucdata.c b/sys/dev/puc/pucdata.c index 3edd061ba52..d76669d7e9b 100644 --- a/sys/dev/puc/pucdata.c +++ b/sys/dev/puc/pucdata.c @@ -708,7 +708,7 @@ const struct puc_cfg puc_pci_devices[] = { * The Advantech PCI-1602 Rev. A use the first two ports of an Oxford * Semiconductor OXuPCI954. Note these boards have a hardware bug in * that they drive the RS-422/485 transmitters after power-on until a - * driver initalizes the UARTs. + * driver initializes the UARTs. */ { 0x13fe, 0x1600, 0x1602, 0x0002, "Advantech PCI-1602 Rev. A", diff --git a/sys/dev/usb/net/if_axe.c b/sys/dev/usb/net/if_axe.c index b088ce32c79..800619e3ddb 100644 --- a/sys/dev/usb/net/if_axe.c +++ b/sys/dev/usb/net/if_axe.c @@ -63,7 +63,7 @@ __FBSDID("$FreeBSD$"); * to send any packets. * * Note that this device appears to only support loading the station - * address via autload from the EEPROM (i.e. there's no way to manaully + * address via autload from the EEPROM (i.e. there's no way to manually * set it). * * (Adam Weinberger wanted me to name this driver if_gir.c.) diff --git a/sys/netinet/netdump/netdump_client.c b/sys/netinet/netdump/netdump_client.c index fccef3bb6ab..bd420d3b385 100644 --- a/sys/netinet/netdump/netdump_client.c +++ b/sys/netinet/netdump/netdump_client.c @@ -277,7 +277,7 @@ netdump_dumper(void *priv __unused, void *virtual, } /* - * Perform any initalization needed prior to transmitting the kernel core. + * Perform any initialization needed prior to transmitting the kernel core. */ static int netdump_start(struct dumperinfo *di) diff --git a/sys/netinet/tcp_sack.c b/sys/netinet/tcp_sack.c index 89345bb70cf..80c014f6fa3 100644 --- a/sys/netinet/tcp_sack.c +++ b/sys/netinet/tcp_sack.c @@ -238,7 +238,7 @@ tcp_update_dsack_list(struct tcpcb *tp, tcp_seq rcv_start, tcp_seq rcv_end) } j = 0; for (i = 0; i < n; i++) { - /* we can end up with a stale inital entry */ + /* we can end up with a stale initial entry */ if (SEQ_LT(saved_blks[i].start, saved_blks[i].end)) { tp->sackblks[j++] = saved_blks[i]; } diff --git a/sys/netinet/tcp_stacks/bbr.c b/sys/netinet/tcp_stacks/bbr.c index 97a50e280e0..76ecf5aebab 100644 --- a/sys/netinet/tcp_stacks/bbr.c +++ b/sys/netinet/tcp_stacks/bbr.c @@ -5856,7 +5856,7 @@ tcp_bbr_tso_size_check(struct tcp_bbr *bbr, uint32_t cts) /* * Not enough data has been acknowledged to make a * judgement unless we are hardware TLS. Set up - * the inital TSO based on if we are sending a + * the initial TSO based on if we are sending a * full IW at once or not. */ if (bbr->rc_use_google) @@ -12361,7 +12361,7 @@ bbr_output_wtime(struct tcpcb *tp, const struct timeval *tv) if (IS_FASTOPEN(tp->t_flags) && ((tp->t_state == TCPS_SYN_RECEIVED) || (tp->t_state == TCPS_SYN_SENT)) && - SEQ_GT(tp->snd_max, tp->snd_una) && /* inital SYN or SYN|ACK sent */ + SEQ_GT(tp->snd_max, tp->snd_una) && /* initial SYN or SYN|ACK sent */ (tp->t_rxtshift == 0)) { /* not a retransmit */ return (0); } diff --git a/sys/netinet/tcp_stacks/tcp_bbr.h b/sys/netinet/tcp_stacks/tcp_bbr.h index 98fcb69f968..8667355e148 100644 --- a/sys/netinet/tcp_stacks/tcp_bbr.h +++ b/sys/netinet/tcp_stacks/tcp_bbr.h @@ -598,7 +598,7 @@ struct bbr_control { uint32_t rc_reorder_ts; /* Last time we saw reordering Lock(a) */ uint32_t rc_init_rwnd; /* Initial rwnd when we transitioned */ /*- --- - * used only inital and close + * used only initial and close */ uint32_t rc_high_rwnd; /* Highest rwnd seen */ uint32_t rc_lowest_rtt; /* Smallest RTT we have seen */ diff --git a/sys/opencrypto/xform_enc.h b/sys/opencrypto/xform_enc.h index e2b87f5cb1c..3849dd5d95a 100644 --- a/sys/opencrypto/xform_enc.h +++ b/sys/opencrypto/xform_enc.h @@ -88,7 +88,7 @@ extern struct enc_xform enc_xform_ccm; struct aes_icm_ctx { u_int32_t ac_ek[4*(RIJNDAEL_MAXNR + 1)]; - /* ac_block is initalized to IV */ + /* ac_block is initialized to IV */ u_int8_t ac_block[AESICM_BLOCKSIZE]; int ac_nr; }; diff --git a/usr.bin/truss/syscalls.c b/usr.bin/truss/syscalls.c index a221d76cd32..721fbd23f8d 100644 --- a/usr.bin/truss/syscalls.c +++ b/usr.bin/truss/syscalls.c @@ -908,7 +908,7 @@ print_mask_arg32(bool (*decoder)(FILE *, uint32_t, uint32_t *), FILE *fp, * Add argument padding to subsequent system calls after Quad * syscall arguments as needed. This used to be done by hand in the * decoded_syscalls table which was ugly and error prone. It is - * simpler to do the fixup of offsets at initalization time than when + * simpler to do the fixup of offsets at initialization time than when * decoding arguments. */ static void diff --git a/usr.sbin/bsdconfig/share/media/network.subr b/usr.sbin/bsdconfig/share/media/network.subr index 6e1720034dc..5a03d80e816 100644 --- a/usr.sbin/bsdconfig/share/media/network.subr +++ b/usr.sbin/bsdconfig/share/media/network.subr @@ -51,7 +51,7 @@ NETWORK_INITIALIZED= # initialized and returns success. # # The variables (from variable.subr) used to initialize the network are as -# follows (all of which are configured either automatically or manaully): +# follows (all of which are configured either automatically or manually): # # VAR_IFCONFIG + device_name (e.g., `ifconfig_em0') # Automatically populated but can be overridden in a script. This From c81929d343e34c1dfb0cb8350fd0a76c39a101e1 Mon Sep 17 00:00:00 2001 From: Kyle Evans Date: Fri, 7 Feb 2020 21:36:14 +0000 Subject: [PATCH 003/144] geli taste: allow GELIBOOT tagged providers as well Currently the installer will tag geliboot partitions with both BOOT and GELIBOOT; the former allows the kernel to taste it at boot, while the latter is what loaders keys off of. However, it seems reasonable to assume that if a provider's been tagged with GELIBOOT that the kernel should also take that as a hint to taste/attach at boot. This would allow us to stop tagging GELIBOOT partitions with BOOT in bsdinstall, but I'm not sure that there's a compelling reason to do so any time soon. Reviewed by: oshogbo Differential Revision: https://reviews.freebsd.org/D23387 --- sys/geom/eli/g_eli.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sys/geom/eli/g_eli.c b/sys/geom/eli/g_eli.c index 7b680efbe3d..047c6f78a8f 100644 --- a/sys/geom/eli/g_eli.c +++ b/sys/geom/eli/g_eli.c @@ -1169,7 +1169,8 @@ g_eli_taste(struct g_class *mp, struct g_provider *pp, int flags __unused) if (md.md_provsize != pp->mediasize) return (NULL); /* Should we attach it on boot? */ - if (!(md.md_flags & G_ELI_FLAG_BOOT)) + if (!(md.md_flags & G_ELI_FLAG_BOOT) && + !(md.md_flags & G_ELI_FLAG_GELIBOOT)) return (NULL); if (md.md_keys == 0x00) { G_ELI_DEBUG(0, "No valid keys on %s.", pp->name); From 8e3d7caee552a5c41ffc9a8cfb8ad0067aca0355 Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Fri, 7 Feb 2020 22:21:44 +0000 Subject: [PATCH 004/144] linux futex_put(): do not touch futex after dropping our reference. Reported and tested by: Steve Roome Sponsored by: The FreeBSD Foundation MFC after: 1 week --- sys/compat/linux/linux_futex.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/compat/linux/linux_futex.c b/sys/compat/linux/linux_futex.c index 4f42081156b..35deca0bfdc 100644 --- a/sys/compat/linux/linux_futex.c +++ b/sys/compat/linux/linux_futex.c @@ -329,9 +329,9 @@ futex_put(struct futex *f, struct waiting_proc *wp) f->f_key.shared); LINUX_CTR3(sys_futex, "futex_put uaddr %p ref %d shared %d", f->f_uaddr, f->f_refcount, f->f_key.shared); - FUTEXES_UNLOCK; if (FUTEX_LOCKED(f)) futex_unlock(f); + FUTEXES_UNLOCK; LIN_SDT_PROBE0(futex, futex_put, return); } From fc9134243d12667c90cba83248f1adf1db796adc Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Fri, 7 Feb 2020 22:26:11 +0000 Subject: [PATCH 005/144] acpi_hpet: Add Hygon Dhyana support. Submitted by: Pu Wen MFC after: 1 week Differential revision: https://reviews.freebsd.org/D23555 --- sys/dev/acpica/acpi_hpet.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sys/dev/acpica/acpi_hpet.c b/sys/dev/acpica/acpi_hpet.c index 1114e1fd095..9f92521437f 100644 --- a/sys/dev/acpica/acpi_hpet.c +++ b/sys/dev/acpica/acpi_hpet.c @@ -62,6 +62,7 @@ __FBSDID("$FreeBSD$"); #define HPET_VENDID_AMD 0x4353 #define HPET_VENDID_AMD2 0x1022 +#define HPET_VENDID_HYGON 0x1d94 #define HPET_VENDID_INTEL 0x8086 #define HPET_VENDID_NVIDIA 0x10de #define HPET_VENDID_SW 0x1166 @@ -606,7 +607,8 @@ hpet_attach(device_t dev) * properly, that makes it very unreliable - it freezes after any * interrupt loss. Avoid legacy IRQs for AMD. */ - if (vendor == HPET_VENDID_AMD || vendor == HPET_VENDID_AMD2) + if (vendor == HPET_VENDID_AMD || vendor == HPET_VENDID_AMD2 || + vendor == HPET_VENDID_HYGON) sc->allowed_irqs = 0x00000000; /* * NVidia MCP5x chipsets have number of unexplained interrupt From 53071ed1c96db7f89defc99c95b0ad1031d48f45 Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Fri, 7 Feb 2020 22:28:04 +0000 Subject: [PATCH 006/144] pmc: Add Hygon Dhyana support. To make the PMC tool pmcstat working properly on Hygon platform, add support for Hygon Dhyana family 18h by using the PMC initialization code path of AMD family 17h. Submitted by: Pu Wen MFC after: 1 week Differential revision: https://reviews.freebsd.org/D23562 --- lib/libpmc/libpmc_pmu_util.c | 3 ++- lib/libpmc/pmu-events/arch/x86/mapfile.csv | 1 + sys/dev/hwpmc/hwpmc_amd.c | 3 +++ sys/dev/hwpmc/hwpmc_x86.c | 6 ++++-- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/libpmc/libpmc_pmu_util.c b/lib/libpmc/libpmc_pmu_util.c index 915c6903455..f451c37a059 100644 --- a/lib/libpmc/libpmc_pmu_util.c +++ b/lib/libpmc/libpmc_pmu_util.c @@ -103,7 +103,8 @@ pmu_events_mfr(void) free(buf); return (PMU_INVALID); } - if (strcasestr(buf, "AuthenticAMD") != NULL) + if (strcasestr(buf, "AuthenticAMD") != NULL || + strcasestr(buf, "HygonGenuine") != NULL) mfr = PMU_AMD; else if (strcasestr(buf, "GenuineIntel") != NULL) mfr = PMU_INTEL; diff --git a/lib/libpmc/pmu-events/arch/x86/mapfile.csv b/lib/libpmc/pmu-events/arch/x86/mapfile.csv index 4657c54ccce..86ed1576f45 100644 --- a/lib/libpmc/pmu-events/arch/x86/mapfile.csv +++ b/lib/libpmc/pmu-events/arch/x86/mapfile.csv @@ -41,3 +41,4 @@ AuthenticAMD-23-02,v1,amdfam17h,core AuthenticAMD-23-03,v1,amdfam17h,core AuthenticAMD-23-04,v1,amdfam17h,core AuthenticAMD-23-05,v1,amdfam17h,core +HygonGenuine-24-00,v1,amdfam17h,core diff --git a/sys/dev/hwpmc/hwpmc_amd.c b/sys/dev/hwpmc/hwpmc_amd.c index 8942f38bd0b..c1b850d459f 100644 --- a/sys/dev/hwpmc/hwpmc_amd.c +++ b/sys/dev/hwpmc/hwpmc_amd.c @@ -1089,6 +1089,9 @@ pmc_amd_initialize(void) if (CPUID_TO_FAMILY(cpu_id) == 0x17) snprintf(pmc_cpuid, sizeof(pmc_cpuid), "AuthenticAMD-%d-%02X", CPUID_TO_FAMILY(cpu_id), model); + if (CPUID_TO_FAMILY(cpu_id) == 0x18) + snprintf(pmc_cpuid, sizeof(pmc_cpuid), "HygonGenuine-%d-%02X", + CPUID_TO_FAMILY(cpu_id), model); switch (cpu_id & 0xF00) { #if defined(__i386__) diff --git a/sys/dev/hwpmc/hwpmc_x86.c b/sys/dev/hwpmc/hwpmc_x86.c index b2453f0fe04..2b2596328ec 100644 --- a/sys/dev/hwpmc/hwpmc_x86.c +++ b/sys/dev/hwpmc/hwpmc_x86.c @@ -248,7 +248,8 @@ pmc_md_initialize() struct pmc_mdep *md; /* determine the CPU kind */ - if (cpu_vendor_id == CPU_VENDOR_AMD) + if (cpu_vendor_id == CPU_VENDOR_AMD || + cpu_vendor_id == CPU_VENDOR_HYGON) md = pmc_amd_initialize(); else if (cpu_vendor_id == CPU_VENDOR_INTEL) md = pmc_intel_initialize(); @@ -271,7 +272,8 @@ pmc_md_finalize(struct pmc_mdep *md) { lapic_disable_pmc(); - if (cpu_vendor_id == CPU_VENDOR_AMD) + if (cpu_vendor_id == CPU_VENDOR_AMD || + cpu_vendor_id == CPU_VENDOR_HYGON) pmc_amd_finalize(md); else if (cpu_vendor_id == CPU_VENDOR_INTEL) pmc_intel_finalize(md); From 14d3b069199d6a780cb83f55dfff11ed1ccea69d Mon Sep 17 00:00:00 2001 From: Kyle Evans Date: Fri, 7 Feb 2020 22:36:37 +0000 Subject: [PATCH 007/144] O_SEARCH test: mark revokex an expected fail on NFS The revokex test does not work when the scratch directory is created on NFS. Given the nature of NFS, it likely can never work without looking like a security hole since O_SEARCH would rely on the server knowing that the directory did have +x at the time of open and that it's OK for it to have been revoked based on POSIX specification for O_SEARCH. This does mean that O_SEARCH is only partially functional on NFS in general, but I suspect the execute bit getting revoked in the process is likely not common. Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D23573 --- .../netbsd-tests/lib/libc/c063/t_o_search.c | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/contrib/netbsd-tests/lib/libc/c063/t_o_search.c b/contrib/netbsd-tests/lib/libc/c063/t_o_search.c index 714305e2a0a..414a078011d 100644 --- a/contrib/netbsd-tests/lib/libc/c063/t_o_search.c +++ b/contrib/netbsd-tests/lib/libc/c063/t_o_search.c @@ -34,6 +34,11 @@ __RCSID("$NetBSD: t_o_search.c,v 1.9 2020/02/06 12:18:06 martin Exp $"); #include #include +#ifdef __FreeBSD__ +#include +#else +#include +#endif #include #include @@ -322,6 +327,23 @@ ATF_TC_BODY(o_search_revokex, tc) /* Drop permissions. The kernel must still not check the exec bit. */ ATF_REQUIRE(chmod(DIR, 0000) == 0); + { + const char *fstypename; +#ifdef __FreeBSD__ + struct statfs st; + + fstatfs(dfd, &st); + fstypename = st.f_fstypename; +#else + struct statvfs vst; + + fstatvfs(dfd, &vst); + fstypename = vst.f_fstypename; +#endif + if (strcmp(fstypename, "nfs") == 0) + atf_tc_expect_fail( + "NFS protocol cannot observe O_SEARCH semantics"); + } ATF_REQUIRE(fstatat(dfd, BASEFILE, &sb, 0) == 0); ATF_REQUIRE(close(dfd) == 0); From c77649d8e7ecbeb083a50ff6526844c3b616b2d3 Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Fri, 7 Feb 2020 22:43:58 +0000 Subject: [PATCH 008/144] Add zpcpu_{set,add,sub}_protected. The _protected suffix follows counter(9). --- sys/sys/pcpu.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/sys/sys/pcpu.h b/sys/sys/pcpu.h index afccd9ec26f..f859d09554c 100644 --- a/sys/sys/pcpu.h +++ b/sys/sys/pcpu.h @@ -256,6 +256,24 @@ extern struct pcpu *cpuid_to_pcpu[]; _old; \ }) +#define zpcpu_set_protected(base, val) ({ \ + MPASS(curthread->td_critnest > 0); \ + __typeof(val) *_ptr = zpcpu_get(base); \ + *_ptr = (val); \ +}) + +#define zpcpu_add_protected(base, val) ({ \ + MPASS(curthread->td_critnest > 0); \ + __typeof(val) *_ptr = zpcpu_get(base); \ + *_ptr += (val); \ +}) + +#define zpcpu_sub_protected(base, val) ({ \ + MPASS(curthread->td_critnest > 0); \ + __typeof(val) *_ptr = zpcpu_get(base); \ + *_ptr -= (val); \ +}) + /* * Machine dependent callouts. cpu_pcpu_init() is responsible for * initializing machine dependent fields of struct pcpu, and From ea77ce6ef9d2f3971d1190cf82e3b6f4d45fe433 Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Fri, 7 Feb 2020 22:44:41 +0000 Subject: [PATCH 009/144] rms: use newly added zpcpu routines instead of direct access where appropriate --- sys/kern/kern_rmlock.c | 37 +++++++++++++++---------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/sys/kern/kern_rmlock.c b/sys/kern/kern_rmlock.c index af593a862d3..5fe9c20f641 100644 --- a/sys/kern/kern_rmlock.c +++ b/sys/kern/kern_rmlock.c @@ -900,60 +900,56 @@ static void __noinline rms_rlock_fallback(struct rmslock *rms) { - (*zpcpu_get(rms->readers_influx)) = 0; + zpcpu_set_protected(rms->readers_influx, 0); critical_exit(); mtx_lock(&rms->mtx); MPASS(*zpcpu_get(rms->readers_pcpu) == 0); while (rms->writers > 0) msleep(&rms->readers, &rms->mtx, PUSER - 1, mtx_name(&rms->mtx), 0); - (*zpcpu_get(rms->readers_pcpu))++; + critical_enter(); + zpcpu_add_protected(rms->readers_pcpu, 1); mtx_unlock(&rms->mtx); + critical_exit(); } void rms_rlock(struct rmslock *rms) { - int *influx; WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL, __func__); critical_enter(); - influx = zpcpu_get(rms->readers_influx); - __compiler_membar(); - *influx = 1; + zpcpu_set_protected(rms->readers_influx, 1); __compiler_membar(); if (__predict_false(rms->writers > 0)) { rms_rlock_fallback(rms); return; } __compiler_membar(); - (*zpcpu_get(rms->readers_pcpu))++; + zpcpu_add_protected(rms->readers_pcpu, 1); __compiler_membar(); - *influx = 0; + zpcpu_set_protected(rms->readers_influx, 0); critical_exit(); } int rms_try_rlock(struct rmslock *rms) { - int *influx; critical_enter(); - influx = zpcpu_get(rms->readers_influx); - __compiler_membar(); - *influx = 1; + zpcpu_set_protected(rms->readers_influx, 1); __compiler_membar(); if (__predict_false(rms->writers > 0)) { __compiler_membar(); - *influx = 0; + zpcpu_set_protected(rms->readers_influx, 0); critical_exit(); return (0); } __compiler_membar(); - (*zpcpu_get(rms->readers_pcpu))++; + zpcpu_add_protected(rms->readers_pcpu, 1); __compiler_membar(); - *influx = 0; + zpcpu_set_protected(rms->readers_influx, 0); critical_exit(); return (1); } @@ -962,7 +958,7 @@ static void __noinline rms_runlock_fallback(struct rmslock *rms) { - (*zpcpu_get(rms->readers_influx)) = 0; + zpcpu_set_protected(rms->readers_influx, 0); critical_exit(); mtx_lock(&rms->mtx); @@ -978,21 +974,18 @@ rms_runlock_fallback(struct rmslock *rms) void rms_runlock(struct rmslock *rms) { - int *influx; critical_enter(); - influx = zpcpu_get(rms->readers_influx); - __compiler_membar(); - *influx = 1; + zpcpu_set_protected(rms->readers_influx, 1); __compiler_membar(); if (__predict_false(rms->writers > 0)) { rms_runlock_fallback(rms); return; } __compiler_membar(); - (*zpcpu_get(rms->readers_pcpu))--; + zpcpu_sub_protected(rms->readers_pcpu, 1); __compiler_membar(); - *influx = 0; + zpcpu_set_protected(rms->readers_influx, 0); critical_exit(); } From 8f2b73dc86852b85d59a48b004d9d381da444a10 Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Fri, 7 Feb 2020 22:45:09 +0000 Subject: [PATCH 010/144] vfs: use newly added zpcpu routines instead of direct access where appropriate --- sys/sys/mount.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sys/sys/mount.h b/sys/sys/mount.h index 6c23cb25c35..f5e31fb18d8 100644 --- a/sys/sys/mount.h +++ b/sys/sys/mount.h @@ -1001,14 +1001,14 @@ int vfs_mount_fetch_counter(struct mount *, enum mount_counter); */ #define vfs_op_thread_entered(mp) ({ \ MPASS(curthread->td_critnest > 0); \ - *(int *)zpcpu_get(mp->mnt_thread_in_ops_pcpu) == 1; \ + *zpcpu_get(mp->mnt_thread_in_ops_pcpu) == 1; \ }) #define vfs_op_thread_enter(mp) ({ \ bool _retval = true; \ critical_enter(); \ MPASS(!vfs_op_thread_entered(mp)); \ - *(int *)zpcpu_get(mp->mnt_thread_in_ops_pcpu) = 1; \ + zpcpu_set_protected(mp->mnt_thread_in_ops_pcpu, 1); \ atomic_thread_fence_seq_cst(); \ if (__predict_false(mp->mnt_vfs_ops > 0)) { \ vfs_op_thread_exit(mp); \ @@ -1020,18 +1020,18 @@ int vfs_mount_fetch_counter(struct mount *, enum mount_counter); #define vfs_op_thread_exit(mp) do { \ MPASS(vfs_op_thread_entered(mp)); \ atomic_thread_fence_rel(); \ - *(int *)zpcpu_get(mp->mnt_thread_in_ops_pcpu) = 0; \ + zpcpu_set_protected(mp->mnt_thread_in_ops_pcpu, 0); \ critical_exit(); \ } while (0) #define vfs_mp_count_add_pcpu(mp, count, val) do { \ MPASS(vfs_op_thread_entered(mp)); \ - (*(int *)zpcpu_get(mp->mnt_##count##_pcpu)) += val; \ + zpcpu_add_protected(mp->mnt_##count##_pcpu, val); \ } while (0) #define vfs_mp_count_sub_pcpu(mp, count, val) do { \ MPASS(vfs_op_thread_entered(mp)); \ - (*(int *)zpcpu_get(mp->mnt_##count##_pcpu)) -= val; \ + zpcpu_sub_protected(mp->mnt_##count##_pcpu, val); \ } while (0) #else /* !_KERNEL */ From 3599e81c97cae796bc8abc359ab2cfe8f597c2b8 Mon Sep 17 00:00:00 2001 From: Marcin Wojtas Date: Sat, 8 Feb 2020 13:25:39 +0000 Subject: [PATCH 011/144] Destroy RX DMA tag on detach in mvneta driver This patch fixes deinitialization sequence of the mvneta driver by adding missing bus_dma_tag_destroy call. Submitted by: Kornel Duleba Obtained from: Semihalf MFC after: 1 week Sponsored by: Stormshield --- sys/dev/neta/if_mvneta.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sys/dev/neta/if_mvneta.c b/sys/dev/neta/if_mvneta.c index d6cdd703244..2c444abc6c5 100644 --- a/sys/dev/neta/if_mvneta.c +++ b/sys/dev/neta/if_mvneta.c @@ -874,6 +874,8 @@ mvneta_detach(device_t dev) bus_dma_tag_destroy(sc->rx_dtag); if (sc->txmbuf_dtag != NULL) bus_dma_tag_destroy(sc->txmbuf_dtag); + if (sc->rxbuf_dtag != NULL) + bus_dma_tag_destroy(sc->rxbuf_dtag); bus_release_resources(dev, res_spec, sc->res); return (0); From 73f20bb3a9a1f6b6c3bd156d3cecd9f0ff4a17cd Mon Sep 17 00:00:00 2001 From: Marcin Wojtas Date: Sat, 8 Feb 2020 13:33:47 +0000 Subject: [PATCH 012/144] Implement jumbo frame support in mvneta driver This patch introduces processing of the frames up to 9kB by the mvneta driver. Some versions of this NIC limit TX checksum offloading, depending on the frame size, so add appropriate handling of this feature. Submitted by: Kornel Duleba Obtained from: Semihalf Sponsored by: Stormshield Differential Revision: https://reviews.freebsd.org/D23225 --- sys/dev/neta/if_mvneta.c | 50 ++++++++++++++++++++++++++++-------- sys/dev/neta/if_mvneta_fdt.c | 21 +++++++++++++++ sys/dev/neta/if_mvnetavar.h | 16 +++++------- 3 files changed, 68 insertions(+), 19 deletions(-) diff --git a/sys/dev/neta/if_mvneta.c b/sys/dev/neta/if_mvneta.c index 2c444abc6c5..88926331f14 100644 --- a/sys/dev/neta/if_mvneta.c +++ b/sys/dev/neta/if_mvneta.c @@ -483,9 +483,9 @@ mvneta_dma_create(struct mvneta_softc *sc) BUS_SPACE_MAXADDR_32BIT, /* lowaddr */ BUS_SPACE_MAXADDR, /* highaddr */ NULL, NULL, /* filtfunc, filtfuncarg */ - MVNETA_PACKET_SIZE, /* maxsize */ + MVNETA_MAX_FRAME, /* maxsize */ MVNETA_TX_SEGLIMIT, /* nsegments */ - MVNETA_PACKET_SIZE, /* maxsegsz */ + MVNETA_MAX_FRAME, /* maxsegsz */ BUS_DMA_ALLOCNOW, /* flags */ NULL, NULL, /* lockfunc, lockfuncarg */ &sc->txmbuf_dtag); @@ -533,8 +533,8 @@ mvneta_dma_create(struct mvneta_softc *sc) BUS_SPACE_MAXADDR_32BIT, /* lowaddr */ BUS_SPACE_MAXADDR, /* highaddr */ NULL, NULL, /* filtfunc, filtfuncarg */ - MVNETA_PACKET_SIZE, 1, /* maxsize, nsegments */ - MVNETA_PACKET_SIZE, /* maxsegsz */ + MVNETA_MAX_FRAME, 1, /* maxsize, nsegments */ + MVNETA_MAX_FRAME, /* maxsegsz */ 0, /* flags */ NULL, NULL, /* lockfunc, lockfuncarg */ &sc->rxbuf_dtag); /* dmat */ @@ -674,6 +674,8 @@ mvneta_attach(device_t self) ifp->if_hwassist = CSUM_IP | CSUM_TCP | CSUM_UDP; + sc->rx_frame_size = MCLBYTES; /* ether_ifattach() always sets normal mtu */ + /* * Device DMA Buffer allocation. * Handles resource deallocation in case of failure. @@ -1158,7 +1160,7 @@ mvneta_initreg(struct ifnet *ifp) /* Port MAC Control set 0 */ reg = MVNETA_PMACC0_MUSTSET; /* must write 0x1 */ reg &= ~MVNETA_PMACC0_PORTEN; /* port is still disabled */ - reg |= MVNETA_PMACC0_FRAMESIZELIMIT(MVNETA_MAX_FRAME); + reg |= MVNETA_PMACC0_FRAMESIZELIMIT(ifp->if_mtu + MVNETA_ETHER_SIZE); MVNETA_WRITE(sc, MVNETA_PMACC0, reg); /* Port MAC Control set 2 */ @@ -1525,7 +1527,7 @@ mvneta_rx_queue_init(struct ifnet *ifp, int q) MVNETA_WRITE(sc, MVNETA_PRXDQA(q), rx->desc_pa); /* Rx buffer size and descriptor ring size */ - reg = MVNETA_PRXDQS_BUFFERSIZE(MVNETA_PACKET_SIZE >> 3); + reg = MVNETA_PRXDQS_BUFFERSIZE(sc->rx_frame_size >> 3); reg |= MVNETA_PRXDQS_DESCRIPTORSQUEUESIZE(MVNETA_RX_RING_CNT); MVNETA_WRITE(sc, MVNETA_PRXDQS(q), reg); #ifdef MVNETA_KTR @@ -2103,7 +2105,7 @@ mvneta_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) mvneta_sc_unlock(sc); break; case SIOCSIFCAP: - if (ifp->if_mtu > MVNETA_MAX_CSUM_MTU && + if (ifp->if_mtu > sc->tx_csum_limit && ifr->ifr_reqcap & IFCAP_TXCSUM) ifr->ifr_reqcap &= ~IFCAP_TXCSUM; mask = ifp->if_capenable ^ ifr->ifr_reqcap; @@ -2157,7 +2159,12 @@ mvneta_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) } else { ifp->if_mtu = ifr->ifr_mtu; mvneta_sc_lock(sc); - if (ifp->if_mtu > MVNETA_MAX_CSUM_MTU) { + if (ifp->if_mtu + MVNETA_ETHER_SIZE <= MCLBYTES) { + sc->rx_frame_size = MCLBYTES; + } else { + sc->rx_frame_size = MJUM9BYTES; + } + if (ifp->if_mtu > sc->tx_csum_limit) { ifp->if_capenable &= ~IFCAP_TXCSUM; ifp->if_hwassist = 0; } else { @@ -2167,8 +2174,25 @@ mvneta_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) } if (ifp->if_drv_flags & IFF_DRV_RUNNING) { - /* Trigger reinitialize sequence */ + /* Stop hardware */ mvneta_stop_locked(sc); + /* + * Reinitialize RX queues. + * We need to update RX descriptor size. + */ + for (q = 0; q < MVNETA_RX_QNUM_MAX; q++) { + mvneta_rx_lockq(sc, q); + if (mvneta_rx_queue_init(ifp, q) != 0) { + device_printf(sc->dev, + "initialization failed:" + " cannot initialize queue\n"); + mvneta_rx_unlockq(sc, q); + error = ENOBUFS; + break; + } + mvneta_rx_unlockq(sc, q); + } + /* Trigger reinitialization */ mvneta_init_locked(sc); } mvneta_sc_unlock(sc); @@ -2214,6 +2238,8 @@ mvneta_init_locked(void *arg) /* Enable port */ reg = MVNETA_READ(sc, MVNETA_PMACC0); reg |= MVNETA_PMACC0_PORTEN; + reg &= ~MVNETA_PMACC0_FRAMESIZELIMIT_MASK; + reg |= MVNETA_PMACC0_FRAMESIZELIMIT(ifp->if_mtu + MVNETA_ETHER_SIZE); MVNETA_WRITE(sc, MVNETA_PMACC0, reg); /* Allow access to each TXQ/RXQ from both CPU's */ @@ -2801,6 +2827,10 @@ mvneta_tx_set_csumflag(struct ifnet *ifp, iphl = ipoff = 0; csum_flags = ifp->if_hwassist & m->m_pkthdr.csum_flags; eh = mtod(m, struct ether_header *); + + if (csum_flags == 0) + return; + switch (ntohs(eh->ether_type)) { case ETHERTYPE_IP: ipoff = ETHER_HDR_LEN; @@ -3158,7 +3188,7 @@ mvneta_rx_queue_refill(struct mvneta_softc *sc, int q) for (npkt = 0; npkt < refill; npkt++) { rxbuf = &rx->rxbuf[rx->cpu]; - m = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR); + m = m_getjcl(M_NOWAIT, MT_DATA, M_PKTHDR, sc->rx_frame_size); if (__predict_false(m == NULL)) { error = ENOBUFS; break; diff --git a/sys/dev/neta/if_mvneta_fdt.c b/sys/dev/neta/if_mvneta_fdt.c index 6b773e379e8..df7840845fc 100644 --- a/sys/dev/neta/if_mvneta_fdt.c +++ b/sys/dev/neta/if_mvneta_fdt.c @@ -106,13 +106,34 @@ mvneta_fdt_probe(device_t dev) static int mvneta_fdt_attach(device_t dev) { + struct mvneta_softc *sc; + uint32_t tx_csum_limit; int err; + sc = device_get_softc(dev); + /* Try to fetch PHY information from FDT */ err = mvneta_fdt_phy_acquire(dev); if (err != 0) return (err); + if (ofw_bus_is_compatible(dev, "marvell,armada-370-neta")) { + tx_csum_limit = MVNETA_A370_MAX_CSUM_MTU; + } else { + tx_csum_limit = MVNETA_A3700_MAX_CSUM_MTU; + } + + if (ofw_bus_has_prop(dev, "tx-csum-limit")) { + err = OF_getprop(ofw_bus_get_node(dev), "tx-csum-limit", + &tx_csum_limit, sizeof(tx_csum_limit)); + if (err <= 0) { + device_printf(dev, + "Failed to acquire tx-csum-limit property\n"); + return (ENXIO); + } + } + sc->tx_csum_limit = tx_csum_limit; + return (mvneta_attach(dev)); } diff --git a/sys/dev/neta/if_mvnetavar.h b/sys/dev/neta/if_mvnetavar.h index 8ac37fb65bf..e78a9ca0f3e 100644 --- a/sys/dev/neta/if_mvnetavar.h +++ b/sys/dev/neta/if_mvnetavar.h @@ -32,15 +32,12 @@ #define _IF_MVNETAVAR_H_ #include -#define MVNETA_HWHEADER_SIZE 2 /* Marvell Header */ -#define MVNETA_ETHER_SIZE 22 /* Maximum ether size */ -#define MVNETA_MAX_CSUM_MTU 1600 /* Port1,2 hw limit */ +#define MVNETA_HWHEADER_SIZE 2 /* Marvell Header */ +#define MVNETA_ETHER_SIZE 22 /* Maximum ether size */ +#define MVNETA_A370_MAX_CSUM_MTU 1600 /* Max frame len for TX csum */ +#define MVNETA_A3700_MAX_CSUM_MTU 9600 -/* - * Limit support for frame up to hw csum limit - * until jumbo frame support is added. - */ -#define MVNETA_MAX_FRAME (MVNETA_MAX_CSUM_MTU + MVNETA_ETHER_SIZE) +#define MVNETA_MAX_FRAME (MJUM9BYTES) /* * Default limit of queue length @@ -54,7 +51,6 @@ #define MVNETA_BUFRING_SIZE 1024 #define MVNETA_PACKET_OFFSET 64 -#define MVNETA_PACKET_SIZE MCLBYTES #define MVNETA_RXTH_COUNT 128 #define MVNETA_RX_REFILL_COUNT 8 @@ -268,6 +264,8 @@ struct mvneta_softc { struct ifnet *ifp; uint32_t mvneta_if_flags; uint32_t mvneta_media; + uint32_t tx_csum_limit; + uint32_t rx_frame_size; int phy_attached; enum mvneta_phy_mode phy_mode; From eb43a03acb08801a6734b6f3e75c6e6b8971220e Mon Sep 17 00:00:00 2001 From: Andrew Turner Date: Sat, 8 Feb 2020 13:35:56 +0000 Subject: [PATCH 013/144] Implement the Linux/arm64 VDSO gettimeofday and clock_gettime These are used by Centos 7 and will be needed for the emulators/linux_base-c7 port. Sponsored by: DARPA, AFRL --- sys/arm64/linux/linux_locore.asm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/sys/arm64/linux/linux_locore.asm b/sys/arm64/linux/linux_locore.asm index 952131d25d8..b7e764b6d37 100644 --- a/sys/arm64/linux/linux_locore.asm +++ b/sys/arm64/linux/linux_locore.asm @@ -2,6 +2,7 @@ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * * Copyright (C) 2018 Turing Robotic Industries Inc. + * Copyright (C) 2020 Andrew Turner * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -33,6 +34,8 @@ #include +#include + .data .globl linux_platform @@ -46,11 +49,13 @@ ENTRY(__kernel_rt_sigreturn) ret ENTRY(__kernel_gettimeofday) - brk #0 /* LINUXTODO: implement __kernel_gettimeofday */ + ldr x8, =LINUX_SYS_gettimeofday + svc #0 ret ENTRY(__kernel_clock_gettime) - brk #0 /* LINUXTODO: implement __kernel_clock_gettime */ + ldr x8, =LINUX_SYS_linux_clock_gettime + svc #0 ret ENTRY(__kernel_clock_getres) From 300b525d293cf894b3b3a7e771950a86366ff292 Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Sat, 8 Feb 2020 15:06:06 +0000 Subject: [PATCH 014/144] Correct the function name in the comment. Sponsored by: The FreeBSD Foundation MFC after: 3 days --- sys/kern/kern_thread.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/kern/kern_thread.c b/sys/kern/kern_thread.c index 9095a32c6a5..83c22309fd7 100644 --- a/sys/kern/kern_thread.c +++ b/sys/kern/kern_thread.c @@ -1085,7 +1085,7 @@ thread_suspend_check(int return_instead) * Typically, when retrying due to casueword(9) failure (rv == 1), we * should handle the stop requests there, with exception of cases when * the thread owns a kernel resource, for instance busied the umtx - * key, or when functions return immediately if casueword_check_susp() + * key, or when functions return immediately if thread_check_susp() * returned non-zero. On the other hand, retrying the whole lock * operation, we better not stop there but delegate the handling to * ast. From 3eb6b656c2e3a9565584b247e112d83532727c13 Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Sat, 8 Feb 2020 15:51:08 +0000 Subject: [PATCH 015/144] vfs: remove now useless ENODEV handling from vn_fullpath consumers Noted by: ngie --- sys/kern/kern_jail.c | 25 ++----------------------- sys/kern/vfs_mount.c | 5 ++--- 2 files changed, 4 insertions(+), 26 deletions(-) diff --git a/sys/kern/kern_jail.c b/sys/kern/kern_jail.c index c61d7a9e20e..8dbe2d6f5db 100644 --- a/sys/kern/kern_jail.c +++ b/sys/kern/kern_jail.c @@ -490,7 +490,6 @@ kern_jail_set(struct thread *td, struct uio *optuio, int flags) int gotchildmax, gotenforce, gothid, gotrsnum, gotslevel; int jid, jsys, len, level; int childmax, osreldt, rsnum, slevel; - int fullpath_disabled; #if defined(INET) || defined(INET6) int ii, ij; #endif @@ -894,7 +893,6 @@ kern_jail_set(struct thread *td, struct uio *optuio, int flags) } } - fullpath_disabled = 0; root = NULL; error = vfs_getopt(opts, "path", (void **)&path, &len); if (error == ENOENT) @@ -922,13 +920,8 @@ kern_jail_set(struct thread *td, struct uio *optuio, int flags) g_path = malloc(MAXPATHLEN, M_TEMP, M_WAITOK); strlcpy(g_path, path, MAXPATHLEN); error = vn_path_to_global_path(td, root, g_path, MAXPATHLEN); - if (error == 0) + if (error == 0) { path = g_path; - else if (error == ENODEV) { - /* proceed if sysctl debug.disablefullpath == 1 */ - fullpath_disabled = 1; - if (len < 2 || (len == 2 && path[0] == '/')) - path = NULL; } else { /* exit on other errors */ goto done_free; @@ -939,15 +932,6 @@ kern_jail_set(struct thread *td, struct uio *optuio, int flags) goto done_free; } VOP_UNLOCK(root); - if (fullpath_disabled) { - /* Leave room for a real-root full pathname. */ - if (len + (path[0] == '/' && strcmp(mypr->pr_path, "/") - ? strlen(mypr->pr_path) : 0) > MAXPATHLEN) { - error = ENAMETOOLONG; - vrele(root); - goto done_free; - } - } } /* @@ -1652,12 +1636,7 @@ kern_jail_set(struct thread *td, struct uio *optuio, int flags) } if (path != NULL) { /* Try to keep a real-rooted full pathname. */ - if (fullpath_disabled && path[0] == '/' && - strcmp(mypr->pr_path, "/")) - snprintf(pr->pr_path, sizeof(pr->pr_path), "%s%s", - mypr->pr_path, path); - else - strlcpy(pr->pr_path, path, sizeof(pr->pr_path)); + strlcpy(pr->pr_path, path, sizeof(pr->pr_path)); pr->pr_root = root; } if (PR_HOST & ch_flags & ~pr_flags) { diff --git a/sys/kern/vfs_mount.c b/sys/kern/vfs_mount.c index 47a5193eebf..9b99cb8cf05 100644 --- a/sys/kern/vfs_mount.c +++ b/sys/kern/vfs_mount.c @@ -1266,8 +1266,7 @@ vfs_domount( pathbuf = malloc(MNAMELEN, M_TEMP, M_WAITOK); strcpy(pathbuf, fspath); error = vn_path_to_global_path(td, vp, pathbuf, MNAMELEN); - /* debug.disablefullpath == 1 results in ENODEV */ - if (error == 0 || error == ENODEV) { + if (error == 0) { error = vfs_domount_first(td, vfsp, pathbuf, vp, fsflags, optlist); } @@ -1346,7 +1345,7 @@ kern_unmount(struct thread *td, const char *path, int flags) NDFREE(&nd, NDF_ONLY_PNBUF); error = vn_path_to_global_path(td, nd.ni_vp, pathbuf, MNAMELEN); - if (error == 0 || error == ENODEV) + if (error == 0) vput(nd.ni_vp); } mtx_lock(&mountlist_mtx); From 2f7f11b7deebefa2f179cc04bb6d434add6ac249 Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Sat, 8 Feb 2020 15:52:20 +0000 Subject: [PATCH 016/144] vfs: tidy up vget_finish and vn_lock - remove assertion which duplicates vn_lock - use VNPASS instead of retyping the failure - report what flags were passed if panicking on them --- sys/kern/vfs_subr.c | 14 +++----------- sys/kern/vfs_vnops.c | 5 +++-- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index f9f1f0a541c..7137031dee0 100644 --- a/sys/kern/vfs_subr.c +++ b/sys/kern/vfs_subr.c @@ -2889,19 +2889,12 @@ vget_finish(struct vnode *vp, int flags, enum vgetstate vs) { int error, old; - VNASSERT((flags & LK_TYPE_MASK) != 0, vp, - ("%s: invalid lock operation", __func__)); - if ((flags & LK_INTERLOCK) != 0) ASSERT_VI_LOCKED(vp, __func__); else ASSERT_VI_UNLOCKED(vp, __func__); - VNASSERT(vp->v_holdcnt > 0, vp, ("%s: vnode not held", __func__)); - if (vs == VGET_USECOUNT) { - VNASSERT(vp->v_usecount > 0, vp, - ("%s: vnode without usecount when VGET_USECOUNT was passed", - __func__)); - } + VNPASS(vp->v_holdcnt > 0, vp); + VNPASS(vs == VGET_HOLDCNT || vp->v_usecount > 0, vp); error = vn_lock(vp, flags); if (__predict_false(error != 0)) { @@ -2914,9 +2907,8 @@ vget_finish(struct vnode *vp, int flags, enum vgetstate vs) return (error); } - if (vs == VGET_USECOUNT) { + if (vs == VGET_USECOUNT) return (0); - } if (__predict_false(vp->v_type == VCHR)) return (vget_finish_vchr(vp)); diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c index 963550b9e1e..2235b4f022e 100644 --- a/sys/kern/vfs_vnops.c +++ b/sys/kern/vfs_vnops.c @@ -1606,8 +1606,9 @@ _vn_lock(struct vnode *vp, int flags, char *file, int line) { int error; - VNASSERT((flags & LK_TYPE_MASK) != 0, vp, ("vn_lock: no locktype")); - VNASSERT(vp->v_holdcnt != 0, vp, ("vn_lock: zero hold count")); + VNASSERT((flags & LK_TYPE_MASK) != 0, vp, + ("vn_lock: no locktype (%d passed)", flags)); + VNPASS(vp->v_holdcnt > 0, vp); error = VOP_LOCK1(vp, flags, file, line); if (__predict_false(error != 0 || VN_IS_DOOMED(vp))) return (_vn_lock_fallback(vp, flags, file, line, error)); From 3f8bd4b7bfd6286230d066d3f651a665573d2df3 Mon Sep 17 00:00:00 2001 From: Eitan Adler Date: Sat, 8 Feb 2020 20:56:38 +0000 Subject: [PATCH 017/144] memset.3: fix a a duplicate word --- lib/libc/string/memset.3 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/libc/string/memset.3 b/lib/libc/string/memset.3 index 590bc08531b..2239bd64abb 100644 --- a/lib/libc/string/memset.3 +++ b/lib/libc/string/memset.3 @@ -63,7 +63,7 @@ Undefined behaviour from .Fn memset , resulting from storage overflow, will occur if .Fa len -is greater than the the length of buffer +is greater than the length of buffer .Fa dest . The behaviour is also undefined if .Fa dest From a00eed96766d6978ddf7fe93d02fe7980d3b7a90 Mon Sep 17 00:00:00 2001 From: Ruslan Bukin Date: Sat, 8 Feb 2020 21:02:20 +0000 Subject: [PATCH 018/144] Fix a KASSERT since chained mbufs are accepted by the xdma bounce buffer loader. m_copydata() will copy entire chain to a single buffer. Sponsored by: DARPA, AFRL --- sys/dev/xdma/xdma_sg.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/dev/xdma/xdma_sg.c b/sys/dev/xdma/xdma_sg.c index b02b7d9d3e9..add034ae846 100644 --- a/sys/dev/xdma/xdma_sg.c +++ b/sys/dev/xdma/xdma_sg.c @@ -498,7 +498,7 @@ _xdma_load_data(xdma_channel_t *xchan, struct xdma_request *xr, m = xr->m; - KASSERT(xchan->caps & XCHAN_CAP_NOSEG, + KASSERT(xchan->caps & (XCHAN_CAP_NOSEG | XCHAN_CAP_BOUNCE), ("Handling segmented data is not implemented here.")); nsegs = 1; From 66a23ebe19d34c52f8684eee835d4e96e4517ec0 Mon Sep 17 00:00:00 2001 From: Eitan Adler Date: Sat, 8 Feb 2020 21:17:48 +0000 Subject: [PATCH 019/144] memset.3: better fix previous typo Upon re-reading the whole sentence this is a better fix. MFC with: r357681 --- lib/libc/string/memset.3 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/libc/string/memset.3 b/lib/libc/string/memset.3 index 2239bd64abb..87635e2a8ac 100644 --- a/lib/libc/string/memset.3 +++ b/lib/libc/string/memset.3 @@ -63,8 +63,9 @@ Undefined behaviour from .Fn memset , resulting from storage overflow, will occur if .Fa len -is greater than the length of buffer -.Fa dest . +is greater than the length of the +.Fa dest +buffer. The behaviour is also undefined if .Fa dest is an invalid pointer. From 12373e951965d9abcb21d0c47a0cb81d9afc8ccd Mon Sep 17 00:00:00 2001 From: Alexander Motin Date: Sat, 8 Feb 2020 21:59:46 +0000 Subject: [PATCH 020/144] Bind CTL backends taskqueues to the CTL process. MFC after: 2 weeks --- sys/cam/ctl/ctl_backend_block.c | 3 ++- sys/cam/ctl/ctl_backend_ramdisk.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/sys/cam/ctl/ctl_backend_block.c b/sys/cam/ctl/ctl_backend_block.c index d8e0c751de3..5282bd13653 100644 --- a/sys/cam/ctl/ctl_backend_block.c +++ b/sys/cam/ctl/ctl_backend_block.c @@ -2367,9 +2367,10 @@ ctl_be_block_create(struct ctl_be_block_softc *softc, struct ctl_lun_req *req) * device, he can specify that when the LUN is created, or change * the tunable/sysctl to alter the default number of threads. */ - retval = taskqueue_start_threads(&be_lun->io_taskqueue, + retval = taskqueue_start_threads_in_proc(&be_lun->io_taskqueue, /*num threads*/num_threads, /*priority*/PUSER, + /*proc*/control_softc->ctl_proc, /*thread name*/ "%s taskq", be_lun->lunname); diff --git a/sys/cam/ctl/ctl_backend_ramdisk.c b/sys/cam/ctl/ctl_backend_ramdisk.c index 91f2fa4e854..c0f190cc931 100644 --- a/sys/cam/ctl/ctl_backend_ramdisk.c +++ b/sys/cam/ctl/ctl_backend_ramdisk.c @@ -1147,9 +1147,10 @@ ctl_backend_ramdisk_create(struct ctl_be_ramdisk_softc *softc, goto bailout_error; } - retval = taskqueue_start_threads(&be_lun->io_taskqueue, + retval = taskqueue_start_threads_in_proc(&be_lun->io_taskqueue, /*num threads*/1, /*priority*/PUSER, + /*proc*/control_softc->ctl_proc, /*thread name*/ "%s taskq", be_lun->lunname); if (retval != 0) From d987842d1edea3de3bad34d8bdc4b1b34cff48a9 Mon Sep 17 00:00:00 2001 From: Ruslan Bukin Date: Sat, 8 Feb 2020 23:07:29 +0000 Subject: [PATCH 021/144] Enter the network epoch in the xdma interrupt handler if required by a peripheral device driver. Sponsored by: DARPA, AFRL --- sys/dev/altera/atse/if_atse.c | 9 +++++---- sys/dev/flash/cqspi.c | 4 ++-- sys/dev/xdma/xdma.c | 15 ++++++++++++--- sys/dev/xdma/xdma.h | 4 +++- sys/dev/xdma/xdma_fdt_test.c | 2 +- sys/dev/xilinx/if_xae.c | 4 ++-- sys/mips/ingenic/jz4780_aic.c | 2 +- 7 files changed, 26 insertions(+), 14 deletions(-) diff --git a/sys/dev/altera/atse/if_atse.c b/sys/dev/altera/atse/if_atse.c index a3552605995..2dfd55b9486 100644 --- a/sys/dev/altera/atse/if_atse.c +++ b/sys/dev/altera/atse/if_atse.c @@ -1293,7 +1293,8 @@ atse_attach(device_t dev) } /* Setup interrupt handler. */ - error = xdma_setup_intr(sc->xchan_tx, atse_xdma_tx_intr, sc, &sc->ih_tx); + error = xdma_setup_intr(sc->xchan_tx, 0, + atse_xdma_tx_intr, sc, &sc->ih_tx); if (error) { device_printf(sc->dev, "Can't setup xDMA interrupt handler.\n"); @@ -1324,7 +1325,8 @@ atse_attach(device_t dev) } /* Setup interrupt handler. */ - error = xdma_setup_intr(sc->xchan_rx, atse_xdma_rx_intr, sc, &sc->ih_rx); + error = xdma_setup_intr(sc->xchan_rx, XDMA_INTR_NET, + atse_xdma_rx_intr, sc, &sc->ih_rx); if (error) { device_printf(sc->dev, "Can't setup xDMA interrupt handler.\n"); @@ -1381,8 +1383,7 @@ atse_attach(device_t dev) } ifp->if_softc = sc; if_initname(ifp, device_get_name(dev), device_get_unit(dev)); - ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST | - IFF_NEEDSEPOCH; + ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST; ifp->if_ioctl = atse_ioctl; ifp->if_transmit = atse_transmit; ifp->if_qflush = atse_qflush; diff --git a/sys/dev/flash/cqspi.c b/sys/dev/flash/cqspi.c index 7cb3d50d398..4c2bc1a75bc 100644 --- a/sys/dev/flash/cqspi.c +++ b/sys/dev/flash/cqspi.c @@ -705,7 +705,7 @@ cqspi_attach(device_t dev) } /* Setup xDMA interrupt handlers. */ - error = xdma_setup_intr(sc->xchan_tx, cqspi_xdma_tx_intr, + error = xdma_setup_intr(sc->xchan_tx, 0, cqspi_xdma_tx_intr, sc, &sc->ih_tx); if (error) { device_printf(sc->dev, @@ -713,7 +713,7 @@ cqspi_attach(device_t dev) return (ENXIO); } - error = xdma_setup_intr(sc->xchan_rx, cqspi_xdma_rx_intr, + error = xdma_setup_intr(sc->xchan_rx, 0, cqspi_xdma_rx_intr, sc, &sc->ih_rx); if (error) { device_printf(sc->dev, diff --git a/sys/dev/xdma/xdma.c b/sys/dev/xdma/xdma.c index aa6e6497a34..74caf6cba61 100644 --- a/sys/dev/xdma/xdma.c +++ b/sys/dev/xdma/xdma.c @@ -36,6 +36,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -203,7 +204,7 @@ xdma_channel_free(xdma_channel_t *xchan) } int -xdma_setup_intr(xdma_channel_t *xchan, +xdma_setup_intr(xdma_channel_t *xchan, int flags, int (*cb)(void *, xdma_transfer_status_t *), void *arg, void **ihandler) { @@ -224,6 +225,7 @@ xdma_setup_intr(xdma_channel_t *xchan, ih = malloc(sizeof(struct xdma_intr_handler), M_XDMA, M_WAITOK | M_ZERO); + ih->flags = flags; ih->cb = cb; ih->cb_user = arg; @@ -325,13 +327,20 @@ xdma_callback(xdma_channel_t *xchan, xdma_transfer_status_t *status) struct xdma_intr_handler *ih_tmp; struct xdma_intr_handler *ih; xdma_controller_t *xdma; + struct epoch_tracker et; xdma = xchan->xdma; KASSERT(xdma != NULL, ("xdma is NULL")); - TAILQ_FOREACH_SAFE(ih, &xchan->ie_handlers, ih_next, ih_tmp) - if (ih->cb != NULL) + TAILQ_FOREACH_SAFE(ih, &xchan->ie_handlers, ih_next, ih_tmp) { + if (ih->cb != NULL) { + if (ih->flags & XDMA_INTR_NET) + NET_EPOCH_ENTER(et); ih->cb(ih->cb_user, status); + if (ih->flags & XDMA_INTR_NET) + NET_EPOCH_EXIT(et); + } + } if (xchan->flags & XCHAN_TYPE_SG) xdma_queue_submit(xchan); diff --git a/sys/dev/xdma/xdma.h b/sys/dev/xdma/xdma.h index b9a8dd2c37c..b00b2f5bdc9 100644 --- a/sys/dev/xdma/xdma.h +++ b/sys/dev/xdma/xdma.h @@ -195,6 +195,8 @@ typedef struct xdma_channel xdma_channel_t; struct xdma_intr_handler { int (*cb)(void *cb_user, xdma_transfer_status_t *status); + int flags; +#define XDMA_INTR_NET (1 << 0) void *cb_user; TAILQ_ENTRY(xdma_intr_handler) ih_next; }; @@ -275,7 +277,7 @@ uint32_t xdma_mbuf_chain_count(struct mbuf *m0); int xdma_control(xdma_channel_t *xchan, enum xdma_command cmd); /* Interrupt callback */ -int xdma_setup_intr(xdma_channel_t *xchan, int (*cb)(void *, +int xdma_setup_intr(xdma_channel_t *xchan, int flags, int (*cb)(void *, xdma_transfer_status_t *), void *arg, void **); int xdma_teardown_intr(xdma_channel_t *xchan, struct xdma_intr_handler *ih); int xdma_teardown_all_intr(xdma_channel_t *xchan); diff --git a/sys/dev/xdma/xdma_fdt_test.c b/sys/dev/xdma/xdma_fdt_test.c index 6a4869df8eb..edf192a4701 100644 --- a/sys/dev/xdma/xdma_fdt_test.c +++ b/sys/dev/xdma/xdma_fdt_test.c @@ -217,7 +217,7 @@ xdmatest_test(struct xdmatest_softc *sc) } /* Setup callback. */ - err = xdma_setup_intr(sc->xchan, xdmatest_intr, sc, &sc->ih); + err = xdma_setup_intr(sc->xchan, 0, xdmatest_intr, sc, &sc->ih); if (err) { device_printf(sc->dev, "Can't setup xDMA interrupt handler.\n"); return (-1); diff --git a/sys/dev/xilinx/if_xae.c b/sys/dev/xilinx/if_xae.c index e6dbb15de75..36fdf41b731 100644 --- a/sys/dev/xilinx/if_xae.c +++ b/sys/dev/xilinx/if_xae.c @@ -869,7 +869,7 @@ setup_xdma(struct xae_softc *sc) } /* Setup interrupt handler. */ - error = xdma_setup_intr(sc->xchan_tx, + error = xdma_setup_intr(sc->xchan_tx, 0, xae_xdma_tx_intr, sc, &sc->ih_tx); if (error) { device_printf(sc->dev, @@ -885,7 +885,7 @@ setup_xdma(struct xae_softc *sc) } /* Setup interrupt handler. */ - error = xdma_setup_intr(sc->xchan_rx, + error = xdma_setup_intr(sc->xchan_rx, XDMA_INTR_NET, xae_xdma_rx_intr, sc, &sc->ih_rx); if (error) { device_printf(sc->dev, diff --git a/sys/mips/ingenic/jz4780_aic.c b/sys/mips/ingenic/jz4780_aic.c index f7a0ff53fac..5667501ef22 100644 --- a/sys/mips/ingenic/jz4780_aic.c +++ b/sys/mips/ingenic/jz4780_aic.c @@ -744,7 +744,7 @@ aic_attach(device_t dev) pcm_setflags(dev, pcm_getflags(dev) | SD_F_MPSAFE); /* Setup interrupt handler. */ - err = xdma_setup_intr(sc->xchan, aic_intr, scp, &sc->ih); + err = xdma_setup_intr(sc->xchan, 0, aic_intr, scp, &sc->ih); if (err) { device_printf(sc->dev, "Can't setup xDMA interrupt handler.\n"); From 469c887f3601da7ba0fcbeca58192cbe0274a1c8 Mon Sep 17 00:00:00 2001 From: Kyle Evans Date: Sun, 9 Feb 2020 04:01:46 +0000 Subject: [PATCH 022/144] NetBSD: tests: Import NFS O_SEARCH test fix --- lib/libc/c063/t_o_search.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/lib/libc/c063/t_o_search.c b/lib/libc/c063/t_o_search.c index 714305e2a0a..dd4fbff97b8 100644 --- a/lib/libc/c063/t_o_search.c +++ b/lib/libc/c063/t_o_search.c @@ -1,4 +1,4 @@ -/* $NetBSD: t_o_search.c,v 1.9 2020/02/06 12:18:06 martin Exp $ */ +/* $NetBSD: t_o_search.c,v 1.10 2020/02/08 19:58:36 kamil Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -29,11 +29,13 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include -__RCSID("$NetBSD: t_o_search.c,v 1.9 2020/02/06 12:18:06 martin Exp $"); +__RCSID("$NetBSD: t_o_search.c,v 1.10 2020/02/08 19:58:36 kamil Exp $"); #include #include +#include +#include #include #include @@ -55,6 +57,11 @@ __RCSID("$NetBSD: t_o_search.c,v 1.9 2020/02/06 12:18:06 martin Exp $"); #define USE_O_SEARCH #endif +#ifdef __FreeBSD__ +#define statvfs statfs +#define fstatvfs fstatfs +#endif + #define DIR "dir" #define FILE "dir/o_search" #define BASEFILE "o_search" @@ -311,8 +318,9 @@ ATF_TC_HEAD(o_search_revokex, tc) } ATF_TC_BODY(o_search_revokex, tc) { - int dfd, fd; + struct statvfs vst; struct stat sb; + int dfd, fd; ATF_REQUIRE(mkdir(DIR, 0755) == 0); ATF_REQUIRE((fd = open(FILE, O_CREAT|O_RDWR, 0644)) != -1); @@ -322,6 +330,11 @@ ATF_TC_BODY(o_search_revokex, tc) /* Drop permissions. The kernel must still not check the exec bit. */ ATF_REQUIRE(chmod(DIR, 0000) == 0); + + fstatvfs(dfd, &vst); + if (strcmp(vst.f_fstypename, "nfs") == 0) + atf_tc_expect_fail("NFS protocol cannot observe O_SEARCH semantics"); + ATF_REQUIRE(fstatat(dfd, BASEFILE, &sb, 0) == 0); ATF_REQUIRE(close(dfd) == 0); From 146fc63fce9b46ab77ba7959cf69429d9bd88d2a Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Sun, 9 Feb 2020 11:53:12 +0000 Subject: [PATCH 023/144] Add a way to manage thread signal mask using shared word, instead of syscall. A new syscall sigfastblock(2) is added which registers a uint32_t variable as containing the count of blocks for signal delivery. Its content is read by kernel on each syscall entry and on AST processing, non-zero count of blocks is interpreted same as the signal mask blocking all signals. The biggest downside of the feature that I see is that memory corruption that affects the registered fast sigblock location, would cause quite strange application misbehavior. For instance, the process would be immune to ^C (but killable by SIGKILL). With consumers (rtld and libthr added), benchmarks do not show a slow-down of the syscalls in micro-measurements, and macro benchmarks like buildworld do not demonstrate a difference. Part of the reason is that buildworld time is dominated by compiler, and clang already links to libthr. On the other hand, small utilities typically used by shell scripts have the total number of syscalls cut by half. The syscall is not exported from the stable libc version namespace on purpose. It is intended to be used only by our C runtime implementation internals. Tested by: pho Disscussed with: cem, emaste, jilles Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D12773 --- lib/libc/sys/Makefile.inc | 1 + lib/libc/sys/Symbol.map | 1 + lib/libc/sys/sigfastblock.2 | 166 ++++++++++++++++++++++ sys/compat/freebsd32/syscalls.master | 1 + sys/kern/capabilities.conf | 1 + sys/kern/kern_exec.c | 5 + sys/kern/kern_fork.c | 3 +- sys/kern/kern_sig.c | 198 +++++++++++++++++++++++---- sys/kern/kern_thread.c | 8 +- sys/kern/subr_syscall.c | 7 + sys/kern/subr_trap.c | 81 ++++++++--- sys/kern/syscalls.master | 6 + sys/sys/proc.h | 6 +- sys/sys/signalvar.h | 20 +++ 14 files changed, 458 insertions(+), 46 deletions(-) create mode 100644 lib/libc/sys/sigfastblock.2 diff --git a/lib/libc/sys/Makefile.inc b/lib/libc/sys/Makefile.inc index 4e048b5f392..d13201c1be7 100644 --- a/lib/libc/sys/Makefile.inc +++ b/lib/libc/sys/Makefile.inc @@ -317,6 +317,7 @@ MAN+= sctp_generic_recvmsg.2 \ shutdown.2 \ sigaction.2 \ sigaltstack.2 \ + sigfastblock.2 \ sigpending.2 \ sigprocmask.2 \ sigqueue.2 \ diff --git a/lib/libc/sys/Symbol.map b/lib/libc/sys/Symbol.map index a31cf1616dd..aa60da2a678 100644 --- a/lib/libc/sys/Symbol.map +++ b/lib/libc/sys/Symbol.map @@ -567,6 +567,7 @@ FBSDprivate_1.0 { __sys_extattr_set_link; _extattrctl; __sys_extattrctl; + __sys_sigfastblock; _fchdir; __sys_fchdir; _fchflags; diff --git a/lib/libc/sys/sigfastblock.2 b/lib/libc/sys/sigfastblock.2 new file mode 100644 index 00000000000..da835abdf9a --- /dev/null +++ b/lib/libc/sys/sigfastblock.2 @@ -0,0 +1,166 @@ +.\" Copyright (c) 2016 The FreeBSD Foundation, Inc. +.\" +.\" This documentation was written by +.\" Konstantin Belousov under sponsorship +.\" from the FreeBSD Foundation. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" $FreeBSD$ +.\" +.Dd December 13, 2019 +.Dt SIGFASTBLOCK 2 +.Os +.Sh NAME +.Nm sigfastblock +.Nd controls signals blocking with a simple memory write +.Sh LIBRARY +.Lb libc +.Sh SYNOPSIS +.In sys/signalvar.h +.Ft int +.Fn sigfastblock "int cmd" "void *ptr" +.Sh DESCRIPTION +.Bf -symbolic +This function is not intended for a direct usage by applications. +The functionality is provided for implementing some optimizations in +.Xr ld-elf.so.1 8 +and +.Lb libthr . +.Ef +.Pp +The function configures the kernel facility that allows a thread to +block asynchronous signals delivery with a single write to userspace +memory, avoiding overhead of system calls like +.Xr sigprocmask 2 +for establishing critical sections. +The C runtime uses it to optimize implementation of async-signal-safe +functionality. +.Pp +A thread might register a +.Dv sigblock +variable of type +.Vt int +as a location which is consulted by kernel when calculating the +blocked signal mask for delivery of asynchronous signals. +If the variable indicates that blocking is requested, then the kernel +effectively operates as if the mask containing all blockable signals was +supplied to +.Xr sigprocmask 2 . +.Pp +The variable is supposed to be modified only from the owning thread, +there is no way to guarantee visibility of update from other thread +to kernel when signals are delivered. +.Pp +Lower bits of the sigblock variable are reserved as flags, +which might be set or cleared by kernel at arbitrary moments. +Userspace code should use +.Xr atomic 9 +operations of incrementing and decrementing by +.Dv SIGFASTBLOCK_INC +quantity to recursively block or unblock signals delivery. +.Pp +If a signal would be delivered when unmasked, kernel might set the +.Dv SIGFASTBLOCK_PEND +.Dq pending signal +flag in the sigblock variable. +Userspace should perform +.Dv SIGFASTBLOCK_UNBLOCK +operation when clearing the variable if it notes the pending signal +bit is set, which would deliver the pending signals immediately. +Otherwise, signals delivery might be postponed. +.Pp +The +.Fa cmd +argument specifies one of the following operations: +.Bl -tag -width SIGFASTBLOCK_UNSETPTR +.It Dv SIGFASTBLOCK_SETPTR +Register the variable of type +.Vt int +at location pointed to by the +.Fa ptr +argument as sigblock variable for the calling thread. +.It Dv SIGFASTBLOCK_UNSETPTR +Unregister the currently registered sigblock location. +Kernel stops inferring the blocked mask from non-zero value of its +blocked count. +New location can be registered after previous one is deregistered. +.It Dv SIGFASTBLOCK_UNBLOCK +If there are pending signals which should be delivered to the calling +thread, they are delivered before returning from the call. +The sigblock variable should have zero blocking count, and indicate +that the pending signal exists. +Effectively this means that the variable should have the value +.Dv SIGFASTBLOCK_PEND . +.El +.Sh RETURN VALUES +.Rv -std +.Sh ERRORS +The operation may fail with the following errors: +.Bl -tag -width Er +.It Bq Er EBUSY +The +.Dv SIGFASTBLOCK_SETPTR +attempted while the sigblock address was already registered. +The +.Dv SIGFASTBLOCK_UNBLOCK +was called while sigblock variable value is not equal to +.Dv SIGFASTBLOCK_PEND . +.It Bq Er EINVAL +The variable address passed to +.Dv SIGFASTBLOCK_SETPTR +is not aligned naturally. +The +.Dv SIGFASTBLOCK_UNSETPTR +operation was attempted without prior successfull call to +.Dv SIGFASTBLOCK_SETPTR . +.It Bq Er EFAULT +Attempt to read or write to the sigblock variable failed. +Note that kernel generates the +.Dv SIGSEGV +signal if an attempt to read from the sigblock variable faulted +during implicit accesses from syscall entry. +.El +.Sh SEE ALSO +.Xr kill 2 , +.Xr signal 2 , +.Xr sigprocmask 2 , +.Xr libthr 3 , +.Xr ld-elf.so.1 8 +.Sh STANDARDS +The +.Nm +function is non-standard, although a similar functionality is a common +optimization provided by several other systems. +.Sh HISTORY +The +.Nm +function was introduced in +.Fx 13.0 . +.Sh BUGS +The +.Nm +symbol is currently not exported by libc, on purpose. +Consumers should either use the +.Dv __sys_fast_sigblock +symbol from the private libc namespace, or utilize +.Xr syscall 2 . diff --git a/sys/compat/freebsd32/syscalls.master b/sys/compat/freebsd32/syscalls.master index b4e58730cc6..a82d75d26e2 100644 --- a/sys/compat/freebsd32/syscalls.master +++ b/sys/compat/freebsd32/syscalls.master @@ -1159,5 +1159,6 @@ int shmflags, const char *name); } 572 AUE_SHMRENAME NOPROTO { int shm_rename(const char *path_from, \ const char *path_to, int flags); } +573 AUE_NULL NOPROTO { int sigfastblock(int cmd, uint32_t *ptr); } ; vim: syntax=off diff --git a/sys/kern/capabilities.conf b/sys/kern/capabilities.conf index 897c6414551..0b5aa2f83fd 100644 --- a/sys/kern/capabilities.conf +++ b/sys/kern/capabilities.conf @@ -668,6 +668,7 @@ shutdown sigaction sigaltstack sigblock +sigfastblock sigpending sigprocmask sigqueue diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c index 69b5c72af23..3fa76d659a3 100644 --- a/sys/kern/kern_exec.c +++ b/sys/kern/kern_exec.c @@ -1025,6 +1025,7 @@ exec_new_vmspace(struct image_params *imgp, struct sysentvec *sv) int error; struct proc *p = imgp->proc; struct vmspace *vmspace = p->p_vmspace; + struct thread *td = curthread; vm_object_t obj; struct rlimit rlim_stack; vm_offset_t sv_minuser, stack_addr; @@ -1034,6 +1035,10 @@ exec_new_vmspace(struct image_params *imgp, struct sysentvec *sv) imgp->vmspace_destroyed = 1; imgp->sysent = sv; + td->td_pflags &= ~TDP_SIGFASTBLOCK; + td->td_sigblock_ptr = NULL; + td->td_sigblock_val = 0; + /* May be called with Giant held */ EVENTHANDLER_DIRECT_INVOKE(process_exec, p, imgp); diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c index e8ac950a5d7..958e119927f 100644 --- a/sys/kern/kern_fork.c +++ b/sys/kern/kern_fork.c @@ -563,7 +563,8 @@ do_fork(struct thread *td, struct fork_req *fr, struct proc *p2, struct thread * * been preserved. */ p2->p_flag |= p1->p_flag & P_SUGID; - td2->td_pflags |= (td->td_pflags & TDP_ALTSTACK) | TDP_FORKING; + td2->td_pflags |= (td->td_pflags & (TDP_ALTSTACK | + TDP_SIGFASTBLOCK)) | TDP_FORKING; SESS_LOCK(p1->p_session); if (p1->p_session->s_ttyvp != NULL && p1->p_flag & P_CONTROLT) p2->p_flag |= P_CONTROLT; diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c index 0d14b0665f4..5d6a677748e 100644 --- a/sys/kern/kern_sig.c +++ b/sys/kern/kern_sig.c @@ -114,7 +114,7 @@ static int sig_suspend_threads(struct thread *, struct proc *, int); static int filt_sigattach(struct knote *kn); static void filt_sigdetach(struct knote *kn); static int filt_signal(struct knote *kn, long hint); -static struct thread *sigtd(struct proc *p, int sig, int prop); +static struct thread *sigtd(struct proc *p, int sig, bool fast_sigblock); static void sigqueue_start(void); static uma_zone_t ksiginfo_zone = NULL; @@ -238,7 +238,7 @@ static int sigproptbl[NSIG] = { [SIGUSR2] = SIGPROP_KILL, }; -static void reschedule_signals(struct proc *p, sigset_t block, int flags); +sigset_t fastblock_mask; static void sigqueue_start(void) @@ -249,6 +249,8 @@ sigqueue_start(void) p31b_setcfg(CTL_P1003_1B_REALTIME_SIGNALS, _POSIX_REALTIME_SIGNALS); p31b_setcfg(CTL_P1003_1B_RTSIG_MAX, SIGRTMAX - SIGRTMIN + 1); p31b_setcfg(CTL_P1003_1B_SIGQUEUE_MAX, max_pending_per_proc); + SIGFILLSET(fastblock_mask); + SIG_CANTMASK(fastblock_mask); } ksiginfo_t * @@ -1995,8 +1997,8 @@ trapsignal(struct thread *td, ksiginfo_t *ksi) { struct sigacts *ps; struct proc *p; - int sig; - int code; + sigset_t sigmask; + int code, sig; p = td->td_proc; sig = ksi->ksi_signo; @@ -2006,8 +2008,11 @@ trapsignal(struct thread *td, ksiginfo_t *ksi) PROC_LOCK(p); ps = p->p_sigacts; mtx_lock(&ps->ps_mtx); + sigmask = td->td_sigmask; + if (td->td_sigblock_val != 0) + SIGSETOR(sigmask, fastblock_mask); if ((p->p_flag & P_TRACED) == 0 && SIGISMEMBER(ps->ps_sigcatch, sig) && - !SIGISMEMBER(td->td_sigmask, sig)) { + !SIGISMEMBER(sigmask, sig)) { #ifdef KTRACE if (KTRPOINT(curthread, KTR_PSIG)) ktrpsig(sig, ps->ps_sigact[_SIG_IDX(sig)], @@ -2023,13 +2028,14 @@ trapsignal(struct thread *td, ksiginfo_t *ksi) * masking the signal or process is ignoring the * signal. */ - if (kern_forcesigexit && - (SIGISMEMBER(td->td_sigmask, sig) || - ps->ps_sigact[_SIG_IDX(sig)] == SIG_IGN)) { + if (kern_forcesigexit && (SIGISMEMBER(sigmask, sig) || + ps->ps_sigact[_SIG_IDX(sig)] == SIG_IGN)) { SIGDELSET(td->td_sigmask, sig); SIGDELSET(ps->ps_sigcatch, sig); SIGDELSET(ps->ps_sigignore, sig); ps->ps_sigact[_SIG_IDX(sig)] = SIG_DFL; + td->td_pflags &= ~TDP_SIGFASTBLOCK; + td->td_sigblock_val = 0; } mtx_unlock(&ps->ps_mtx); p->p_sig = sig; /* XXX to verify code */ @@ -2039,21 +2045,24 @@ trapsignal(struct thread *td, ksiginfo_t *ksi) } static struct thread * -sigtd(struct proc *p, int sig, int prop) +sigtd(struct proc *p, int sig, bool fast_sigblock) { struct thread *td, *signal_td; PROC_LOCK_ASSERT(p, MA_OWNED); + MPASS(!fast_sigblock || p == curproc); /* * Check if current thread can handle the signal without * switching context to another thread. */ - if (curproc == p && !SIGISMEMBER(curthread->td_sigmask, sig)) + if (curproc == p && !SIGISMEMBER(curthread->td_sigmask, sig) && + (!fast_sigblock || curthread->td_sigblock_val == 0)) return (curthread); signal_td = NULL; FOREACH_THREAD_IN_PROC(p, td) { - if (!SIGISMEMBER(td->td_sigmask, sig)) { + if (!SIGISMEMBER(td->td_sigmask, sig) && (!fast_sigblock || + td != curthread || td->td_sigblock_val == 0)) { signal_td = td; break; } @@ -2167,7 +2176,7 @@ tdsendsignal(struct proc *p, struct thread *td, int sig, ksiginfo_t *ksi) prop = sigprop(sig); if (td == NULL) { - td = sigtd(p, sig, prop); + td = sigtd(p, sig, false); sigqueue = &p->p_sigqueue; } else sigqueue = &td->td_sigqueue; @@ -2562,7 +2571,6 @@ ptracestop(struct thread *td, int sig, ksiginfo_t *si) struct proc *p = td->td_proc; struct thread *td2; ksiginfo_t ksi; - int prop; PROC_LOCK_ASSERT(p, MA_OWNED); KASSERT(!(p->p_flag & P_WEXIT), ("Stopping exiting process")); @@ -2659,8 +2667,7 @@ stopme: ksiginfo_init(&ksi); ksi.ksi_signo = td->td_xsig; ksi.ksi_flags |= KSI_PTRACE; - prop = sigprop(td->td_xsig); - td2 = sigtd(p, td->td_xsig, prop); + td2 = sigtd(p, td->td_xsig, false); tdsendsignal(p, td2, td->td_xsig, &ksi); if (td != td2) return (0); @@ -2669,33 +2676,45 @@ stopme: return (td->td_xsig); } -static void +void reschedule_signals(struct proc *p, sigset_t block, int flags) { struct sigacts *ps; struct thread *td; int sig; + bool fastblk, pslocked; PROC_LOCK_ASSERT(p, MA_OWNED); ps = p->p_sigacts; - mtx_assert(&ps->ps_mtx, (flags & SIGPROCMASK_PS_LOCKED) != 0 ? - MA_OWNED : MA_NOTOWNED); + pslocked = (flags & SIGPROCMASK_PS_LOCKED) != 0; + mtx_assert(&ps->ps_mtx, pslocked ? MA_OWNED : MA_NOTOWNED); if (SIGISEMPTY(p->p_siglist)) return; SIGSETAND(block, p->p_siglist); + fastblk = (flags & SIGPROCMASK_FASTBLK) != 0; while ((sig = sig_ffs(&block)) != 0) { SIGDELSET(block, sig); - td = sigtd(p, sig, 0); + td = sigtd(p, sig, fastblk); + + /* + * If sigtd() selected us despite sigfastblock is + * blocking, do not activate AST or wake us, to avoid + * loop in AST handler. + */ + if (fastblk && td == curthread) + continue; + signotify(td); - if (!(flags & SIGPROCMASK_PS_LOCKED)) + if (!pslocked) mtx_lock(&ps->ps_mtx); if (p->p_flag & P_TRACED || (SIGISMEMBER(ps->ps_sigcatch, sig) && - !SIGISMEMBER(td->td_sigmask, sig))) + !SIGISMEMBER(td->td_sigmask, sig))) { tdsigwakeup(td, sig, SIG_CATCH, (SIGISMEMBER(ps->ps_sigintr, sig) ? EINTR : - ERESTART)); - if (!(flags & SIGPROCMASK_PS_LOCKED)) + ERESTART)); + } + if (!pslocked) mtx_unlock(&ps->ps_mtx); } } @@ -2844,6 +2863,24 @@ issignal(struct thread *td) SIG_STOPSIGMASK(sigpending); if (SIGISEMPTY(sigpending)) /* no signal to send */ return (0); + + /* + * Do fast sigblock if requested by usermode. Since + * we do know that there was a signal pending at this + * point, set the FAST_SIGBLOCK_PEND as indicator for + * usermode to perform a dummy call to + * FAST_SIGBLOCK_UNBLOCK, which causes immediate + * delivery of postponed pending signal. + */ + if ((td->td_pflags & TDP_SIGFASTBLOCK) != 0) { + if (td->td_sigblock_val != 0) + SIGSETNAND(sigpending, fastblock_mask); + if (SIGISEMPTY(sigpending)) { + td->td_pflags |= TDP_SIGFASTPENDING; + return (0); + } + } + if ((p->p_flag & (P_TRACED | P_PPTRACE)) == P_TRACED && (p->p_flag2 & P2_PTRACE_FSTP) != 0 && SIGISMEMBER(sigpending, SIGSTOP)) { @@ -3914,3 +3951,118 @@ sig_drop_caught(struct proc *p) sigqueue_delete_proc(p, sig); } } + +int +sys_sigfastblock(struct thread *td, struct sigfastblock_args *uap) +{ + struct proc *p; + int error, res; + uint32_t oldval; + + error = 0; + switch (uap->cmd) { + case SIGFASTBLOCK_SETPTR: + if ((td->td_pflags & TDP_SIGFASTBLOCK) != 0) { + error = EBUSY; + break; + } + if (((uintptr_t)(uap->ptr) & (sizeof(uint32_t) - 1)) != 0) { + error = EINVAL; + break; + } + td->td_pflags |= TDP_SIGFASTBLOCK; + td->td_sigblock_ptr = uap->ptr; + break; + + case SIGFASTBLOCK_UNBLOCK: + if ((td->td_pflags & TDP_SIGFASTBLOCK) != 0) { + error = EINVAL; + break; + } +again: + res = casueword32(td->td_sigblock_ptr, SIGFASTBLOCK_PEND, + &oldval, 0); + if (res == -1) { + error = EFAULT; + break; + } + if (res == 1) { + if (oldval != SIGFASTBLOCK_PEND) { + error = EBUSY; + break; + } + error = thread_check_susp(td, false); + if (error != 0) + break; + goto again; + } + td->td_sigblock_val = 0; + + /* + * Rely on normal ast mechanism to deliver pending + * signals to current thread. But notify others about + * fake unblock. + */ + p = td->td_proc; + if (error == 0 && p->p_numthreads != 1) { + PROC_LOCK(p); + reschedule_signals(p, td->td_sigmask, 0); + PROC_UNLOCK(p); + } + break; + + case SIGFASTBLOCK_UNSETPTR: + if ((td->td_pflags & TDP_SIGFASTBLOCK) == 0) { + error = EINVAL; + break; + } + res = fueword32(td->td_sigblock_ptr, &oldval); + if (res == -1) { + error = EFAULT; + break; + } + if (oldval != 0 && oldval != SIGFASTBLOCK_PEND) { + error = EBUSY; + break; + } + td->td_pflags &= ~TDP_SIGFASTBLOCK; + td->td_sigblock_val = 0; + break; + + default: + error = EINVAL; + break; + } + return (error); +} + +void +fetch_sigfastblock(struct thread *td) +{ + + if ((td->td_pflags & TDP_SIGFASTBLOCK) == 0) + return; + if (fueword32(td->td_sigblock_ptr, &td->td_sigblock_val) == -1) { + fetch_sigfastblock_failed(td, false); + return; + } + td->td_sigblock_val &= ~SIGFASTBLOCK_FLAGS; +} + +void +fetch_sigfastblock_failed(struct thread *td, bool write) +{ + ksiginfo_t ksi; + + /* + * Prevent further fetches and SIGSEGVs, allowing thread to + * issue syscalls despite corruption. + */ + td->td_pflags &= ~TDP_SIGFASTBLOCK; + + ksiginfo_init_trap(&ksi); + ksi.ksi_signo = SIGSEGV; + ksi.ksi_code = write ? SEGV_ACCERR : SEGV_MAPERR; + ksi.ksi_addr = td->td_sigblock_ptr; + trapsignal(td, &ksi); +} diff --git a/sys/kern/kern_thread.c b/sys/kern/kern_thread.c index 83c22309fd7..b3746553f2a 100644 --- a/sys/kern/kern_thread.c +++ b/sys/kern/kern_thread.c @@ -82,9 +82,9 @@ _Static_assert(offsetof(struct thread, td_flags) == 0xfc, "struct thread KBI td_flags"); _Static_assert(offsetof(struct thread, td_pflags) == 0x104, "struct thread KBI td_pflags"); -_Static_assert(offsetof(struct thread, td_frame) == 0x480, +_Static_assert(offsetof(struct thread, td_frame) == 0x490, "struct thread KBI td_frame"); -_Static_assert(offsetof(struct thread, td_emuldata) == 0x690, +_Static_assert(offsetof(struct thread, td_emuldata) == 0x6a0, "struct thread KBI td_emuldata"); _Static_assert(offsetof(struct proc, p_flag) == 0xb0, "struct proc KBI p_flag"); @@ -102,9 +102,9 @@ _Static_assert(offsetof(struct thread, td_flags) == 0x98, "struct thread KBI td_flags"); _Static_assert(offsetof(struct thread, td_pflags) == 0xa0, "struct thread KBI td_pflags"); -_Static_assert(offsetof(struct thread, td_frame) == 0x2f0, +_Static_assert(offsetof(struct thread, td_frame) == 0x2f8, "struct thread KBI td_frame"); -_Static_assert(offsetof(struct thread, td_emuldata) == 0x338, +_Static_assert(offsetof(struct thread, td_emuldata) == 0x340, "struct thread KBI td_emuldata"); _Static_assert(offsetof(struct proc, p_flag) == 0x68, "struct proc KBI p_flag"); diff --git a/sys/kern/subr_syscall.c b/sys/kern/subr_syscall.c index 951e7b68262..a6f8e9d6b7d 100644 --- a/sys/kern/subr_syscall.c +++ b/sys/kern/subr_syscall.c @@ -140,6 +140,13 @@ syscallenter(struct thread *td) /* Let system calls set td_errno directly. */ td->td_pflags &= ~TDP_NERRNO; + /* + * Fetch fast sigblock value at the time of syscall + * entry because sleepqueue primitives might call + * cursig(). + */ + fetch_sigfastblock(td); + AUDIT_SYSCALL_ENTER(sa->code, td); error = (sa->callp->sy_call)(td, sa->args); AUDIT_SYSCALL_EXIT(error, td); diff --git a/sys/kern/subr_trap.c b/sys/kern/subr_trap.c index 3285272b185..a7f842a1948 100644 --- a/sys/kern/subr_trap.c +++ b/sys/kern/subr_trap.c @@ -116,12 +116,16 @@ userret(struct thread *td, struct trapframe *frame) if (p->p_numthreads == 1) { PROC_LOCK(p); thread_lock(td); - if ((p->p_flag & P_PPWAIT) == 0) { - KASSERT(!SIGPENDING(td) || (td->td_flags & - (TDF_NEEDSIGCHK | TDF_ASTPENDING)) == - (TDF_NEEDSIGCHK | TDF_ASTPENDING), - ("failed to set signal flags for ast p %p " - "td %p fl %x", p, td, td->td_flags)); + if ((p->p_flag & P_PPWAIT) == 0 && + (td->td_pflags & TDP_SIGFASTBLOCK) == 0) { + if (SIGPENDING(td) && (td->td_flags & + (TDF_NEEDSIGCHK | TDF_ASTPENDING)) != + (TDF_NEEDSIGCHK | TDF_ASTPENDING)) { + thread_unlock(td); + panic( + "failed to set signal flags for ast p %p td %p fl %x", + p, td, td->td_flags); + } } thread_unlock(td); PROC_UNLOCK(p); @@ -218,8 +222,8 @@ ast(struct trapframe *framep) { struct thread *td; struct proc *p; - int flags; - int sig; + uint32_t oldval; + int flags, sig, res; td = curthread; p = td->td_proc; @@ -298,12 +302,16 @@ ast(struct trapframe *framep) * the reason for looping check for AST condition. * See comment in userret() about P_PPWAIT. */ - if ((p->p_flag & P_PPWAIT) == 0) { - KASSERT(!SIGPENDING(td) || (td->td_flags & - (TDF_NEEDSIGCHK | TDF_ASTPENDING)) == - (TDF_NEEDSIGCHK | TDF_ASTPENDING), - ("failed2 to set signal flags for ast p %p td %p " - "fl %x %x", p, td, flags, td->td_flags)); + if ((p->p_flag & P_PPWAIT) == 0 && + (td->td_pflags & TDP_SIGFASTBLOCK) == 0) { + if (SIGPENDING(td) && (td->td_flags & + (TDF_NEEDSIGCHK | TDF_ASTPENDING)) != + (TDF_NEEDSIGCHK | TDF_ASTPENDING)) { + thread_unlock(td); /* fix dumps */ + panic( + "failed2 to set signal flags for ast p %p td %p fl %x %x", + p, td, flags, td->td_flags); + } } thread_unlock(td); PROC_UNLOCK(p); @@ -317,15 +325,54 @@ ast(struct trapframe *framep) */ if (flags & TDF_NEEDSIGCHK || p->p_pendingcnt > 0 || !SIGISEMPTY(p->p_siglist)) { + fetch_sigfastblock(td); PROC_LOCK(p); mtx_lock(&p->p_sigacts->ps_mtx); - while ((sig = cursig(td)) != 0) { - KASSERT(sig >= 0, ("sig %d", sig)); - postsig(sig); + if ((td->td_pflags & TDP_SIGFASTBLOCK) != 0 && + td->td_sigblock_val != 0) { + reschedule_signals(p, fastblock_mask, + SIGPROCMASK_PS_LOCKED | SIGPROCMASK_FASTBLK); + } else { + while ((sig = cursig(td)) != 0) { + KASSERT(sig >= 0, ("sig %d", sig)); + postsig(sig); + } } mtx_unlock(&p->p_sigacts->ps_mtx); PROC_UNLOCK(p); } + + /* + * Handle deferred update of the fast sigblock value, after + * the postsig() loop was performed. + */ + if (td->td_pflags & TDP_SIGFASTPENDING) { + td->td_pflags &= ~TDP_SIGFASTPENDING; + res = fueword32(td->td_sigblock_ptr, &oldval); + if (res == -1) { + fetch_sigfastblock_failed(td, false); + } else { + for (;;) { + oldval |= SIGFASTBLOCK_PEND; + res = casueword32(td->td_sigblock_ptr, oldval, + &oldval, oldval | SIGFASTBLOCK_PEND); + if (res == -1) { + fetch_sigfastblock_failed(td, true); + break; + } + if (res == 0) { + td->td_sigblock_val = oldval & + ~SIGFASTBLOCK_FLAGS; + break; + } + MPASS(res == 1); + res = thread_check_susp(td, false); + if (res != 0) + break; + } + } + } + /* * We need to check to see if we have to exit or wait due to a * single threading requirement or some other STOP condition. diff --git a/sys/kern/syscalls.master b/sys/kern/syscalls.master index 8c7a3bd06a6..47a42020d2c 100644 --- a/sys/kern/syscalls.master +++ b/sys/kern/syscalls.master @@ -3212,6 +3212,12 @@ int flags ); } +573 AUE_NULL STD { + int sigfastblock( + int cmd, + _Inout_opt_ uint32_t *ptr + ); + } ; Please copy any additions and changes to the following compatability tables: ; sys/compat/freebsd32/syscalls.master diff --git a/sys/sys/proc.h b/sys/sys/proc.h index 2a85b035a7b..f657a4cc7af 100644 --- a/sys/sys/proc.h +++ b/sys/sys/proc.h @@ -322,6 +322,9 @@ struct thread { uintptr_t td_rb_inact; /* (k) Current in-action mutex loc. */ struct syscall_args td_sa; /* (kx) Syscall parameters. Copied on fork for child tracing. */ + void *td_sigblock_ptr; /* (k) uptr for fast sigblock. */ + uint32_t td_sigblock_val; /* (k) fast sigblock value read at + td_sigblock_ptr on kern entry */ #define td_endcopy td_pcb /* @@ -486,7 +489,7 @@ do { \ #define TDP_ALTSTACK 0x00000020 /* Have alternate signal stack. */ #define TDP_DEADLKTREAT 0x00000040 /* Lock acquisition - deadlock treatment. */ #define TDP_NOFAULTING 0x00000080 /* Do not handle page faults. */ -#define TDP_UNUSED9 0x00000100 /* --available-- */ +#define TDP_SIGFASTBLOCK 0x00000100 /* Fast sigblock active */ #define TDP_OWEUPC 0x00000200 /* Call addupc() at next AST. */ #define TDP_ITHREAD 0x00000400 /* Thread is an interrupt thread. */ #define TDP_SYNCIO 0x00000800 /* Local override, disable async i/o. */ @@ -509,6 +512,7 @@ do { \ #define TDP_UIOHELD 0x10000000 /* Current uio has pages held in td_ma */ #define TDP_FORKING 0x20000000 /* Thread is being created through fork() */ #define TDP_EXECVMSPC 0x40000000 /* Execve destroyed old vmspace */ +#define TDP_SIGFASTPENDING 0x80000000 /* Pending signal due to sigfastblock */ /* * Reasons that the current thread can not be run yet. diff --git a/sys/sys/signalvar.h b/sys/sys/signalvar.h index ed82ff12320..66a87c0e4b2 100644 --- a/sys/sys/signalvar.h +++ b/sys/sys/signalvar.h @@ -256,7 +256,23 @@ typedef struct sigqueue { /* Flags for ksi_flags */ #define SQ_INIT 0x01 +/* + * Fast_sigblock + */ +#define SIGFASTBLOCK_SETPTR 1 +#define SIGFASTBLOCK_UNBLOCK 2 +#define SIGFASTBLOCK_UNSETPTR 3 + +#define SIGFASTBLOCK_PEND 0x1 +#define SIGFASTBLOCK_FLAGS 0xf +#define SIGFASTBLOCK_INC 0x10 + +#ifndef _KERNEL +int __sys_sigfastblock(int cmd, void *ptr); +#endif + #ifdef _KERNEL +extern sigset_t fastblock_mask; /* Return nonzero if process p has an unmasked pending signal. */ #define SIGPENDING(td) \ @@ -328,6 +344,7 @@ extern struct mtx sigio_lock; #define SIGPROCMASK_OLD 0x0001 #define SIGPROCMASK_PROC_LOCKED 0x0002 #define SIGPROCMASK_PS_LOCKED 0x0004 +#define SIGPROCMASK_FASTBLK 0x0008 /* * Modes for sigdeferstop(). Manages behaviour of @@ -365,6 +382,8 @@ sigallowstop(int prev) int cursig(struct thread *td); void execsigs(struct proc *p); +void fetch_sigfastblock(struct thread *td); +void fetch_sigfastblock_failed(struct thread *td, bool write); void gsignal(int pgid, int sig, ksiginfo_t *ksi); void killproc(struct proc *p, char *why); ksiginfo_t * ksiginfo_alloc(int wait); @@ -375,6 +394,7 @@ void pgsignal(struct pgrp *pgrp, int sig, int checkctty, ksiginfo_t *ksi); int postsig(int sig); void kern_psignal(struct proc *p, int sig); int ptracestop(struct thread *td, int sig, ksiginfo_t *si); +void reschedule_signals(struct proc *p, sigset_t block, int flags); void sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *retmask); struct sigacts *sigacts_alloc(void); void sigacts_copy(struct sigacts *dest, struct sigacts *src); From f88c67a625b83004cd93f7ef30c0a0d36e881163 Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Sun, 9 Feb 2020 11:53:37 +0000 Subject: [PATCH 024/144] Regen. --- sys/compat/freebsd32/freebsd32_syscall.h | 3 ++- sys/compat/freebsd32/freebsd32_syscalls.c | 1 + sys/compat/freebsd32/freebsd32_sysent.c | 1 + .../freebsd32/freebsd32_systrace_args.c | 26 +++++++++++++++++++ sys/kern/init_sysent.c | 1 + sys/kern/syscalls.c | 1 + sys/kern/systrace_args.c | 26 +++++++++++++++++++ sys/sys/syscall.h | 3 ++- sys/sys/syscall.mk | 3 ++- sys/sys/sysproto.h | 6 +++++ 10 files changed, 68 insertions(+), 3 deletions(-) diff --git a/sys/compat/freebsd32/freebsd32_syscall.h b/sys/compat/freebsd32/freebsd32_syscall.h index bcdb1579cb5..6f91a1190a1 100644 --- a/sys/compat/freebsd32/freebsd32_syscall.h +++ b/sys/compat/freebsd32/freebsd32_syscall.h @@ -499,4 +499,5 @@ #define FREEBSD32_SYS_freebsd32___sysctlbyname 570 #define FREEBSD32_SYS_shm_open2 571 #define FREEBSD32_SYS_shm_rename 572 -#define FREEBSD32_SYS_MAXSYSCALL 573 +#define FREEBSD32_SYS_sigfastblock 573 +#define FREEBSD32_SYS_MAXSYSCALL 574 diff --git a/sys/compat/freebsd32/freebsd32_syscalls.c b/sys/compat/freebsd32/freebsd32_syscalls.c index 223c6772829..deefa2d2263 100644 --- a/sys/compat/freebsd32/freebsd32_syscalls.c +++ b/sys/compat/freebsd32/freebsd32_syscalls.c @@ -609,4 +609,5 @@ const char *freebsd32_syscallnames[] = { "freebsd32___sysctlbyname", /* 570 = freebsd32___sysctlbyname */ "shm_open2", /* 571 = shm_open2 */ "shm_rename", /* 572 = shm_rename */ + "sigfastblock", /* 573 = sigfastblock */ }; diff --git a/sys/compat/freebsd32/freebsd32_sysent.c b/sys/compat/freebsd32/freebsd32_sysent.c index 52baae6c02b..b703c0fa1e3 100644 --- a/sys/compat/freebsd32/freebsd32_sysent.c +++ b/sys/compat/freebsd32/freebsd32_sysent.c @@ -662,4 +662,5 @@ struct sysent freebsd32_sysent[] = { { AS(freebsd32___sysctlbyname_args), (sy_call_t *)freebsd32___sysctlbyname, AUE_SYSCTL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 570 = freebsd32___sysctlbyname */ { AS(shm_open2_args), (sy_call_t *)sys_shm_open2, AUE_SHMOPEN, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 571 = shm_open2 */ { AS(shm_rename_args), (sy_call_t *)sys_shm_rename, AUE_SHMRENAME, NULL, 0, 0, 0, SY_THR_STATIC }, /* 572 = shm_rename */ + { AS(sigfastblock_args), (sy_call_t *)sys_sigfastblock, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 573 = sigfastblock */ }; diff --git a/sys/compat/freebsd32/freebsd32_systrace_args.c b/sys/compat/freebsd32/freebsd32_systrace_args.c index 178bbf0a842..2abc302f307 100644 --- a/sys/compat/freebsd32/freebsd32_systrace_args.c +++ b/sys/compat/freebsd32/freebsd32_systrace_args.c @@ -3355,6 +3355,14 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args) *n_args = 3; break; } + /* sigfastblock */ + case 573: { + struct sigfastblock_args *p = params; + iarg[0] = p->cmd; /* int */ + uarg[1] = (intptr_t) p->ptr; /* uint32_t * */ + *n_args = 2; + break; + } default: *n_args = 0; break; @@ -9041,6 +9049,19 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz) break; }; break; + /* sigfastblock */ + case 573: + switch(ndx) { + case 0: + p = "int"; + break; + case 1: + p = "userland uint32_t *"; + break; + default: + break; + }; + break; default: break; }; @@ -10930,6 +10951,11 @@ systrace_return_setargdesc(int sysnum, int ndx, char *desc, size_t descsz) if (ndx == 0 || ndx == 1) p = "int"; break; + /* sigfastblock */ + case 573: + if (ndx == 0 || ndx == 1) + p = "int"; + break; default: break; }; diff --git a/sys/kern/init_sysent.c b/sys/kern/init_sysent.c index b64105fdea3..edb76ee279a 100644 --- a/sys/kern/init_sysent.c +++ b/sys/kern/init_sysent.c @@ -628,4 +628,5 @@ struct sysent sysent[] = { { AS(__sysctlbyname_args), (sy_call_t *)sys___sysctlbyname, AUE_SYSCTL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 570 = __sysctlbyname */ { AS(shm_open2_args), (sy_call_t *)sys_shm_open2, AUE_SHMOPEN, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 571 = shm_open2 */ { AS(shm_rename_args), (sy_call_t *)sys_shm_rename, AUE_SHMRENAME, NULL, 0, 0, 0, SY_THR_STATIC }, /* 572 = shm_rename */ + { AS(sigfastblock_args), (sy_call_t *)sys_sigfastblock, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 573 = sigfastblock */ }; diff --git a/sys/kern/syscalls.c b/sys/kern/syscalls.c index 3daa26a41f0..0df4e03756e 100644 --- a/sys/kern/syscalls.c +++ b/sys/kern/syscalls.c @@ -579,4 +579,5 @@ const char *syscallnames[] = { "__sysctlbyname", /* 570 = __sysctlbyname */ "shm_open2", /* 571 = shm_open2 */ "shm_rename", /* 572 = shm_rename */ + "sigfastblock", /* 573 = sigfastblock */ }; diff --git a/sys/kern/systrace_args.c b/sys/kern/systrace_args.c index 01a9a4e63cb..346415a6978 100644 --- a/sys/kern/systrace_args.c +++ b/sys/kern/systrace_args.c @@ -3347,6 +3347,14 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args) *n_args = 3; break; } + /* sigfastblock */ + case 573: { + struct sigfastblock_args *p = params; + iarg[0] = p->cmd; /* int */ + uarg[1] = (intptr_t) p->ptr; /* uint32_t * */ + *n_args = 2; + break; + } default: *n_args = 0; break; @@ -8946,6 +8954,19 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz) break; }; break; + /* sigfastblock */ + case 573: + switch(ndx) { + case 0: + p = "int"; + break; + case 1: + p = "userland uint32_t *"; + break; + default: + break; + }; + break; default: break; }; @@ -10862,6 +10883,11 @@ systrace_return_setargdesc(int sysnum, int ndx, char *desc, size_t descsz) if (ndx == 0 || ndx == 1) p = "int"; break; + /* sigfastblock */ + case 573: + if (ndx == 0 || ndx == 1) + p = "int"; + break; default: break; }; diff --git a/sys/sys/syscall.h b/sys/sys/syscall.h index bfe648fa080..5b183036661 100644 --- a/sys/sys/syscall.h +++ b/sys/sys/syscall.h @@ -508,4 +508,5 @@ #define SYS___sysctlbyname 570 #define SYS_shm_open2 571 #define SYS_shm_rename 572 -#define SYS_MAXSYSCALL 573 +#define SYS_sigfastblock 573 +#define SYS_MAXSYSCALL 574 diff --git a/sys/sys/syscall.mk b/sys/sys/syscall.mk index 269010e25e7..c095831023a 100644 --- a/sys/sys/syscall.mk +++ b/sys/sys/syscall.mk @@ -413,4 +413,5 @@ MIASM = \ copy_file_range.o \ __sysctlbyname.o \ shm_open2.o \ - shm_rename.o + shm_rename.o \ + sigfastblock.o diff --git a/sys/sys/sysproto.h b/sys/sys/sysproto.h index 05acc23c5a0..6817ecf6f4e 100644 --- a/sys/sys/sysproto.h +++ b/sys/sys/sysproto.h @@ -1819,6 +1819,10 @@ struct shm_rename_args { char path_to_l_[PADL_(const char *)]; const char * path_to; char path_to_r_[PADR_(const char *)]; char flags_l_[PADL_(int)]; int flags; char flags_r_[PADR_(int)]; }; +struct sigfastblock_args { + char cmd_l_[PADL_(int)]; int cmd; char cmd_r_[PADR_(int)]; + char ptr_l_[PADL_(uint32_t *)]; uint32_t * ptr; char ptr_r_[PADR_(uint32_t *)]; +}; int nosys(struct thread *, struct nosys_args *); void sys_sys_exit(struct thread *, struct sys_exit_args *); int sys_fork(struct thread *, struct fork_args *); @@ -2207,6 +2211,7 @@ int sys_copy_file_range(struct thread *, struct copy_file_range_args *); int sys___sysctlbyname(struct thread *, struct __sysctlbyname_args *); int sys_shm_open2(struct thread *, struct shm_open2_args *); int sys_shm_rename(struct thread *, struct shm_rename_args *); +int sys_sigfastblock(struct thread *, struct sigfastblock_args *); #ifdef COMPAT_43 @@ -3130,6 +3135,7 @@ int freebsd12_shm_open(struct thread *, struct freebsd12_shm_open_args *); #define SYS_AUE___sysctlbyname AUE_SYSCTL #define SYS_AUE_shm_open2 AUE_SHMOPEN #define SYS_AUE_shm_rename AUE_SHMRENAME +#define SYS_AUE_sigfastblock AUE_NULL #undef PAD_ #undef PADL_ From 944cf37bb581e4e7c92823def2f0ebfa524d379f Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Sun, 9 Feb 2020 12:10:37 +0000 Subject: [PATCH 025/144] Add AT_BSDFLAGS auxv entry. The intent is to provide bsd-specific flags relevant to interpreter and C runtime. I did not want to reuse AT_FLAGS which is common ELF auxv entry. Use bsdflags to report kernel support for sigfastblock(2). This allows rtld and libthr to safely infer the syscall presence without SIGSYS. The tunable kern.elf{32,64}.sigfastblock blocks reporting. Tested by: pho Disscussed with: cem, emaste, jilles Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D12773 --- sys/kern/imgact_elf.c | 7 +++++++ sys/sys/elf_common.h | 4 +++- usr.bin/procstat/procstat_auxv.c | 6 ++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/sys/kern/imgact_elf.c b/sys/kern/imgact_elf.c index b59f8c85ea1..4af4a5de96a 100644 --- a/sys/kern/imgact_elf.c +++ b/sys/kern/imgact_elf.c @@ -183,6 +183,11 @@ SYSCTL_INT(ASLR_NODE_OID, OID_AUTO, stack_gap, CTLFLAG_RW, __XSTRING(__CONCAT(ELF, __ELF_WORD_SIZE)) ": maximum percentage of main stack to waste on a random gap"); +static int __elfN(sigfastblock) = 1; +SYSCTL_INT(__CONCAT(_kern_elf, __ELF_WORD_SIZE), OID_AUTO, sigfastblock, + CTLFLAG_RWTUN, &__elfN(sigfastblock), 0, + "enable sigfastblock for new processes"); + static Elf_Brandinfo *elf_brand_list[MAX_BRANDS]; #define aligned(a, t) (rounddown2((u_long)(a), sizeof(t)) == (u_long)(a)) @@ -1366,6 +1371,8 @@ __elfN(freebsd_copyout_auxargs)(struct image_params *imgp, uintptr_t base) AUXARGS_ENTRY(pos, AT_HWCAP, *imgp->sysent->sv_hwcap); if (imgp->sysent->sv_hwcap2 != NULL) AUXARGS_ENTRY(pos, AT_HWCAP2, *imgp->sysent->sv_hwcap2); + AUXARGS_ENTRY(pos, AT_BSDFLAGS, __elfN(sigfastblock) ? + ELF_BSDF_SIGFASTBLK : 0); AUXARGS_ENTRY(pos, AT_NULL, 0); free(imgp->auxargs, M_TEMP); diff --git a/sys/sys/elf_common.h b/sys/sys/elf_common.h index daf961867e5..643ad61ac82 100644 --- a/sys/sys/elf_common.h +++ b/sys/sys/elf_common.h @@ -954,8 +954,9 @@ typedef struct { #define AT_EHDRFLAGS 24 /* e_flags field from elf hdr */ #define AT_HWCAP 25 /* CPU feature flags. */ #define AT_HWCAP2 26 /* CPU feature flags 2. */ +#define AT_BSDFLAGS 27 /* ELF BSD Flags. */ -#define AT_COUNT 27 /* Count of defined aux entry types. */ +#define AT_COUNT 28 /* Count of defined aux entry types. */ /* * Relocation types. @@ -1456,5 +1457,6 @@ typedef struct { #define R_X86_64_TLSDESC 36 #define R_X86_64_IRELATIVE 37 +#define ELF_BSDF_SIGFASTBLK 0x0001 /* Kernel supports fast sigblock */ #endif /* !_SYS_ELF_COMMON_H_ */ diff --git a/usr.bin/procstat/procstat_auxv.c b/usr.bin/procstat/procstat_auxv.c index 785896d0c6a..911132dc79e 100644 --- a/usr.bin/procstat/procstat_auxv.c +++ b/usr.bin/procstat/procstat_auxv.c @@ -196,6 +196,12 @@ procstat_auxv(struct procstat *procstat, struct kinfo_proc *kipp) xo_emit("{dw:/%s}{Lw:/%-16s/%s}{:AT_HWCAP2/%#lx}\n", prefix, "AT_HWCAP2", (u_long)auxv[i].a_un.a_val); break; +#endif +#ifdef AT_BSDFLAGS + case AT_BSDFLAGS: + xo_emit("{dw:/%s}{Lw:/%-16s/%s}{:AT_BSDFLAGS/%#lx}\n", + prefix, "AT_BSDFLAGS", (u_long)auxv[i].a_un.a_val); + break; #endif default: xo_emit("{dw:/%s}{Lw:/%16ld/%ld}{:UNKNOWN/%#lx}\n", From a1fd89b45f4a3294d8bf7072a07e5d5a2a507670 Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Sun, 9 Feb 2020 12:12:03 +0000 Subject: [PATCH 026/144] Add AT_BSDFLAGS support to _elf_aux_info(3). Tested by: pho Disscussed with: cem, emaste, jilles Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D12773 --- lib/libc/gen/auxv.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/libc/gen/auxv.c b/lib/libc/gen/auxv.c index cd161c9e0a8..d868566c488 100644 --- a/lib/libc/gen/auxv.c +++ b/lib/libc/gen/auxv.c @@ -67,7 +67,7 @@ __init_elf_aux_vector(void) } static pthread_once_t aux_once = PTHREAD_ONCE_INIT; -static int pagesize, osreldate, canary_len, ncpus, pagesizes_len; +static int pagesize, osreldate, canary_len, ncpus, pagesizes_len, bsdflags; static int hwcap_present, hwcap2_present; static char *canary, *pagesizes, *execpath; static void *timekeep; @@ -86,6 +86,10 @@ init_aux(void) for (aux = __elf_aux_vector; aux->a_type != AT_NULL; aux++) { switch (aux->a_type) { + case AT_BSDFLAGS: + bsdflags = aux->a_un.a_val; + break; + case AT_CANARY: canary = (char *)(aux->a_un.a_ptr); break; @@ -326,6 +330,13 @@ _elf_aux_info(int aux, void *buf, int buflen) } else res = EINVAL; break; + case AT_BSDFLAGS: + if (buflen == sizeof(int)) { + *(int *)buf = bsdflags; + res = 0; + } else + res = EINVAL; + break; default: res = ENOENT; break; From aef199e56393cbe7df59c27733d41c6add7b560b Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Sun, 9 Feb 2020 12:22:43 +0000 Subject: [PATCH 027/144] Use sigfastblock(2) in rtld. This allows for rtld to not issue two sigprocmask(2) syscalls for each symbol binding operation in single-threaded processes. Rtld needs to block signals as part of locking to ensure signal safety of the bind process, because signal handlers might need to lazily resolve symbol references. As result, number of syscalls issued on startup by simple programs not using libthr, is typically reduced 2x. For instance, for hello world, I see: non-sigfastblock # (truss ./hello > /dev/null) |& wc -l 63 sigfastblock # (truss ./hello > /dev/null) |& wc -l 37 Tested by: pho Disscussed with: cem, emaste, jilles Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D12773 --- libexec/rtld-elf/rtld-libc/Makefile.inc | 5 +- libexec/rtld-elf/rtld.c | 5 ++ libexec/rtld-elf/rtld.h | 1 + libexec/rtld-elf/rtld_lock.c | 102 +++++++++++++++--------- 4 files changed, 72 insertions(+), 41 deletions(-) diff --git a/libexec/rtld-elf/rtld-libc/Makefile.inc b/libexec/rtld-elf/rtld-libc/Makefile.inc index dc3a1e47da3..90e9f97251a 100644 --- a/libexec/rtld-elf/rtld-libc/Makefile.inc +++ b/libexec/rtld-elf/rtld-libc/Makefile.inc @@ -45,8 +45,9 @@ _libc_string_objects= bcmp bcopy bzero memset memchr memcmp memcpy memmove \ strlen strncmp strncpy strrchr strsep strspn strstr strtok # Also use all the syscall .o files from libc_nossp_pic: _libc_other_objects= sigsetjmp lstat stat fstat fstatat fstatfs syscall \ - cerror geteuid getegid munmap mprotect sysarch __sysctl issetugid __getcwd \ - utrace thr_self thr_kill pread mmap lseek _exit _fstat _fstatat _fstatfs \ + cerror geteuid getegid sigfastblock munmap mprotect \ + sysarch __sysctl issetugid __getcwd utrace \ + thr_self thr_kill pread mmap lseek _exit _fstat _fstatat _fstatfs \ getdirentries _getdirentries _close _fcntl _open _openat _read \ _sigprocmask _write readlink _setjmp setjmp setjmperr diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c index 3e87e53a315..4d3b32381cb 100644 --- a/libexec/rtld-elf/rtld.c +++ b/libexec/rtld-elf/rtld.c @@ -286,6 +286,7 @@ Elf_Addr tls_dtv_generation = 1; /* Used to detect when dtv size changes */ int tls_max_index = 1; /* Largest module index allocated */ static bool ld_library_path_rpath = false; +bool ld_fast_sigblock = false; /* * Globals for path names, and such @@ -444,6 +445,10 @@ _rtld(Elf_Addr *sp, func_ptr_type *exit_proc, Obj_Entry **objp) main_argc = argc; main_argv = argv; + if (aux_info[AT_BSDFLAGS] != NULL && + (aux_info[AT_BSDFLAGS]->a_un.a_val & ELF_BSDF_SIGFASTBLK) != 0) + ld_fast_sigblock = true; + trust = !issetugid(); md_abi_variant_hook(aux_info); diff --git a/libexec/rtld-elf/rtld.h b/libexec/rtld-elf/rtld.h index c1996f04219..f21b1d79cf2 100644 --- a/libexec/rtld-elf/rtld.h +++ b/libexec/rtld-elf/rtld.h @@ -365,6 +365,7 @@ void free_aligned(void *ptr); extern Elf_Addr _GLOBAL_OFFSET_TABLE_[]; extern Elf_Sym sym_zero; /* For resolving undefined weak refs. */ extern bool ld_bind_not; +extern bool ld_fast_sigblock; void dump_relocations(Obj_Entry *); void dump_obj_relocations(Obj_Entry *); diff --git a/libexec/rtld-elf/rtld_lock.c b/libexec/rtld-elf/rtld_lock.c index 77f8f5d747d..c453584b96e 100644 --- a/libexec/rtld-elf/rtld_lock.c +++ b/libexec/rtld-elf/rtld_lock.c @@ -45,6 +45,7 @@ */ #include +#include #include #include #include @@ -68,6 +69,7 @@ typedef struct Struct_Lock { static sigset_t fullsigmask, oldsigmask; static int thread_flag, wnested; +static uint32_t fsigblock; static void * def_lock_create(void) @@ -117,6 +119,17 @@ def_rlock_acquire(void *lock) ; /* Spin */ } +static void +sig_fastunblock(void) +{ + uint32_t oldval; + + assert((fsigblock & ~SIGFASTBLOCK_FLAGS) >= SIGFASTBLOCK_INC); + oldval = atomic_fetchadd_32(&fsigblock, -SIGFASTBLOCK_INC); + if (oldval == (SIGFASTBLOCK_PEND | SIGFASTBLOCK_INC)) + __sys_sigfastblock(SIGFASTBLOCK_UNBLOCK, NULL); +} + static void def_wlock_acquire(void *lock) { @@ -124,14 +137,23 @@ def_wlock_acquire(void *lock) sigset_t tmp_oldsigmask; l = (Lock *)lock; - for (;;) { - sigprocmask(SIG_BLOCK, &fullsigmask, &tmp_oldsigmask); - if (atomic_cmpset_acq_int(&l->lock, 0, WAFLAG)) - break; - sigprocmask(SIG_SETMASK, &tmp_oldsigmask, NULL); + if (ld_fast_sigblock) { + for (;;) { + atomic_add_32(&fsigblock, SIGFASTBLOCK_INC); + if (atomic_cmpset_acq_int(&l->lock, 0, WAFLAG)) + break; + sig_fastunblock(); + } + } else { + for (;;) { + sigprocmask(SIG_BLOCK, &fullsigmask, &tmp_oldsigmask); + if (atomic_cmpset_acq_int(&l->lock, 0, WAFLAG)) + break; + sigprocmask(SIG_SETMASK, &tmp_oldsigmask, NULL); + } + if (atomic_fetchadd_int(&wnested, 1) == 0) + oldsigmask = tmp_oldsigmask; } - if (atomic_fetchadd_int(&wnested, 1) == 0) - oldsigmask = tmp_oldsigmask; } static void @@ -143,9 +165,10 @@ def_lock_release(void *lock) if ((l->lock & WAFLAG) == 0) atomic_add_rel_int(&l->lock, -RC_INCR); else { - assert(wnested > 0); atomic_add_rel_int(&l->lock, -WAFLAG); - if (atomic_fetchadd_int(&wnested, -1) == 1) + if (ld_fast_sigblock) + sig_fastunblock(); + else if (atomic_fetchadd_int(&wnested, -1) == 1) sigprocmask(SIG_SETMASK, &oldsigmask, NULL); } } @@ -279,38 +302,36 @@ lock_restart_for_upgrade(RtldLockState *lockstate) void lockdflt_init(void) { - int i; + int i; - deflockinfo.rtli_version = RTLI_VERSION; - deflockinfo.lock_create = def_lock_create; - deflockinfo.lock_destroy = def_lock_destroy; - deflockinfo.rlock_acquire = def_rlock_acquire; - deflockinfo.wlock_acquire = def_wlock_acquire; - deflockinfo.lock_release = def_lock_release; - deflockinfo.thread_set_flag = def_thread_set_flag; - deflockinfo.thread_clr_flag = def_thread_clr_flag; - deflockinfo.at_fork = NULL; + deflockinfo.rtli_version = RTLI_VERSION; + deflockinfo.lock_create = def_lock_create; + deflockinfo.lock_destroy = def_lock_destroy; + deflockinfo.rlock_acquire = def_rlock_acquire; + deflockinfo.wlock_acquire = def_wlock_acquire; + deflockinfo.lock_release = def_lock_release; + deflockinfo.thread_set_flag = def_thread_set_flag; + deflockinfo.thread_clr_flag = def_thread_clr_flag; + deflockinfo.at_fork = NULL; - for (i = 0; i < RTLD_LOCK_CNT; i++) { - rtld_locks[i].mask = (1 << i); - rtld_locks[i].handle = NULL; - } + for (i = 0; i < RTLD_LOCK_CNT; i++) { + rtld_locks[i].mask = (1 << i); + rtld_locks[i].handle = NULL; + } - memcpy(&lockinfo, &deflockinfo, sizeof(lockinfo)); - _rtld_thread_init(NULL); - /* - * Construct a mask to block all signals except traps which might - * conceivably be generated within the dynamic linker itself. - */ - sigfillset(&fullsigmask); - sigdelset(&fullsigmask, SIGILL); - sigdelset(&fullsigmask, SIGTRAP); - sigdelset(&fullsigmask, SIGABRT); - sigdelset(&fullsigmask, SIGEMT); - sigdelset(&fullsigmask, SIGFPE); - sigdelset(&fullsigmask, SIGBUS); - sigdelset(&fullsigmask, SIGSEGV); - sigdelset(&fullsigmask, SIGSYS); + memcpy(&lockinfo, &deflockinfo, sizeof(lockinfo)); + _rtld_thread_init(NULL); + if (ld_fast_sigblock) { + __sys_sigfastblock(SIGFASTBLOCK_SETPTR, &fsigblock); + } else { + /* + * Construct a mask to block all signals. Note that + * blocked traps mean that the process is terminated + * if trap occurs while we are in locked section, with + * the default settings for kern.forcesigexit. + */ + sigfillset(&fullsigmask); + } } /* @@ -331,7 +352,10 @@ _rtld_thread_init(struct RtldLockInfo *pli) if (pli == NULL) pli = &deflockinfo; - + else if (ld_fast_sigblock) { + fsigblock = 0; + __sys_sigfastblock(SIGFASTBLOCK_UNSETPTR, NULL); + } for (i = 0; i < RTLD_LOCK_CNT; i++) if ((locks[i] = pli->lock_create()) == NULL) From fc908e500165fec250bea86310e7ae0eedc23af8 Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Sun, 9 Feb 2020 12:27:22 +0000 Subject: [PATCH 028/144] Use sigfastblock(2) for masking signals in libthr. Ensure proper handshake to transfer sigfastblock(2) blocking word ownership from rtld to libthr. Unfortunately sigfastblock(2) is not enough to stop intercepting signals in libthr, because critical sections must ensure more than just signal blocking. Tested by: pho Disscussed with: cem, emaste, jilles Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D12773 --- lib/libthr/thread/thr_create.c | 1 + lib/libthr/thread/thr_private.h | 5 +++ lib/libthr/thread/thr_rtld.c | 2 + lib/libthr/thread/thr_sig.c | 67 ++++++++++++++++++++++++++++++--- 4 files changed, 69 insertions(+), 6 deletions(-) diff --git a/lib/libthr/thread/thr_create.c b/lib/libthr/thread/thr_create.c index dbd01f2e460..b99e5825f5f 100644 --- a/lib/libthr/thread/thr_create.c +++ b/lib/libthr/thread/thr_create.c @@ -257,6 +257,7 @@ thread_start(struct pthread *curthread) if (curthread->attr.suspend == THR_CREATE_SUSPENDED) set = curthread->sigmask; + _thr_signal_block_setup(curthread); /* * This is used as a serialization point to allow parent diff --git a/lib/libthr/thread/thr_private.h b/lib/libthr/thread/thr_private.h index ed09cd2bf50..33cb03fce99 100644 --- a/lib/libthr/thread/thr_private.h +++ b/lib/libthr/thread/thr_private.h @@ -396,6 +396,9 @@ struct pthread { /* Signal blocked counter. */ int sigblock; + /* Fast sigblock var. */ + uint32_t fsigblock; + /* Queue entry for list of all threads. */ TAILQ_ENTRY(pthread) tle; /* link for all threads in process */ @@ -813,6 +816,8 @@ void _thr_cancel_leave(struct pthread *, int) __hidden; void _thr_testcancel(struct pthread *) __hidden; void _thr_signal_block(struct pthread *) __hidden; void _thr_signal_unblock(struct pthread *) __hidden; +void _thr_signal_block_check_fast(void) __hidden; +void _thr_signal_block_setup(struct pthread *) __hidden; void _thr_signal_init(int) __hidden; void _thr_signal_deinit(void) __hidden; int _thr_send_sig(struct pthread *, int sig) __hidden; diff --git a/lib/libthr/thread/thr_rtld.c b/lib/libthr/thread/thr_rtld.c index 3239a9dcfb1..291ca17e206 100644 --- a/lib/libthr/thread/thr_rtld.c +++ b/lib/libthr/thread/thr_rtld.c @@ -236,6 +236,8 @@ _thr_rtld_init(void) _thr_signal_block(curthread); _rtld_thread_init(&li); _thr_signal_unblock(curthread); + _thr_signal_block_check_fast(); + _thr_signal_block_setup(curthread); uc_len = __getcontextx_size(); uc = alloca(uc_len); diff --git a/lib/libthr/thread/thr_sig.c b/lib/libthr/thread/thr_sig.c index 52494f79ab9..20f62dad99c 100644 --- a/lib/libthr/thread/thr_sig.c +++ b/lib/libthr/thread/thr_sig.c @@ -31,7 +31,8 @@ __FBSDID("$FreeBSD$"); #include "namespace.h" #include -#include +#include +#include #include #include #include @@ -92,10 +93,9 @@ static const sigset_t _thr_maskset={{ 0xffffffff, 0xffffffff}}; -void -_thr_signal_block(struct pthread *curthread) +static void +thr_signal_block_slow(struct pthread *curthread) { - if (curthread->sigblock > 0) { curthread->sigblock++; return; @@ -104,13 +104,68 @@ _thr_signal_block(struct pthread *curthread) curthread->sigblock++; } -void -_thr_signal_unblock(struct pthread *curthread) +static void +thr_signal_unblock_slow(struct pthread *curthread) { if (--curthread->sigblock == 0) __sys_sigprocmask(SIG_SETMASK, &curthread->sigmask, NULL); } +static void +thr_signal_block_fast(struct pthread *curthread) +{ + atomic_add_32(&curthread->fsigblock, SIGFASTBLOCK_INC); +} + +static void +thr_signal_unblock_fast(struct pthread *curthread) +{ + uint32_t oldval; + + oldval = atomic_fetchadd_32(&curthread->fsigblock, -SIGFASTBLOCK_INC); + if (oldval == (SIGFASTBLOCK_PEND | SIGFASTBLOCK_INC)) + __sys_sigfastblock(SIGFASTBLOCK_UNBLOCK, NULL); +} + +static bool fast_sigblock; + +void +_thr_signal_block(struct pthread *curthread) +{ + if (fast_sigblock) + thr_signal_block_fast(curthread); + else + thr_signal_block_slow(curthread); +} + +void +_thr_signal_unblock(struct pthread *curthread) +{ + if (fast_sigblock) + thr_signal_unblock_fast(curthread); + else + thr_signal_unblock_slow(curthread); +} + +void +_thr_signal_block_check_fast(void) +{ + int bsdflags, error; + + error = elf_aux_info(AT_BSDFLAGS, &bsdflags, sizeof(bsdflags)); + if (error != 0) + return; + fast_sigblock = (bsdflags & ELF_BSDF_SIGFASTBLK) != 0; +} + +void +_thr_signal_block_setup(struct pthread *curthread) +{ + if (!fast_sigblock) + return; + __sys_sigfastblock(SIGFASTBLOCK_SETPTR, &curthread->fsigblock); +} + int _thr_send_sig(struct pthread *thread, int sig) { From 48fcb463114eda4e5d6db9d709d5dbf53465852b Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Sun, 9 Feb 2020 12:29:51 +0000 Subject: [PATCH 029/144] Add sysctl kern.proc.sigfastblk for reporting sigfastblock word address. Tested by: pho Disscussed with: cem, emaste, jilles Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D12773 --- sys/kern/kern_proc.c | 75 ++++++++++++++++++++++++++++++++++++++++++++ sys/sys/sysctl.h | 1 + 2 files changed, 76 insertions(+) diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c index d7429526987..0ff776cf662 100644 --- a/sys/kern/kern_proc.c +++ b/sys/kern/kern_proc.c @@ -2962,6 +2962,77 @@ sysctl_kern_proc_sigtramp(SYSCTL_HANDLER_ARGS) return (error); } +static int +sysctl_kern_proc_sigfastblk(SYSCTL_HANDLER_ARGS) +{ + int *name = (int *)arg1; + u_int namelen = arg2; + pid_t pid; + struct proc *p; + struct thread *td1; + uintptr_t addr; +#ifdef COMPAT_FREEBSD32 + uint32_t addr32; +#endif + int error; + + if (namelen != 1 || req->newptr != NULL) + return (EINVAL); + + pid = (pid_t)name[0]; + error = pget(pid, PGET_HOLD | PGET_NOTWEXIT | PGET_CANDEBUG, &p); + if (error != 0) + return (error); + + PROC_LOCK(p); +#ifdef COMPAT_FREEBSD32 + if (SV_CURPROC_FLAG(SV_ILP32)) { + if (!SV_PROC_FLAG(p, SV_ILP32)) { + error = EINVAL; + goto errlocked; + } + } +#endif + if (pid <= PID_MAX) { + td1 = FIRST_THREAD_IN_PROC(p); + } else { + FOREACH_THREAD_IN_PROC(p, td1) { + if (td1->td_tid == pid) + break; + } + } + if (td1 == NULL) { + error = ESRCH; + goto errlocked; + } + /* + * The access to the private thread flags. It is fine as far + * as no out-of-thin-air values are read from td_pflags, and + * usermode read of the td_sigblock_ptr is racy inherently, + * since target process might have already changed it + * meantime. + */ + if ((td1->td_pflags & TDP_SIGFASTBLOCK) != 0) + addr = (uintptr_t)td1->td_sigblock_ptr; + else + error = ENOTTY; + +errlocked: + _PRELE(p); + PROC_UNLOCK(p); + if (error != 0) + return (error); + +#ifdef COMPAT_FREEBSD32 + if (SV_CURPROC_FLAG(SV_ILP32)) { + addr32 = addr; + error = SYSCTL_OUT(req, &addr32, sizeof(addr32)); + } else +#endif + error = SYSCTL_OUT(req, &addr, sizeof(addr)); + return (error); +} + SYSCTL_NODE(_kern, KERN_PROC, proc, CTLFLAG_RD, 0, "Process table"); SYSCTL_PROC(_kern_proc, KERN_PROC_ALL, all, CTLFLAG_RD|CTLTYPE_STRUCT| @@ -3075,6 +3146,10 @@ static SYSCTL_NODE(_kern_proc, KERN_PROC_SIGTRAMP, sigtramp, CTLFLAG_RD | CTLFLAG_MPSAFE, sysctl_kern_proc_sigtramp, "Process signal trampoline location"); +static SYSCTL_NODE(_kern_proc, KERN_PROC_SIGFASTBLK, sigfastblk, CTLFLAG_RD | + CTLFLAG_ANYBODY | CTLFLAG_MPSAFE, sysctl_kern_proc_sigfastblk, + "Thread sigfastblock address"); + int allproc_gen; /* diff --git a/sys/sys/sysctl.h b/sys/sys/sysctl.h index c12befc187b..3bc2a01313b 100644 --- a/sys/sys/sysctl.h +++ b/sys/sys/sysctl.h @@ -1017,6 +1017,7 @@ TAILQ_HEAD(sysctl_ctx_list, sysctl_ctx_entry); #define KERN_PROC_SIGTRAMP 41 /* signal trampoline location */ #define KERN_PROC_CWD 42 /* process current working directory */ #define KERN_PROC_NFDS 43 /* number of open file descriptors */ +#define KERN_PROC_SIGFASTBLK 44 /* address of fastsigblk magic word */ /* * KERN_IPC identifiers From 24d57fa83e114d537fe6b3906898c4e95a976530 Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Sun, 9 Feb 2020 12:30:50 +0000 Subject: [PATCH 030/144] Add procstat(1) sigfastblock command to show process sigfastblock word address. Tested by: pho Disscussed with: cem, emaste, jilles Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D12773 --- usr.bin/procstat/procstat.c | 2 + usr.bin/procstat/procstat.h | 2 + usr.bin/procstat/procstat_sigs.c | 63 ++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+) diff --git a/usr.bin/procstat/procstat.c b/usr.bin/procstat/procstat.c index 0269d3c5a5f..72456fa9815 100644 --- a/usr.bin/procstat/procstat.c +++ b/usr.bin/procstat/procstat.c @@ -94,6 +94,8 @@ static const struct procstat_cmd cmd_table[] = { PS_CMP_NORMAL }, { "rusage", "rusage", "[-Ht]", &procstat_rusage, &cmdopt_rusage, PS_CMP_NORMAL }, + { "sigfastblock", "sigfastblock", NULL, &procstat_sigfastblock, + &cmdopt_none, PS_CMP_NORMAL }, { "signal", "signals", "[-n]", &procstat_sigs, &cmdopt_signals, PS_CMP_PLURAL | PS_CMP_SUBSTR }, { "thread", "threads", NULL, &procstat_threads, &cmdopt_none, diff --git a/usr.bin/procstat/procstat.h b/usr.bin/procstat/procstat.h index 4fef4e3f6c8..a839949b5a5 100644 --- a/usr.bin/procstat/procstat.h +++ b/usr.bin/procstat/procstat.h @@ -67,6 +67,8 @@ void procstat_kstack(struct procstat *prstat, struct kinfo_proc *kipp); void procstat_ptlwpinfo(struct procstat *prstat, struct kinfo_proc *kipp); void procstat_rlimit(struct procstat *prstat, struct kinfo_proc *kipp); void procstat_rusage(struct procstat *prstat, struct kinfo_proc *kipp); +void procstat_sigfastblock(struct procstat *procstat, + struct kinfo_proc *kipp); void procstat_sigs(struct procstat *prstat, struct kinfo_proc *kipp); void procstat_threads(struct procstat *prstat, struct kinfo_proc *kipp); void procstat_threads_sigs(struct procstat *prstat, struct kinfo_proc *kipp); diff --git a/usr.bin/procstat/procstat_sigs.c b/usr.bin/procstat/procstat_sigs.c index 8e5c3cf9d64..2a763b02362 100644 --- a/usr.bin/procstat/procstat_sigs.c +++ b/usr.bin/procstat/procstat_sigs.c @@ -37,6 +37,8 @@ #include #include #include +#include +#include #include #include #include @@ -163,6 +165,7 @@ procstat_threads_sigs(struct procstat *procstat, struct kinfo_proc *kipp) xo_open_container(threadid); xo_emit("{e:thread_id/%6d/%d}", kipp->ki_tid); xo_open_container("signals"); + for (j = 1; j <= _SIG_MAXSIG; j++) { xo_emit("{dk:process_id/%5d/%d} ", kipp->ki_pid); xo_emit("{d:thread_id/%6d/%d} ", kipp->ki_tid); @@ -181,3 +184,63 @@ procstat_threads_sigs(struct procstat *procstat, struct kinfo_proc *kipp) xo_close_container("threads"); procstat_freeprocs(procstat, kip); } + +void +procstat_sigfastblock(struct procstat *procstat, struct kinfo_proc *kipp) +{ + struct kinfo_proc *kip; + char *threadid; + uintptr_t sigfastblk_addr; + int error, name[4]; + unsigned int count, i; + size_t len; + bool has_sigfastblk_addr; + + if ((procstat_opts & PS_OPT_NOHEADER) == 0) + xo_emit("{T:/%5s %6s %-16s %-16s}\n", "PID", "TID", + "COMM", "SIGFBLK"); + + kip = procstat_getprocs(procstat, KERN_PROC_PID | KERN_PROC_INC_THREAD, + kipp->ki_pid, &count); + if (kip == NULL) + return; + xo_emit("{ek:process_id/%5d/%d}", kipp->ki_pid); + xo_emit("{e:command/%-16s/%s}", kipp->ki_comm); + xo_open_container("threads"); + kinfo_proc_sort(kip, count); + for (i = 0; i < count; i++) { + kipp = &kip[i]; + len = sizeof(sigfastblk_addr); + name[0] = CTL_KERN; + name[1] = KERN_PROC; + name[2] = KERN_PROC_SIGFASTBLK; + name[3] = kipp->ki_tid; + error = sysctl(name, 4, &sigfastblk_addr, &len, NULL, 0); + if (error < 0) { + if (errno != ESRCH && errno != ENOTTY) { + warn("sysctl: kern.proc.fastsigblk: %d", + kipp->ki_tid); + } + has_sigfastblk_addr = false; + } else + has_sigfastblk_addr = true; + + asprintf(&threadid, "%d", kipp->ki_tid); + if (threadid == NULL) + xo_errc(1, ENOMEM, "Failed to allocate memory in " + "procstat_sigfastblock()"); + xo_open_container(threadid); + xo_emit("{dk:process_id/%5d/%d} ", kipp->ki_pid); + xo_emit("{d:thread_id/%6d/%d} ", kipp->ki_tid); + xo_emit("{d:command/%-16s/%s} ", kipp->ki_comm); + xo_emit("{e:sigfastblock/%#-16jx/%#jx}", has_sigfastblk_addr ? + (uintmax_t)sigfastblk_addr : (uintmax_t)-1); + xo_emit("{d:sigfastblock/%#-16jx/%#jx}", has_sigfastblk_addr ? + (uintmax_t)sigfastblk_addr : (uintmax_t)-1); + xo_emit("\n"); + xo_close_container(threadid); + free(threadid); + } + xo_close_container("threads"); + procstat_freeprocs(procstat, kip); +} From 676ff51e8ad7c84a4334ff40b4e1ae3ab86515db Mon Sep 17 00:00:00 2001 From: Mateusz Piotrowski <0mp@FreeBSD.org> Date: Sun, 9 Feb 2020 15:13:56 +0000 Subject: [PATCH 031/144] Add a missing word in rc.conf.5 PR: 243972 Submitted by: PauAmma Approved by: bcr (mentor) Differential Revision: https://reviews.freebsd.org/D23584 --- share/man/man5/rc.conf.5 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/share/man/man5/rc.conf.5 b/share/man/man5/rc.conf.5 index b3807319182..60e43cd32c3 100644 --- a/share/man/man5/rc.conf.5 +++ b/share/man/man5/rc.conf.5 @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd September 9, 2019 +.Dd February 9, 2020 .Dt RC.CONF 5 .Os .Sh NAME @@ -425,7 +425,7 @@ is used to set the hostname via DHCP, this variable should be set to an empty string. Within a .Xr jail 8 -the hostname is generally already set and this variable may absent. +the hostname is generally already set and this variable may be absent. If this value remains unset when the system is done booting your console login will display the default hostname of .Dq Amnesiac . From 6794d1955a3c75443501fe11e8f085acbb0c1024 Mon Sep 17 00:00:00 2001 From: Kyle Evans Date: Sun, 9 Feb 2020 18:53:53 +0000 Subject: [PATCH 032/144] mips: mark GOOGLETEST broken, due to no fault of its own As explained in the comment; GOOGLETEST cannot currently be compiled on any mips variant at the moment due to the cross toolchain seemingly using the wrong spec and not pulling in libgcc. We'll be fine when llvm 10 lands, at which point this should be reverted most expeditiously. --- share/mk/src.opts.mk | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/share/mk/src.opts.mk b/share/mk/src.opts.mk index fc5a2a8ba4f..534a4c0fbaa 100644 --- a/share/mk/src.opts.mk +++ b/share/mk/src.opts.mk @@ -348,7 +348,12 @@ BROKEN_OPTIONS+=LIB32 BROKEN_OPTIONS+=LIBSOFT .endif .if ${__T:Mmips*} -BROKEN_OPTIONS+=SSP +# GOOGLETEST cannot currently be compiled on mips due to external circumstances. +# Notably, the freebsd-gcc port isn't linking in libgcc so we end up trying ot +# link to a hidden symbol. LLVM would successfully link this in, but some of +# the mips variants are broken under LLVM until LLVM 10. GOOGLETEST should be +# marked no longer broken with the switch to LLVM. +BROKEN_OPTIONS+=GOOGLETEST SSP .endif # EFI doesn't exist on mips, powerpc, sparc or riscv. .if ${__T:Mmips*} || ${__T:Mpowerpc*} || ${__T:Msparc64} || ${__T:Mriscv*} From 5555400aa5cbfeac6450241431672f9e2f172286 Mon Sep 17 00:00:00 2001 From: Michael Tuexen Date: Sun, 9 Feb 2020 22:05:41 +0000 Subject: [PATCH 033/144] Cleanup timer handling. Submitted by: Taylor Brandstetter MFC after: 1 week --- sys/netinet/sctp_indata.c | 3 +- sys/netinet/sctp_output.c | 9 +++--- sys/netinet/sctp_pcb.c | 49 +++-------------------------- sys/netinet/sctputil.c | 66 +++++++++++++++++++++++++++++++++------ sys/netinet/sctputil.h | 3 ++ 5 files changed, 72 insertions(+), 58 deletions(-) diff --git a/sys/netinet/sctp_indata.c b/sys/netinet/sctp_indata.c index 9229c8037ed..c250cef54e2 100644 --- a/sys/netinet/sctp_indata.c +++ b/sys/netinet/sctp_indata.c @@ -2663,7 +2663,8 @@ sctp_sack_check(struct sctp_tcb *stcb, int was_a_gap) * is pending, we got our first packet OR * there are gaps or duplicates. */ - (void)SCTP_OS_TIMER_STOP(&stcb->asoc.dack_timer.timer); + sctp_timer_stop(SCTP_TIMER_TYPE_RECV, stcb->sctp_ep, stcb, NULL, + SCTP_FROM_SCTP_INDATA + SCTP_LOC_19); sctp_send_sack(stcb, SCTP_SO_NOT_LOCKED); } } else { diff --git a/sys/netinet/sctp_output.c b/sys/netinet/sctp_output.c index 655390677e6..424f9803237 100644 --- a/sys/netinet/sctp_output.c +++ b/sys/netinet/sctp_output.c @@ -10074,7 +10074,8 @@ do_it_again: */ if (SCTP_OS_TIMER_PENDING(&stcb->asoc.dack_timer.timer)) { sctp_send_sack(stcb, so_locked); - (void)SCTP_OS_TIMER_STOP(&stcb->asoc.dack_timer.timer); + sctp_timer_stop(SCTP_TIMER_TYPE_RECV, stcb->sctp_ep, stcb, NULL, + SCTP_FROM_SCTP_OUTPUT + SCTP_LOC_3); } while (asoc->sent_queue_retran_cnt) { /*- @@ -10603,7 +10604,7 @@ sctp_send_sack(struct sctp_tcb *stcb, int so_locked if (stcb->asoc.delayed_ack) { sctp_timer_stop(SCTP_TIMER_TYPE_RECV, stcb->sctp_ep, stcb, NULL, - SCTP_FROM_SCTP_OUTPUT + SCTP_LOC_3); + SCTP_FROM_SCTP_OUTPUT + SCTP_LOC_4); sctp_timer_start(SCTP_TIMER_TYPE_RECV, stcb->sctp_ep, stcb, NULL); } else { @@ -10672,7 +10673,7 @@ sctp_send_sack(struct sctp_tcb *stcb, int so_locked if (stcb->asoc.delayed_ack) { sctp_timer_stop(SCTP_TIMER_TYPE_RECV, stcb->sctp_ep, stcb, NULL, - SCTP_FROM_SCTP_OUTPUT + SCTP_LOC_4); + SCTP_FROM_SCTP_OUTPUT + SCTP_LOC_5); sctp_timer_start(SCTP_TIMER_TYPE_RECV, stcb->sctp_ep, stcb, NULL); } else { @@ -12834,7 +12835,7 @@ sctp_lower_sosend(struct socket *so, if (control) { if (sctp_process_cmsgs_for_init(stcb, control, &error)) { sctp_free_assoc(inp, stcb, SCTP_PCBFREE_FORCE, - SCTP_FROM_SCTP_OUTPUT + SCTP_LOC_5); + SCTP_FROM_SCTP_OUTPUT + SCTP_LOC_6); hold_tcblock = 0; stcb = NULL; goto out_unlocked; diff --git a/sys/netinet/sctp_pcb.c b/sys/netinet/sctp_pcb.c index d07b89933de..d61c102ee80 100644 --- a/sys/netinet/sctp_pcb.c +++ b/sys/netinet/sctp_pcb.c @@ -3547,7 +3547,6 @@ sctp_inpcb_free(struct sctp_inpcb *inp, int immediate, int from) } if (cnt) { /* Ok we have someone out there that will kill us */ - (void)SCTP_OS_TIMER_STOP(&inp->sctp_ep.signature_change.timer); #ifdef SCTP_LOG_CLOSING sctp_log_closing(inp, NULL, 3); #endif @@ -3566,7 +3565,6 @@ sctp_inpcb_free(struct sctp_inpcb *inp, int immediate, int from) if ((inp->refcount) || (being_refed) || (inp->sctp_flags & SCTP_PCB_FLAGS_CLOSE_IP)) { - (void)SCTP_OS_TIMER_STOP(&inp->sctp_ep.signature_change.timer); #ifdef SCTP_LOG_CLOSING sctp_log_closing(inp, NULL, 4); #endif @@ -4761,35 +4759,8 @@ sctp_free_assoc(struct sctp_inpcb *inp, struct sctp_tcb *stcb, int from_inpcbfre return (0); } } - /* now clean up any other timers */ - (void)SCTP_OS_TIMER_STOP(&asoc->dack_timer.timer); - asoc->dack_timer.self = NULL; - (void)SCTP_OS_TIMER_STOP(&asoc->strreset_timer.timer); - /*- - * For stream reset we don't blast this unless - * it is a str-reset timer, it might be the - * free-asoc timer which we DON'T want to - * disturb. - */ - if (asoc->strreset_timer.type == SCTP_TIMER_TYPE_STRRESET) - asoc->strreset_timer.self = NULL; - (void)SCTP_OS_TIMER_STOP(&asoc->asconf_timer.timer); - asoc->asconf_timer.self = NULL; - (void)SCTP_OS_TIMER_STOP(&asoc->autoclose_timer.timer); - asoc->autoclose_timer.self = NULL; - (void)SCTP_OS_TIMER_STOP(&asoc->shut_guard_timer.timer); - asoc->shut_guard_timer.self = NULL; - /* Mobility adaptation */ - (void)SCTP_OS_TIMER_STOP(&asoc->delete_prim_timer.timer); - asoc->delete_prim_timer.self = NULL; - TAILQ_FOREACH(net, &asoc->nets, sctp_next) { - (void)SCTP_OS_TIMER_STOP(&net->rxt_timer.timer); - net->rxt_timer.self = NULL; - (void)SCTP_OS_TIMER_STOP(&net->pmtu_timer.timer); - net->pmtu_timer.self = NULL; - (void)SCTP_OS_TIMER_STOP(&net->hb_timer.timer); - net->hb_timer.self = NULL; - } + /* Now clean up any other timers */ + sctp_stop_association_timers(stcb, false); /* Now the read queue needs to be cleaned up (only once) */ if ((stcb->asoc.state & SCTP_STATE_ABOUT_TO_BE_FREED) == 0) { SCTP_ADD_SUBSTATE(stcb, SCTP_STATE_ABOUT_TO_BE_FREED); @@ -4957,19 +4928,8 @@ sctp_free_assoc(struct sctp_inpcb *inp, struct sctp_tcb *stcb, int from_inpcbfre /* * Now restop the timers to be sure this is paranoia at is finest! */ - (void)SCTP_OS_TIMER_STOP(&asoc->strreset_timer.timer); - (void)SCTP_OS_TIMER_STOP(&asoc->dack_timer.timer); - (void)SCTP_OS_TIMER_STOP(&asoc->strreset_timer.timer); - (void)SCTP_OS_TIMER_STOP(&asoc->asconf_timer.timer); - (void)SCTP_OS_TIMER_STOP(&asoc->shut_guard_timer.timer); - (void)SCTP_OS_TIMER_STOP(&asoc->autoclose_timer.timer); - TAILQ_FOREACH(net, &asoc->nets, sctp_next) { - (void)SCTP_OS_TIMER_STOP(&net->rxt_timer.timer); - (void)SCTP_OS_TIMER_STOP(&net->pmtu_timer.timer); - (void)SCTP_OS_TIMER_STOP(&net->hb_timer.timer); - } + sctp_stop_association_timers(stcb, true); - asoc->strreset_timer.type = SCTP_TIMER_TYPE_NONE; /* * The chunk lists and such SHOULD be empty but we check them just * in case. @@ -7033,7 +6993,8 @@ sctp_drain_mbufs(struct sctp_tcb *stcb) * asoc->highest_tsn_inside_map? */ asoc->last_revoke_count = cnt; - (void)SCTP_OS_TIMER_STOP(&stcb->asoc.dack_timer.timer); + sctp_timer_stop(SCTP_TIMER_TYPE_RECV, stcb->sctp_ep, stcb, NULL, + SCTP_FROM_SCTP_PCB + SCTP_LOC_16); /* sa_ignore NO_NULL_CHK */ sctp_send_sack(stcb, SCTP_SO_NOT_LOCKED); sctp_chunk_output(stcb->sctp_ep, stcb, SCTP_OUTPUT_FROM_DRAIN, SCTP_SO_NOT_LOCKED); diff --git a/sys/netinet/sctputil.c b/sys/netinet/sctputil.c index 2804a59dac6..cd4a3ca95b2 100644 --- a/sys/netinet/sctputil.c +++ b/sys/netinet/sctputil.c @@ -780,18 +780,66 @@ sctp_audit_log(uint8_t ev, uint8_t fd) void sctp_stop_timers_for_shutdown(struct sctp_tcb *stcb) { - struct sctp_association *asoc; + struct sctp_inpcb *inp; struct sctp_nets *net; - asoc = &stcb->asoc; + inp = stcb->sctp_ep; - (void)SCTP_OS_TIMER_STOP(&asoc->dack_timer.timer); - (void)SCTP_OS_TIMER_STOP(&asoc->strreset_timer.timer); - (void)SCTP_OS_TIMER_STOP(&asoc->asconf_timer.timer); - (void)SCTP_OS_TIMER_STOP(&asoc->autoclose_timer.timer); - TAILQ_FOREACH(net, &asoc->nets, sctp_next) { - (void)SCTP_OS_TIMER_STOP(&net->pmtu_timer.timer); - (void)SCTP_OS_TIMER_STOP(&net->hb_timer.timer); + sctp_timer_stop(SCTP_TIMER_TYPE_RECV, inp, stcb, NULL, + SCTP_FROM_SCTPUTIL + SCTP_LOC_12); + sctp_timer_stop(SCTP_TIMER_TYPE_STRRESET, inp, stcb, NULL, + SCTP_FROM_SCTPUTIL + SCTP_LOC_13); + sctp_timer_stop(SCTP_TIMER_TYPE_ASCONF, inp, stcb, NULL, + SCTP_FROM_SCTPUTIL + SCTP_LOC_14); + sctp_timer_stop(SCTP_TIMER_TYPE_AUTOCLOSE, inp, stcb, NULL, + SCTP_FROM_SCTPUTIL + SCTP_LOC_15); + TAILQ_FOREACH(net, &stcb->asoc.nets, sctp_next) { + sctp_timer_stop(SCTP_TIMER_TYPE_PATHMTURAISE, inp, stcb, net, + SCTP_FROM_SCTPUTIL + SCTP_LOC_16); + sctp_timer_stop(SCTP_TIMER_TYPE_HEARTBEAT, inp, stcb, net, + SCTP_FROM_SCTPUTIL + SCTP_LOC_17); + } +} + +void +sctp_stop_association_timers(struct sctp_tcb *stcb, bool stop_assoc_kill_timer) +{ + struct sctp_inpcb *inp; + struct sctp_nets *net; + + inp = stcb->sctp_ep; + sctp_timer_stop(SCTP_TIMER_TYPE_RECV, inp, stcb, NULL, + SCTP_FROM_SCTPUTIL + SCTP_LOC_18); + sctp_timer_stop(SCTP_TIMER_TYPE_STRRESET, inp, stcb, NULL, + SCTP_FROM_SCTPUTIL + SCTP_LOC_19); + if (stop_assoc_kill_timer) { + sctp_timer_stop(SCTP_TIMER_TYPE_ASOCKILL, inp, stcb, NULL, + SCTP_FROM_SCTPUTIL + SCTP_LOC_20); + } + sctp_timer_stop(SCTP_TIMER_TYPE_ASCONF, inp, stcb, NULL, + SCTP_FROM_SCTPUTIL + SCTP_LOC_21); + sctp_timer_stop(SCTP_TIMER_TYPE_AUTOCLOSE, inp, stcb, NULL, + SCTP_FROM_SCTPUTIL + SCTP_LOC_22); + sctp_timer_stop(SCTP_TIMER_TYPE_SHUTDOWNGUARD, inp, stcb, NULL, + SCTP_FROM_SCTPUTIL + SCTP_LOC_23); + /* Mobility adaptation */ + sctp_timer_stop(SCTP_TIMER_TYPE_PRIM_DELETED, inp, stcb, NULL, + SCTP_FROM_SCTPUTIL + SCTP_LOC_24); + TAILQ_FOREACH(net, &stcb->asoc.nets, sctp_next) { + sctp_timer_stop(SCTP_TIMER_TYPE_SEND, inp, stcb, net, + SCTP_FROM_SCTPUTIL + SCTP_LOC_25); + sctp_timer_stop(SCTP_TIMER_TYPE_INIT, inp, stcb, net, + SCTP_FROM_SCTPUTIL + SCTP_LOC_26); + sctp_timer_stop(SCTP_TIMER_TYPE_SHUTDOWN, inp, stcb, net, + SCTP_FROM_SCTPUTIL + SCTP_LOC_27); + sctp_timer_stop(SCTP_TIMER_TYPE_COOKIE, inp, stcb, net, + SCTP_FROM_SCTPUTIL + SCTP_LOC_28); + sctp_timer_stop(SCTP_TIMER_TYPE_SHUTDOWNACK, inp, stcb, net, + SCTP_FROM_SCTPUTIL + SCTP_LOC_29); + sctp_timer_stop(SCTP_TIMER_TYPE_PATHMTURAISE, inp, stcb, net, + SCTP_FROM_SCTPUTIL + SCTP_LOC_30); + sctp_timer_stop(SCTP_TIMER_TYPE_HEARTBEAT, inp, stcb, net, + SCTP_FROM_SCTPUTIL + SCTP_LOC_31); } } diff --git a/sys/netinet/sctputil.h b/sys/netinet/sctputil.h index c67c021fd30..031ad615a0f 100644 --- a/sys/netinet/sctputil.h +++ b/sys/netinet/sctputil.h @@ -164,6 +164,9 @@ sctp_pull_off_control_to_new_inp(struct sctp_inpcb *old_inp, void sctp_stop_timers_for_shutdown(struct sctp_tcb *); +/* Stop all timers for association and remote addresses. */ +void sctp_stop_association_timers(struct sctp_tcb *, bool); + void sctp_report_all_outbound(struct sctp_tcb *, uint16_t, int, int #if !defined(__APPLE__) && !defined(SCTP_SO_LOCK_TESTING) From 020419b6652e4570efac3108b5232e76f3ba2ba2 Mon Sep 17 00:00:00 2001 From: Kyle Evans Date: Sun, 9 Feb 2020 22:35:49 +0000 Subject: [PATCH 034/144] login.conf(5): update commented-out standard, too MAIL now has a mail capability, instead, as of r357560. --- usr.bin/login/login.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/usr.bin/login/login.conf b/usr.bin/login/login.conf index b8772e57a7e..e7b142250c3 100644 --- a/usr.bin/login/login.conf +++ b/usr.bin/login/login.conf @@ -129,7 +129,8 @@ russian|Russian Users Accounts:\ #standard:\ # :copyright=/etc/COPYRIGHT:\ # :welcome=/var/run/motd:\ -# :setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\ +# :setenv=BLOCKSIZE=K:\ +# :mail=/var/mail/$:\ # :path=~/bin /bin /usr/bin /usr/local/bin:\ # :manpath=/usr/share/man /usr/local/man:\ # :nologin=/var/run/nologin:\ From 6a34ec63aba8cc8e09ef4d1e27d9aa3a93cb1f7e Mon Sep 17 00:00:00 2001 From: Michael Tuexen Date: Sun, 9 Feb 2020 22:40:05 +0000 Subject: [PATCH 035/144] Stop the PMTU and HB timer when removing a net, not when freeing it. Submitted by: Taylor Brandstetter MFC after: 1 week --- sys/netinet/sctp_pcb.c | 8 +++++++- sys/netinet/sctp_var.h | 2 -- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/sys/netinet/sctp_pcb.c b/sys/netinet/sctp_pcb.c index d61c102ee80..a5ddb763a79 100644 --- a/sys/netinet/sctp_pcb.c +++ b/sys/netinet/sctp_pcb.c @@ -4425,8 +4425,10 @@ sctp_aloc_assoc(struct sctp_inpcb *inp, struct sockaddr *firstaddr, void sctp_remove_net(struct sctp_tcb *stcb, struct sctp_nets *net) { + struct sctp_inpcb *inp; struct sctp_association *asoc; + inp = stcb->sctp_ep; asoc = &stcb->asoc; asoc->numnets--; TAILQ_REMOVE(&asoc->nets, net, sctp_next); @@ -4474,6 +4476,10 @@ out: sctp_free_remote_addr(stcb->asoc.alternate); stcb->asoc.alternate = NULL; } + sctp_timer_stop(SCTP_TIMER_TYPE_PATHMTURAISE, inp, stcb, net, + SCTP_FROM_SCTP_PCB + SCTP_LOC_9); + sctp_timer_stop(SCTP_TIMER_TYPE_HEARTBEAT, inp, stcb, net, + SCTP_FROM_SCTP_PCB + SCTP_LOC_10); sctp_free_remote_addr(net); } @@ -6994,7 +7000,7 @@ sctp_drain_mbufs(struct sctp_tcb *stcb) */ asoc->last_revoke_count = cnt; sctp_timer_stop(SCTP_TIMER_TYPE_RECV, stcb->sctp_ep, stcb, NULL, - SCTP_FROM_SCTP_PCB + SCTP_LOC_16); + SCTP_FROM_SCTP_PCB + SCTP_LOC_11); /* sa_ignore NO_NULL_CHK */ sctp_send_sack(stcb, SCTP_SO_NOT_LOCKED); sctp_chunk_output(stcb->sctp_ep, stcb, SCTP_OUTPUT_FROM_DRAIN, SCTP_SO_NOT_LOCKED); diff --git a/sys/netinet/sctp_var.h b/sys/netinet/sctp_var.h index 175888c32a1..986702b5336 100644 --- a/sys/netinet/sctp_var.h +++ b/sys/netinet/sctp_var.h @@ -187,8 +187,6 @@ extern struct pr_usrreqs sctp_usrreqs; if ((__net)) { \ if (SCTP_DECREMENT_AND_CHECK_REFCOUNT(&(__net)->ref_count)) { \ (void)SCTP_OS_TIMER_STOP(&(__net)->rxt_timer.timer); \ - (void)SCTP_OS_TIMER_STOP(&(__net)->pmtu_timer.timer); \ - (void)SCTP_OS_TIMER_STOP(&(__net)->hb_timer.timer); \ if ((__net)->ro.ro_rt) { \ RTFREE((__net)->ro.ro_rt); \ (__net)->ro.ro_rt = NULL; \ From 39c614c6b7be72e45a73077e953196cc677e83cb Mon Sep 17 00:00:00 2001 From: Ian Lepore Date: Mon, 10 Feb 2020 00:05:04 +0000 Subject: [PATCH 036/144] Implement atomic_testandclear_{32,int,long} for 32-bit arm. Also, replace the existing implementation of atomic_testandset with the same new algorithm, which uses fewer instructions and fewer registers. --- sys/arm/include/atomic-v6.h | 80 ++++++++++++++++++++++++++++++------- 1 file changed, 66 insertions(+), 14 deletions(-) diff --git a/sys/arm/include/atomic-v6.h b/sys/arm/include/atomic-v6.h index 580163a26ef..27723736711 100644 --- a/sys/arm/include/atomic-v6.h +++ b/sys/arm/include/atomic-v6.h @@ -858,23 +858,75 @@ atomic_store_rel_long(volatile u_long *p, u_long v) } static __inline int -atomic_testandset_32(volatile uint32_t *p, u_int v) +atomic_testandclear_32(volatile uint32_t *ptr, u_int bit) { - uint32_t tmp, tmp2, res, mask; + int newv, oldv, result; - mask = 1u << (v & 0x1f); - tmp = tmp2 = 0; __asm __volatile( - "1: ldrex %0, [%4] \n" - " orr %1, %0, %3 \n" - " strex %2, %1, [%4] \n" - " cmp %2, #0 \n" - " it ne \n" - " bne 1b \n" - : "=&r" (res), "=&r" (tmp), "=&r" (tmp2) - : "r" (mask), "r" (p) - : "cc", "memory"); - return ((res & mask) != 0); + " mov ip, #1 \n" + " lsl ip, ip, %[bit] \n" + /* Done with %[bit] as input, reuse below as output. */ + "1: \n" + " ldrex %[oldv], [%[ptr]] \n" + " bic %[newv], %[oldv], ip \n" + " strex %[bit], %[newv], [%[ptr]] \n" + " teq %[bit], #0 \n" + " it ne \n" + " bne 1b \n" + " ands %[bit], %[oldv], ip \n" + " it ne \n" + " movne %[bit], #1 \n" + : [bit] "=&r" (result), + [oldv] "=&r" (oldv), + [newv] "=&r" (newv) + : [ptr] "r" (ptr), + "[bit]" (bit) + : "cc", "ip", "memory"); + + return (result); +} + +static __inline int +atomic_testandclear_int(volatile u_int *p, u_int v) +{ + + return (atomic_testandclear_32((volatile uint32_t *)p, v)); +} + +static __inline int +atomic_testandclear_long(volatile u_long *p, u_int v) +{ + + return (atomic_testandclear_32((volatile uint32_t *)p, v)); +} + +static __inline int +atomic_testandset_32(volatile uint32_t *ptr, u_int bit) +{ + int newv, oldv, result; + + __asm __volatile( + " mov ip, #1 \n" + " lsl ip, ip, %[bit] \n" + /* Done with %[bit] as input, reuse below as output. */ + "1: \n" + " ldrex %[oldv], [%[ptr]] \n" + " orr %[newv], %[oldv], ip \n" + " strex %[bit], %[newv], [%[ptr]] \n" + " teq %[bit], #0 \n" + " it ne \n" + " bne 1b \n" + " ands %[bit], %[oldv], ip \n" + " it ne \n" + " movne %[bit], #1 \n" + : [bit] "=&r" (result), + [oldv] "=&r" (oldv), + [newv] "=&r" (newv) + : [ptr] "r" (ptr), + "[bit]" (bit) + : "cc", "ip", "memory"); + + return (result); } static __inline int From 7d99bda79e32ac633b29cca06396677fd94d3559 Mon Sep 17 00:00:00 2001 From: Scott Long Date: Mon, 10 Feb 2020 00:23:20 +0000 Subject: [PATCH 037/144] Add rudamentary support for UFS to probe whether a block device supports the BIO_SPEEDUP command. Add complimentary support to the CAM periphs that support it. --- sys/cam/ata/ata_da.c | 5 +++++ sys/cam/nvme/nvme_da.c | 5 +++++ sys/cam/scsi/scsi_da.c | 4 ++++ sys/ufs/ffs/ffs_softdep.c | 3 +++ sys/ufs/ffs/ffs_vfsops.c | 9 ++++++++- 5 files changed, 25 insertions(+), 1 deletion(-) diff --git a/sys/cam/ata/ata_da.c b/sys/cam/ata/ata_da.c index fd8bb6e427f..4e906c5e571 100644 --- a/sys/cam/ata/ata_da.c +++ b/sys/cam/ata/ata_da.c @@ -50,6 +50,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #endif /* _KERNEL */ @@ -1566,6 +1567,10 @@ adagetattr(struct bio *bp) int ret; struct cam_periph *periph; + /* TODO: tunable knob */ + if (g_handleattr_int(bp, "GEOM::canspeedup", 1)) + return (0); + periph = (struct cam_periph *)bp->bio_disk->d_drv1; cam_periph_lock(periph); ret = xpt_getattr(bp->bio_data, bp->bio_length, bp->bio_attribute, diff --git a/sys/cam/nvme/nvme_da.c b/sys/cam/nvme/nvme_da.c index 1af30620663..4560df5c4c7 100644 --- a/sys/cam/nvme/nvme_da.c +++ b/sys/cam/nvme/nvme_da.c @@ -48,6 +48,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #endif /* _KERNEL */ @@ -700,6 +701,10 @@ ndagetattr(struct bio *bp) int ret; struct cam_periph *periph; + /* TODO: tunable knob */ + if (g_handleattr_int(bp, "GEOM::canspeedup", 1)) + return (0); + periph = (struct cam_periph *)bp->bio_disk->d_drv1; cam_periph_lock(periph); ret = xpt_getattr(bp->bio_data, bp->bio_length, bp->bio_attribute, diff --git a/sys/cam/scsi/scsi_da.c b/sys/cam/scsi/scsi_da.c index cadc438b60e..750aee2cf9c 100644 --- a/sys/cam/scsi/scsi_da.c +++ b/sys/cam/scsi/scsi_da.c @@ -1942,6 +1942,10 @@ dagetattr(struct bio *bp) int ret; struct cam_periph *periph; + /* TODO: tunable knob for this */ + if (g_handleattr_int(bp, "GEOM::canspeedup", 1)) + return (0); + periph = (struct cam_periph *)bp->bio_disk->d_drv1; cam_periph_lock(periph); ret = xpt_getattr(bp->bio_data, bp->bio_length, bp->bio_attribute, diff --git a/sys/ufs/ffs/ffs_softdep.c b/sys/ufs/ffs/ffs_softdep.c index 8b88bf12c2a..4e6ed2fe8d6 100644 --- a/sys/ufs/ffs/ffs_softdep.c +++ b/sys/ufs/ffs/ffs_softdep.c @@ -1464,6 +1464,9 @@ softdep_send_speedup(struct ufsmount *ump, size_t shortage, u_int flags) { struct buf *bp; + if ((ump->um_flags & UM_CANSPEEDUP) == 0) + return; + bp = malloc(sizeof(*bp), M_TRIM, M_WAITOK | M_ZERO); bp->b_iocmd = BIO_SPEEDUP; bp->b_ioflags = flags; diff --git a/sys/ufs/ffs/ffs_vfsops.c b/sys/ufs/ffs/ffs_vfsops.c index d4c730fe20f..d276b30e247 100644 --- a/sys/ufs/ffs/ffs_vfsops.c +++ b/sys/ufs/ffs/ffs_vfsops.c @@ -794,7 +794,7 @@ ffs_mountfs(devvp, mp, td) struct ucred *cred; struct g_consumer *cp; struct mount *nmp; - int candelete; + int candelete, canspeedup; off_t loc; fs = NULL; @@ -1011,6 +1011,13 @@ ffs_mountfs(devvp, mp, td) } } + /* TODO: sysctl tunables, runtime modification */ + len = sizeof(int); + if (g_io_getattr("GEOM::canspeedup", cp, &len, &canspeedup) == 0) { + if (canspeedup) + ump->um_flags |= UM_CANSPEEDUP; + } + ump->um_mountp = mp; ump->um_dev = dev; ump->um_devvp = devvp; From 9ce150463c33f422448febf56647a4370c7644c7 Mon Sep 17 00:00:00 2001 From: Scott Long Date: Mon, 10 Feb 2020 00:26:41 +0000 Subject: [PATCH 038/144] Missed a file in r357710, add it here. --- sys/ufs/ufs/ufsmount.h | 1 + 1 file changed, 1 insertion(+) diff --git a/sys/ufs/ufs/ufsmount.h b/sys/ufs/ufs/ufsmount.h index fd2d153ec75..493571442d6 100644 --- a/sys/ufs/ufs/ufsmount.h +++ b/sys/ufs/ufs/ufsmount.h @@ -131,6 +131,7 @@ struct ufsmount { */ #define UM_CANDELETE 0x00000001 /* devvp supports TRIM */ #define UM_WRITESUSPENDED 0x00000002 /* suspension in progress */ +#define UM_CANSPEEDUP 0x00000004 /* devvp supports SPEEDUP */ /* * function prototypes From f210d1e9efd4183d390c24c9ea576896222d4540 Mon Sep 17 00:00:00 2001 From: Xin LI Date: Mon, 10 Feb 2020 01:33:52 +0000 Subject: [PATCH 039/144] Vendor import of file 5.38 --- ChangeLog | 20 + Makefile.in | 26 +- README | 7 +- aclocal.m4 | 263 +- compile | 13 +- config.guess | 670 ++-- config.h.in | 24 +- config.sub | 2787 ++++++++-------- configure | 2593 +++++++++------ configure.ac | 41 +- depcomp | 10 +- doc/Makefile.in | 14 +- doc/file.man | 11 +- doc/libmagic.man | 8 +- doc/magic.man | 6 +- ltmain.sh | 5609 +++++++++++++++++++++------------ m4/libtool.m4 | 2561 ++++++++------- m4/ltoptions.m4 | 127 +- m4/ltsugar.m4 | 7 +- m4/ltversion.m4 | 12 +- m4/lt~obsolete.m4 | 7 +- magic/Magdir/android | 16 +- magic/Magdir/animation | 89 +- magic/Magdir/apple | 60 +- magic/Magdir/archive | 60 +- magic/Magdir/audio | 49 +- magic/Magdir/bsi | 2 +- magic/Magdir/c-lang | 4 +- magic/Magdir/cad | 187 +- magic/Magdir/commands | 5 +- magic/Magdir/compress | 20 +- magic/Magdir/console | 95 +- magic/Magdir/database | 37 +- magic/Magdir/elf | 9 +- magic/Magdir/espressif | 4 +- magic/Magdir/filesystems | 60 +- magic/Magdir/fonts | 56 +- magic/Magdir/forth | 80 + magic/Magdir/frame | 24 +- magic/Magdir/games | 6 +- magic/Magdir/gimp | 32 +- magic/Magdir/git | 13 + magic/Magdir/icc | 4 +- magic/Magdir/images | 290 +- magic/Magdir/javascript | 7 +- magic/Magdir/kml | 6 +- magic/Magdir/linux | 7 +- magic/Magdir/macintosh | 39 +- magic/Magdir/mail.news | 13 +- magic/Magdir/map | 79 +- magic/Magdir/modulefile | 9 + magic/Magdir/msdos | 282 +- magic/Magdir/msooxml | 4 +- magic/Magdir/ole2compounddocs | 484 ++- magic/Magdir/openfst | 17 + magic/Magdir/opentimestamps | 16 + magic/Magdir/pdf | 8 +- magic/Magdir/pmem | 46 + magic/Magdir/python | 25 +- magic/Magdir/rpi | 16 +- magic/Magdir/rst | 11 + magic/Magdir/ruby | 6 +- magic/Magdir/sgml | 6 +- magic/Magdir/sniffer | 8 +- magic/Magdir/sosi | 40 + magic/Magdir/ssh | 6 + magic/Magdir/uuencode | 7 +- magic/Magdir/varied.script | 10 +- magic/Magdir/vax | 19 +- magic/Magdir/windows | 122 +- magic/Magdir/wordprocessors | 50 +- magic/Magdir/zip | 4 +- magic/Makefile.am | 10 +- magic/Makefile.in | 24 +- missing | 16 +- python/Makefile.in | 14 +- src/Makefile.am | 4 +- src/Makefile.in | 279 +- src/apprentice.c | 14 +- src/ascmagic.c | 3 +- src/buffer.c | 3 +- src/compress.c | 196 +- src/encoding.c | 3 +- src/file.c | 18 +- src/file.h | 3 +- src/file_opts.h | 7 +- src/fsmagic.c | 8 +- src/funcs.c | 23 +- src/is_csv.c | 197 ++ src/magic.h.in | 2 + src/readcdf.c | 11 +- src/readelf.c | 14 +- src/seccomp.c | 24 +- src/vasprintf.c | 4 +- tests/JW07022A.mp3.result | 2 +- tests/Makefile.in | 55 +- tests/test.c | 4 +- 97 files changed, 11502 insertions(+), 6801 deletions(-) create mode 100644 magic/Magdir/forth create mode 100644 magic/Magdir/git create mode 100644 magic/Magdir/modulefile create mode 100644 magic/Magdir/openfst create mode 100644 magic/Magdir/opentimestamps create mode 100644 magic/Magdir/pmem create mode 100644 magic/Magdir/rst create mode 100644 magic/Magdir/sosi create mode 100644 src/is_csv.c diff --git a/ChangeLog b/ChangeLog index 482a5f7c2de..661a144e056 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,23 @@ +2019-12-16 21:11 Christos Zoulas + + * release 5.38 + +2019-12-15 22:13 Christos Zoulas + Document changes since the previous release: + - Always accept -S (no sandbox) even if we don't support sandboxing + - More syscalls elided for sandboxiing + - For ELF dynamic means having an interpreter not just PT_DYNAMIC + - Check for large ELF session header offset + - When saving and restoring a locale, keep the locale name in our + own storage. + - Add a flag to disable CSV file detection. + - Don't pass NULL/0 to memset to appease sanitizers. + - Avoid spurious prints when looks for extensions or apple strings + in fsmagic. + - Add builtin decompressors for xz and and bzip. + - Add a limit for the number of CDF elements. + - More checks for overflow in CDF. + 2019-05-14 22:26 Christos Zoulas * release 5.37 diff --git a/Makefile.in b/Makefile.in index cb2dfc3a34d..661381ef689 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -136,7 +136,7 @@ am__recursive_targets = \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ - cscope distdir dist dist-all distcheck + cscope distdir distdir-am dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, @@ -161,7 +161,7 @@ CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in AUTHORS \ COPYING ChangeLog INSTALL NEWS README TODO compile \ - config.guess config.sub depcomp install-sh ltmain.sh missing + config.guess config.sub install-sh ltmain.sh missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) @@ -246,6 +246,7 @@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MINGW = @MINGW@ @@ -352,8 +353,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -495,7 +496,10 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ @@ -560,7 +564,7 @@ distdir: $(DISTFILES) ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir @@ -586,7 +590,7 @@ dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir @@ -604,7 +608,7 @@ dist dist-all: distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ @@ -614,7 +618,7 @@ distcheck: dist *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac diff --git a/README b/README index bb29a4640b7..f69dc43e0fb 100644 --- a/README +++ b/README @@ -1,6 +1,6 @@ ## README for file(1) Command and the libmagic(3) library ## - @(#) $File: README,v 1.57 2019/02/06 00:20:56 christos Exp $ + @(#) $File: README,v 1.59 2019/09/19 01:04:01 christos Exp $ Mailing List: file@astron.com Mailing List archives: http://mailman.astron.com/pipermail/file/ @@ -24,6 +24,10 @@ A public read-only git repository of the same sources is available at: https://github.com/file/file +We are continuously being fuzzed by OSS-FUZZ: + + https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:file + The major changes for 5.x are CDF file parsing, indirect magic, name/use (recursion) and overhaul in mime and ascii encoding handling. @@ -91,6 +95,7 @@ src/funcs.c - utilility functions src/getline.c - replacement for OS's that don't have it. src/getopt_long.c - replacement for OS's that don't have it. src/gmtime_r.c - replacement for OS's that don't have it. +src/is_csv.c - knows about Comma Separated Value file format (RFC 4180). src/is_json.c - knows about JavaScript Object Notation format (RFC 8259). src/is_tar.c, tar.h - knows about Tape ARchive format (courtesy John Gilmore). src/localtime_r.c - replacement for OS's that don't have it. diff --git a/aclocal.m4 b/aclocal.m4 index 158e1494b33..08b67b8e777 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.15 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,8 +20,8 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# visibility.m4 serial 5 (gettext-0.18.2) -dnl Copyright (C) 2005, 2008, 2010-2016 Free Software Foundation, Inc. +# visibility.m4 serial 6 +dnl Copyright (C) 2005, 2008, 2010-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -51,42 +51,42 @@ AC_DEFUN([gl_VISIBILITY], dnl First, check whether -Werror can be added to the command line, or dnl whether it leads to an error because of some other option that the dnl user has put into $CC $CFLAGS $CPPFLAGS. - AC_MSG_CHECKING([whether the -Werror option is usable]) - AC_CACHE_VAL([gl_cv_cc_vis_werror], [ - gl_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -Werror" - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[]], [[]])], - [gl_cv_cc_vis_werror=yes], - [gl_cv_cc_vis_werror=no]) - CFLAGS="$gl_save_CFLAGS"]) - AC_MSG_RESULT([$gl_cv_cc_vis_werror]) + AC_CACHE_CHECK([whether the -Werror option is usable], + [gl_cv_cc_vis_werror], + [gl_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror" + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[]], [[]])], + [gl_cv_cc_vis_werror=yes], + [gl_cv_cc_vis_werror=no]) + CFLAGS="$gl_save_CFLAGS" + ]) dnl Now check whether visibility declarations are supported. - AC_MSG_CHECKING([for simple visibility declarations]) - AC_CACHE_VAL([gl_cv_cc_visibility], [ - gl_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -fvisibility=hidden" - dnl We use the option -Werror and a function dummyfunc, because on some - dnl platforms (Cygwin 1.7) the use of -fvisibility triggers a warning - dnl "visibility attribute not supported in this configuration; ignored" - dnl at the first function definition in every compilation unit, and we - dnl don't want to use the option in this case. - if test $gl_cv_cc_vis_werror = yes; then - CFLAGS="$CFLAGS -Werror" - fi - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[extern __attribute__((__visibility__("hidden"))) int hiddenvar; - extern __attribute__((__visibility__("default"))) int exportedvar; - extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); - extern __attribute__((__visibility__("default"))) int exportedfunc (void); - void dummyfunc (void) {} - ]], - [[]])], - [gl_cv_cc_visibility=yes], - [gl_cv_cc_visibility=no]) - CFLAGS="$gl_save_CFLAGS"]) - AC_MSG_RESULT([$gl_cv_cc_visibility]) + AC_CACHE_CHECK([for simple visibility declarations], + [gl_cv_cc_visibility], + [gl_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fvisibility=hidden" + dnl We use the option -Werror and a function dummyfunc, because on some + dnl platforms (Cygwin 1.7) the use of -fvisibility triggers a warning + dnl "visibility attribute not supported in this configuration; ignored" + dnl at the first function definition in every compilation unit, and we + dnl don't want to use the option in this case. + if test $gl_cv_cc_vis_werror = yes; then + CFLAGS="$CFLAGS -Werror" + fi + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[extern __attribute__((__visibility__("hidden"))) int hiddenvar; + extern __attribute__((__visibility__("default"))) int exportedvar; + extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); + extern __attribute__((__visibility__("default"))) int exportedfunc (void); + void dummyfunc (void) {} + ]], + [[]])], + [gl_cv_cc_visibility=yes], + [gl_cv_cc_visibility=no]) + CFLAGS="$gl_save_CFLAGS" + ]) if test $gl_cv_cc_visibility = yes; then CFLAG_VISIBILITY="-fvisibility=hidden" HAVE_VISIBILITY=1 @@ -98,7 +98,7 @@ AC_DEFUN([gl_VISIBILITY], [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.]) ]) -# Copyright (C) 2002-2014 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,10 +110,10 @@ AC_DEFUN([gl_VISIBILITY], # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.15' +[am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.15], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -129,14 +129,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.15])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -188,7 +188,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2014 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -219,7 +219,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -410,13 +410,12 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. - # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], @@ -424,49 +423,41 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac + # TODO: see whether this extra hack can be removed once we start + # requiring Autoconf 2.70 or later. + AS_CASE([$CONFIG_FILES], + [*\'*], [eval set x "$CONFIG_FILES"], + [*], [set x $CONFIG_FILES]) shift - for mf + # Used to flag and report bootstrapping failures. + am_rc=0 + for am_mf do # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line + am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile which includes + # dependency-tracking related rules and includes. + # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "$am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done + sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ + || continue + am_dirpart=`AS_DIRNAME(["$am_mf"])` + am_filepart=`AS_BASENAME(["$am_mf"])` + AM_RUN_LOG([cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles]) || am_rc=$? done + if test $am_rc -ne 0; then + AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments + for automatic dependency tracking. Try re-running configure with the + '--disable-dependency-tracking' option to at least be able to build + the package (albeit without support for automatic dependency tracking).]) + fi + AS_UNSET([am_dirpart]) + AS_UNSET([am_filepart]) + AS_UNSET([am_mf]) + AS_UNSET([am_rc]) + rm -f conftest-deps.mk } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS @@ -475,18 +466,17 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # -# This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each '.P' file that we will -# need in order to bootstrap the dependency handling code. +# This code is only required when automatic dependency tracking is enabled. +# This creates each '.Po' and '.Plo' makefile fragment that we'll need in +# order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) -]) + [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -573,8 +563,8 @@ AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: -# -# +# +# AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. @@ -641,7 +631,7 @@ END Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation -that behaves properly: . +that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM @@ -683,7 +673,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -704,7 +694,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2014 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -725,7 +715,7 @@ AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -733,49 +723,42 @@ AC_SUBST([am__leading_dot])]) # AM_MAKE_INCLUDE() # ----------------- -# Check to see how make treats includes. +# Check whether make has an 'include' directive that can support all +# the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], -[am_make=${MAKE-make} -cat > confinc << 'END' +[AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) +cat > confinc.mk << 'END' am__doit: - @echo this is the am__doit target + @echo this is the am__doit target >confinc.out .PHONY: am__doit END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) +# BSD make does it like this. +echo '.include "confinc.mk" # ignored' > confmf.BSD +# Other make implementations (GNU, Solaris 10, AIX) do it like this. +echo 'include confinc.mk # ignored' > confmf.GNU +_am_result=no +for s in GNU BSD; do + AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) + AS_CASE([$?:`cat confinc.out 2>/dev/null`], + ['0:this is the am__doit target'], + [AS_CASE([$s], + [BSD], [am__include='.include' am__quote='"'], + [am__include='include' am__quote=''])]) + if test "$am__include" != "#"; then + _am_result="yes ($s style)" + break + fi +done +rm -f confinc.* confmf.* +AC_MSG_RESULT([${_am_result}]) +AC_SUBST([am__include])]) +AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2014 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -814,7 +797,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -843,7 +826,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -890,7 +873,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -909,7 +892,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -990,7 +973,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2014 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1050,7 +1033,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1078,7 +1061,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2014 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1097,7 +1080,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2014 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/compile b/compile index a85b723c7e6..99e50524b3b 100755 --- a/compile +++ b/compile @@ -1,9 +1,9 @@ #! /bin/sh # Wrapper for compilers which do not understand '-c -o'. -scriptversion=2012-10-14.11; # UTC +scriptversion=2018-03-07.03; # UTC -# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify @@ -17,7 +17,7 @@ scriptversion=2012-10-14.11; # UTC # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -255,7 +255,8 @@ EOF echo "compile $scriptversion" exit $? ;; - cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ + icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac @@ -339,9 +340,9 @@ exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" +# time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff --git a/config.guess b/config.guess index bbd48b60e88..a2c4684d30e 100755 --- a/config.guess +++ b/config.guess @@ -1,8 +1,8 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2017 Free Software Foundation, Inc. +# Copyright 1992-2019 Free Software Foundation, Inc. -timestamp='2017-01-01' +timestamp='2019-01-03' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ timestamp='2017-01-01' # General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, see . +# along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -27,7 +27,7 @@ timestamp='2017-01-01' # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # # Please send patches to . @@ -39,7 +39,7 @@ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. -Operation modes: +Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit @@ -50,7 +50,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2017 Free Software Foundation, Inc. +Copyright 1992-2019 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -84,8 +84,6 @@ if test $# != 0; then exit 1 fi -trap 'exit 1' 1 2 15 - # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a @@ -96,34 +94,38 @@ trap 'exit 1' 1 2 15 # Portable tmp directory creation inspired by the Autoconf team. -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' +tmp= +# shellcheck disable=SC2172 +trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 + +set_cc_for_build() { + : "${TMPDIR=/tmp}" + # shellcheck disable=SC2039 + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } + dummy=$tmp/dummy + case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in + ,,) echo "int x;" > "$dummy.c" + for driver in cc gcc c89 c99 ; do + if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then + CC_FOR_BUILD="$driver" + break + fi + done + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; + esac +} # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then +if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi @@ -132,14 +134,14 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown -case "${UNAME_SYSTEM}" in +case "$UNAME_SYSTEM" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu - eval $set_cc_for_build - cat <<-EOF > $dummy.c + set_cc_for_build + cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc @@ -149,13 +151,20 @@ Linux|GNU|GNU/*) LIBC=gnu #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" + + # If ldd exists, use it to detect musl libc. + if command -v ldd >/dev/null && \ + ldd --version 2>&1 | grep -q ^musl + then + LIBC=musl + fi ;; esac # Note: order is significant - the case branches are not exclusive. -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in +case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, @@ -169,30 +178,32 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ - /sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || \ + "/sbin/$sysctl" 2>/dev/null || \ + "/usr/sbin/$sysctl" 2>/dev/null || \ echo unknown)` - case "${UNAME_MACHINE_ARCH}" in + case "$UNAME_MACHINE_ARCH" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; - earmv*) - arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` - endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` - machine=${arch}${endian}-unknown + earm*) + arch="${UNAME_MACHINE_ARCH#e}" + arch="${arch%eb}" + arch="${arch%hf}" + endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` + machine="${arch}${endian}"-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + *) machine="$UNAME_MACHINE_ARCH"-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. - case "${UNAME_MACHINE_ARCH}" in + case "$UNAME_MACHINE_ARCH" in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build + set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then @@ -208,10 +219,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in ;; esac # Determine ABI tags. - case "${UNAME_MACHINE_ARCH}" in + case "$UNAME_MACHINE_ARCH" in earm*) - expr='s/^earmv[0-9]/-eabi/;s/eb$//' - abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` + expr='s/v[0-9]//;s/earm/-eabi/;s/eb$//' + abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release @@ -219,46 +230,55 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in + case "$UNAME_VERSION" in Debian*) release='-gnu' ;; *) - release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` + release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}${abi}" + echo "$machine-${os}${release}${abi-}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" exit ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE} + echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" + exit ;; + *:MidnightBSD:*:*) + echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" exit ;; *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" exit ;; *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" exit ;; macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} + echo powerpc-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:Sortix:*:*) - echo ${UNAME_MACHINE}-unknown-sortix + echo "$UNAME_MACHINE"-unknown-sortix exit ;; + *:Redox:*:*) + echo "$UNAME_MACHINE"-unknown-redox + exit ;; + mips:OSF1:*.*) + echo mips-dec-osf1 + exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) @@ -310,28 +330,19 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`" # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos + echo "$UNAME_MACHINE"-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos + echo "$UNAME_MACHINE"-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition @@ -343,7 +354,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} + echo arm-acorn-riscix"$UNAME_RELEASE" exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos @@ -370,19 +381,32 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) - echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + set_cc_for_build + SUN_ARCH=sparc + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if (echo '#ifdef __sparcv9'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH=sparcv9 + fi + fi + echo "$SUN_ARCH"-sun-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux${UNAME_RELEASE} + echo i386-pc-auroraux"$UNAME_RELEASE" exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build + set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. @@ -395,13 +419,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in SUN_ARCH=x86_64 fi fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in @@ -410,25 +434,25 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" exit ;; sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} + echo m68k-sun-sunos"$UNAME_RELEASE" exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3 + test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) - echo m68k-sun-sunos${UNAME_RELEASE} + echo m68k-sun-sunos"$UNAME_RELEASE" ;; sun4) - echo sparc-sun-sunos${UNAME_RELEASE} + echo sparc-sun-sunos"$UNAME_RELEASE" ;; esac exit ;; aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} + echo sparc-auspex-sunos"$UNAME_RELEASE" exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not @@ -439,44 +463,44 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint"$UNAME_RELEASE" exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint"$UNAME_RELEASE" exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint"$UNAME_RELEASE" exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} + echo m68k-milan-mint"$UNAME_RELEASE" exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} + echo m68k-hades-mint"$UNAME_RELEASE" exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} + echo m68k-unknown-mint"$UNAME_RELEASE" exit ;; m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} + echo m68k-apple-machten"$UNAME_RELEASE" exit ;; powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} + echo powerpc-apple-machten"$UNAME_RELEASE" exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} + echo mips-dec-ultrix"$UNAME_RELEASE" exit ;; VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} + echo vax-dec-ultrix"$UNAME_RELEASE" exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} + echo clipper-intergraph-clix"$UNAME_RELEASE" exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { @@ -485,23 +509,23 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && + dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} + echo mips-mips-riscos"$UNAME_RELEASE" exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax @@ -527,17 +551,17 @@ EOF AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ] then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] + if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \ + [ "$TARGET_BINARY_INTERFACE"x = x ] then - echo m88k-dg-dgux${UNAME_RELEASE} + echo m88k-dg-dgux"$UNAME_RELEASE" else - echo m88k-dg-dguxbcs${UNAME_RELEASE} + echo m88k-dg-dguxbcs"$UNAME_RELEASE" fi else - echo i586-dg-dgux${UNAME_RELEASE} + echo i586-dg-dgux"$UNAME_RELEASE" fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) @@ -554,7 +578,7 @@ EOF echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id @@ -566,14 +590,14 @@ EOF if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" #include main() @@ -584,7 +608,7 @@ EOF exit(0); } EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then echo "$SYSTEM_NAME" else @@ -598,7 +622,7 @@ EOF exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc @@ -607,18 +631,18 @@ EOF IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} + echo "$IBM_ARCH"-ibm-aix"$IBM_REV" exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) + ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx @@ -633,28 +657,28 @@ EOF echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; + HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` + case "$UNAME_MACHINE" in + 9000/31?) HP_ARCH=m68000 ;; + 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in + case "$sc_cpu_version" in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in + case "$sc_kernel_bits" in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + if [ "$HP_ARCH" = "" ]; then + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include @@ -687,13 +711,13 @@ EOF exit (0); } EOF - (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac - if [ ${HP_ARCH} = hppa2.0w ] + if [ "$HP_ARCH" = hppa2.0w ] then - eval $set_cc_for_build + set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler @@ -712,15 +736,15 @@ EOF HP_ARCH=hppa64 fi fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} + echo "$HP_ARCH"-hp-hpux"$HPUX_REV" exit ;; ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} + HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux"$HPUX_REV" exit ;; 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" #include int main () @@ -745,11 +769,11 @@ EOF exit (0); } EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) @@ -758,7 +782,7 @@ EOF *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) @@ -766,9 +790,9 @@ EOF exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk + echo "$UNAME_MACHINE"-unknown-osf1mk else - echo ${UNAME_MACHINE}-unknown-osf1 + echo "$UNAME_MACHINE"-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) @@ -793,127 +817,120 @@ EOF echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` + FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" exit ;; sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} + echo sparc-unknown-bsdi"$UNAME_RELEASE" exit ;; *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" + exit ;; + arm:FreeBSD:*:*) + UNAME_PROCESSOR=`uname -p` + set_cc_for_build + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabi + else + echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabihf + fi exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` - case ${UNAME_PROCESSOR} in + case "$UNAME_PROCESSOR" in amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + UNAME_PROCESSOR=x86_64 ;; + i386) + UNAME_PROCESSOR=i586 ;; esac + echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin + echo "$UNAME_MACHINE"-pc-cygwin exit ;; *:MINGW64*:*) - echo ${UNAME_MACHINE}-pc-mingw64 + echo "$UNAME_MACHINE"-pc-mingw64 exit ;; *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 + echo "$UNAME_MACHINE"-pc-mingw32 exit ;; *:MSYS*:*) - echo ${UNAME_MACHINE}-pc-msys - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 + echo "$UNAME_MACHINE"-pc-msys exit ;; i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 + echo "$UNAME_MACHINE"-pc-pw32 exit ;; *:Interix*:*) - case ${UNAME_MACHINE} in + case "$UNAME_MACHINE" in x86) - echo i586-pc-interix${UNAME_RELEASE} + echo i586-pc-interix"$UNAME_RELEASE" exit ;; authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix${UNAME_RELEASE} + echo x86_64-unknown-interix"$UNAME_RELEASE" exit ;; IA64) - echo ia64-unknown-interix${UNAME_RELEASE} + echo ia64-unknown-interix"$UNAME_RELEASE" exit ;; esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin + echo "$UNAME_MACHINE"-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin + echo x86_64-pc-cygwin exit ;; prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; *:GNU:*:*) # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix + *:Minix:*:*) + echo "$UNAME_MACHINE"-unknown-minix exit ;; aarch64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in @@ -927,63 +944,63 @@ EOF esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arc:Linux:*:* | arceb:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arm*:Linux:*:*) - eval $set_cc_for_build + set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi else - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf fi fi exit ;; avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; cris:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; crisv32:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; e2k:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; frv:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; hexagon:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:Linux:*:*) - echo ${UNAME_MACHINE}-pc-linux-${LIBC} + echo "$UNAME_MACHINE"-pc-linux-"$LIBC" exit ;; ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; k1om:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el @@ -997,70 +1014,70 @@ EOF #endif #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`" + test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; } ;; mips64el:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; openrisc*:Linux:*:*) - echo or1k-unknown-linux-${LIBC} + echo or1k-unknown-linux-"$LIBC" exit ;; or32:Linux:*:* | or1k*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; padre:Linux:*:*) - echo sparc-unknown-linux-${LIBC} + echo sparc-unknown-linux-"$LIBC" exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-${LIBC} + echo hppa64-unknown-linux-"$LIBC" exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; - PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; - *) echo hppa-unknown-linux-${LIBC} ;; + PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; + PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; + *) echo hppa-unknown-linux-"$LIBC" ;; esac exit ;; ppc64:Linux:*:*) - echo powerpc64-unknown-linux-${LIBC} + echo powerpc64-unknown-linux-"$LIBC" exit ;; ppc:Linux:*:*) - echo powerpc-unknown-linux-${LIBC} + echo powerpc-unknown-linux-"$LIBC" exit ;; ppc64le:Linux:*:*) - echo powerpc64le-unknown-linux-${LIBC} + echo powerpc64le-unknown-linux-"$LIBC" exit ;; ppcle:Linux:*:*) - echo powerpcle-unknown-linux-${LIBC} + echo powerpcle-unknown-linux-"$LIBC" exit ;; riscv32:Linux:*:* | riscv64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux-${LIBC} + echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" exit ;; sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; tile*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-${LIBC} + echo "$UNAME_MACHINE"-dec-linux-"$LIBC" exit ;; x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-pc-linux-${LIBC} + echo "$UNAME_MACHINE"-pc-linux-"$LIBC" exit ;; xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. @@ -1074,34 +1091,34 @@ EOF # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx + echo "$UNAME_MACHINE"-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop + echo "$UNAME_MACHINE"-unknown-stop exit ;; i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos + echo "$UNAME_MACHINE"-unknown-atheos exit ;; i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable + echo "$UNAME_MACHINE"-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} + echo i386-unknown-lynxos"$UNAME_RELEASE" exit ;; i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp + echo "$UNAME_MACHINE"-pc-msdosdjgpp exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + i*86:*:4.*:*) + UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" fi exit ;; i*86:*:5:[678]*) @@ -1111,12 +1128,12 @@ EOF *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}" exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 @@ -1126,9 +1143,9 @@ EOF && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" else - echo ${UNAME_MACHINE}-pc-sysv32 + echo "$UNAME_MACHINE"-pc-sysv32 fi exit ;; pc:*:*:*) @@ -1148,9 +1165,9 @@ EOF exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) @@ -1170,9 +1187,9 @@ EOF test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; @@ -1181,28 +1198,28 @@ EOF test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} + echo m68k-unknown-lynxos"$UNAME_RELEASE" exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} + echo sparc-unknown-lynxos"$UNAME_RELEASE" exit ;; rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} + echo rs6000-unknown-lynxos"$UNAME_RELEASE" exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} + echo powerpc-unknown-lynxos"$UNAME_RELEASE" exit ;; SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} + echo mips-dde-sysv"$UNAME_RELEASE" exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 @@ -1213,7 +1230,7 @@ EOF *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 + echo "$UNAME_MACHINE"-sni-sysv4 else echo ns32k-sni-sysv fi @@ -1233,23 +1250,23 @@ EOF exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos + echo "$UNAME_MACHINE"-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} + echo m68k-apple-aux"$UNAME_RELEASE" exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} + echo mips-nec-sysv"$UNAME_RELEASE" else - echo mips-unknown-sysv${UNAME_RELEASE} + echo mips-unknown-sysv"$UNAME_RELEASE" fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. @@ -1268,49 +1285,56 @@ EOF echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} + echo sx4-nec-superux"$UNAME_RELEASE" exit ;; SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} + echo sx5-nec-superux"$UNAME_RELEASE" exit ;; SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} + echo sx6-nec-superux"$UNAME_RELEASE" exit ;; SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} + echo sx7-nec-superux"$UNAME_RELEASE" exit ;; SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} + echo sx8-nec-superux"$UNAME_RELEASE" exit ;; SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} + echo sx8r-nec-superux"$UNAME_RELEASE" exit ;; SX-ACE:SUPER-UX:*:*) - echo sxace-nec-superux${UNAME_RELEASE} + echo sxace-nec-superux"$UNAME_RELEASE" exit ;; Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} + echo powerpc-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - eval $set_cc_for_build + set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi - if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then + if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi + # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc + if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_PPC >/dev/null + then + UNAME_PROCESSOR=powerpc + fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub @@ -1321,7 +1345,7 @@ EOF # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` @@ -1329,19 +1353,25 @@ EOF UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; - NEO-?:NONSTOP_KERNEL:*:*) - echo neo-tandem-nsk${UNAME_RELEASE} + NEO-*:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk"$UNAME_RELEASE" exit ;; NSE-*:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} + echo nse-tandem-nsk"$UNAME_RELEASE" exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} + NSR-*:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSV-*:NONSTOP_KERNEL:*:*) + echo nsv-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSX-*:NONSTOP_KERNEL:*:*) + echo nsx-tandem-nsk"$UNAME_RELEASE" exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux @@ -1350,18 +1380,19 @@ EOF echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. + # shellcheck disable=SC2154 if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi - echo ${UNAME_MACHINE}-unknown-plan9 + echo "$UNAME_MACHINE"-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 @@ -1382,14 +1413,14 @@ EOF echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} + echo mips-sei-seiux"$UNAME_RELEASE" exit ;; *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in + case "$UNAME_MACHINE" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; @@ -1398,32 +1429,47 @@ EOF echo i386-pc-xenix exit ;; i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'` + echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`" exit ;; i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos + echo "$UNAME_MACHINE"-pc-rdos exit ;; i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros + echo "$UNAME_MACHINE"-pc-aros exit ;; x86_64:VMkernel:*:*) - echo ${UNAME_MACHINE}-unknown-esx + echo "$UNAME_MACHINE"-unknown-esx exit ;; amd64:Isilon\ OneFS:*:*) echo x86_64-unknown-onefs exit ;; + *:Unleashed:*:*) + echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE" + exit ;; +esac + +echo "$0: unable to guess system type" >&2 + +case "$UNAME_MACHINE:$UNAME_SYSTEM" in + mips:Linux | mips64:Linux) + # If we got here on MIPS GNU/Linux, output extra information. + cat >&2 <&2 </dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} +UNAME_MACHINE = "$UNAME_MACHINE" +UNAME_RELEASE = "$UNAME_RELEASE" +UNAME_SYSTEM = "$UNAME_SYSTEM" +UNAME_VERSION = "$UNAME_VERSION" EOF exit 1 # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" diff --git a/config.h.in b/config.h.in index 97ed41c0e2b..05dcc8ad646 100644 --- a/config.h.in +++ b/config.h.in @@ -6,6 +6,9 @@ /* Define in built-in ELF support is used */ #undef BUILTIN_ELF +/* Enable bzlib compression support */ +#undef BZLIBSUPPORT + /* Define for ELF core file support */ #undef ELFCORE @@ -15,6 +18,9 @@ /* Define to 1 if you have the `asprintf' function. */ #undef HAVE_ASPRINTF +/* Define to 1 if you have the header file. */ +#undef HAVE_BZLIB_H + /* Define to 1 if you have the `ctime_r' function. */ #undef HAVE_CTIME_R @@ -74,9 +80,15 @@ /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H +/* Define to 1 if you have the `bz2' library (-lbz2). */ +#undef HAVE_LIBBZ2 + /* Define to 1 if you have the `gnurx' library (-lgnurx). */ #undef HAVE_LIBGNURX +/* Define to 1 if you have the `lzma' library (-llzma). */ +#undef HAVE_LIBLZMA + /* Define to 1 if you have the `seccomp' library (-lseccomp). */ #undef HAVE_LIBSECCOMP @@ -86,6 +98,9 @@ /* Define to 1 if you have the `localtime_r' function. */ #undef HAVE_LOCALTIME_R +/* Define to 1 if you have the header file. */ +#undef HAVE_LZMA_H + /* Define to 1 if mbrtowc and mbstate_t are properly declared. */ #undef HAVE_MBRTOWC @@ -240,8 +255,7 @@ /* Define to 1 if you have the header file. */ #undef HAVE_ZLIB_H -/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ +/* Define to the sub-directory where libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Define to 1 if `major', `minor', and `makedev' are declared in . @@ -316,6 +330,9 @@ # endif #endif +/* Enable xzlib compression support */ +#undef XZLIBSUPPORT + /* Enable zlib compression support */ #undef ZLIBSUPPORT @@ -358,9 +375,6 @@ #define below would cause a syntax error. */ #undef _UINT8_T -/* Define to empty if `const' does not conform to ANSI C. */ -#undef const - /* Define to the type of a signed integer type of width exactly 32 bits if such a type exists and the standard includes do not define it. */ #undef int32_t diff --git a/config.sub b/config.sub index 7e792b4ae17..3b4c7624b68 100755 --- a/config.sub +++ b/config.sub @@ -1,8 +1,8 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2017 Free Software Foundation, Inc. +# Copyright 1992-2019 Free Software Foundation, Inc. -timestamp='2017-01-01' +timestamp='2019-01-05' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ timestamp='2017-01-01' # General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, see . +# along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -33,7 +33,7 @@ timestamp='2017-01-01' # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases @@ -57,7 +57,7 @@ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. -Operation modes: +Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit @@ -67,7 +67,7 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright 1992-2017 Free Software Foundation, Inc. +Copyright 1992-2019 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -89,12 +89,12 @@ while test $# -gt 0 ; do - ) # Use stdin as input. break ;; -* ) - echo "$me: invalid option $1$help" + echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. - echo $1 + echo "$1" exit ;; * ) @@ -110,1244 +110,1164 @@ case $# in exit 1;; esac -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ - linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ - kopensolaris*-gnu* | cloudabi*-eabi* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - android-linux) - os=-linux-android - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac +# Split fields of configuration type +# shellcheck disable=SC2162 +IFS="-" read field1 field2 field3 field4 <&2 + exit 1 ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray | -microblaze*) - os= - basic_machine=$1 + *-*-*-*) + basic_machine=$field1-$field2 + os=$field3-$field4 ;; - -bluegene*) - os=-cnk + *-*-*) + # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two + # parts + maybe_os=$field2-$field3 + case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc \ + | linux-newlib* | linux-musl* | linux-uclibc* | uclinux-uclibc* \ + | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ + | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ + | storm-chaos* | os2-emx* | rtmk-nova*) + basic_machine=$field1 + os=$maybe_os + ;; + android-linux) + basic_machine=$field1-unknown + os=linux-android + ;; + *) + basic_machine=$field1-$field2 + os=$field3 + ;; + esac ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 + *-*) + # A lone config we happen to match not fitting any pattern + case $field1-$field2 in + decstation-3100) + basic_machine=mips-dec + os= + ;; + *-*) + # Second component is usually, but not always the OS + case $field2 in + # Prevent following clause from handling this valid os + sun*os*) + basic_machine=$field1 + os=$field2 + ;; + # Manufacturers + dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ + | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ + | unicom* | ibm* | next | hp | isi* | apollo | altos* \ + | convergent* | ncr* | news | 32* | 3600* | 3100* \ + | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ + | ultra | tti* | harris | dolphin | highlevel | gould \ + | cbm | ns | masscomp | apple | axis | knuth | cray \ + | microblaze* | sim | cisco \ + | oki | wec | wrs | winbond) + basic_machine=$field1-$field2 + os= + ;; + *) + basic_machine=$field1 + os=$field2 + ;; + esac + ;; + esac ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*178) - os=-lynxos178 - ;; - -lynx*5) - os=-lynxos5 - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint + *) + # Convert single-component short-hands not valid as part of + # multi-component configurations. + case $field1 in + 386bsd) + basic_machine=i386-pc + os=bsd + ;; + a29khif) + basic_machine=a29k-amd + os=udi + ;; + adobe68k) + basic_machine=m68010-adobe + os=scout + ;; + alliant) + basic_machine=fx80-alliant + os= + ;; + altos | altos3068) + basic_machine=m68k-altos + os= + ;; + am29k) + basic_machine=a29k-none + os=bsd + ;; + amdahl) + basic_machine=580-amdahl + os=sysv + ;; + amiga) + basic_machine=m68k-unknown + os= + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=bsd + ;; + aros) + basic_machine=i386-pc + os=aros + ;; + aux) + basic_machine=m68k-apple + os=aux + ;; + balance) + basic_machine=ns32k-sequent + os=dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=linux + ;; + cegcc) + basic_machine=arm-unknown + os=cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=bsd + ;; + convex-c2) + basic_machine=c2-convex + os=bsd + ;; + convex-c32) + basic_machine=c32-convex + os=bsd + ;; + convex-c34) + basic_machine=c34-convex + os=bsd + ;; + convex-c38) + basic_machine=c38-convex + os=bsd + ;; + cray) + basic_machine=j90-cray + os=unicos + ;; + crds | unos) + basic_machine=m68k-crds + os= + ;; + da30) + basic_machine=m68k-da30 + os= + ;; + decstation | pmax | pmin | dec3100 | decstatn) + basic_machine=mips-dec + os= + ;; + delta88) + basic_machine=m88k-motorola + os=sysv3 + ;; + dicos) + basic_machine=i686-pc + os=dicos + ;; + djgpp) + basic_machine=i586-pc + os=msdosdjgpp + ;; + ebmon29k) + basic_machine=a29k-amd + os=ebmon + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=ose + ;; + gmicro) + basic_machine=tron-gmicro + os=sysv + ;; + go32) + basic_machine=i386-pc + os=go32 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=hms + ;; + harris) + basic_machine=m88k-harris + os=sysv3 + ;; + hp300) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=hpux + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=proelf + ;; + i386mach) + basic_machine=i386-mach + os=mach + ;; + vsta) + basic_machine=i386-pc + os=vsta + ;; + isi68 | isi) + basic_machine=m68k-isi + os=sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=linux + ;; + magnum | m3230) + basic_machine=mips-mips + os=sysv + ;; + merlin) + basic_machine=ns32k-utek + os=sysv + ;; + mingw64) + basic_machine=x86_64-pc + os=mingw64 + ;; + mingw32) + basic_machine=i686-pc + os=mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=mingw32ce + ;; + monitor) + basic_machine=m68k-rom68k + os=coff + ;; + morphos) + basic_machine=powerpc-unknown + os=morphos + ;; + moxiebox) + basic_machine=moxie-unknown + os=moxiebox + ;; + msdos) + basic_machine=i386-pc + os=msdos + ;; + msys) + basic_machine=i686-pc + os=msys + ;; + mvs) + basic_machine=i370-ibm + os=mvs + ;; + nacl) + basic_machine=le32-unknown + os=nacl + ;; + ncr3000) + basic_machine=i486-ncr + os=sysv4 + ;; + netbsd386) + basic_machine=i386-pc + os=netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=newsos + ;; + news1000) + basic_machine=m68030-sony + os=newsos + ;; + necv70) + basic_machine=v70-nec + os=sysv + ;; + nh3000) + basic_machine=m68k-harris + os=cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=cxux + ;; + nindy960) + basic_machine=i960-intel + os=nindy + ;; + mon960) + basic_machine=i960-intel + os=mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=nonstopux + ;; + os400) + basic_machine=powerpc-ibm + os=os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=ose + ;; + os68k) + basic_machine=m68k-none + os=os68k + ;; + paragon) + basic_machine=i860-intel + os=osf + ;; + parisc) + basic_machine=hppa-unknown + os=linux + ;; + pw32) + basic_machine=i586-unknown + os=pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + os=rdos + ;; + rdos32) + basic_machine=i386-pc + os=rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=coff + ;; + sa29200) + basic_machine=a29k-amd + os=udi + ;; + sei) + basic_machine=mips-sei + os=seiux + ;; + sequent) + basic_machine=i386-sequent + os= + ;; + sps7) + basic_machine=m68k-bull + os=sysv2 + ;; + st2000) + basic_machine=m68k-tandem + os= + ;; + stratus) + basic_machine=i860-stratus + os=sysv4 + ;; + sun2) + basic_machine=m68000-sun + os= + ;; + sun2os3) + basic_machine=m68000-sun + os=sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=sunos4 + ;; + sun3) + basic_machine=m68k-sun + os= + ;; + sun3os3) + basic_machine=m68k-sun + os=sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=sunos4 + ;; + sun4) + basic_machine=sparc-sun + os= + ;; + sun4os3) + basic_machine=sparc-sun + os=sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=solaris2 + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + os= + ;; + sv1) + basic_machine=sv1-cray + os=unicos + ;; + symmetry) + basic_machine=i386-sequent + os=dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=unicos + ;; + t90) + basic_machine=t90-cray + os=unicos + ;; + toad1) + basic_machine=pdp10-xkl + os=tops20 + ;; + tpf) + basic_machine=s390x-ibm + os=tpf + ;; + udi29k) + basic_machine=a29k-amd + os=udi + ;; + ultra3) + basic_machine=a29k-nyu + os=sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=none + ;; + vaxv) + basic_machine=vax-dec + os=sysv + ;; + vms) + basic_machine=vax-dec + os=vms + ;; + vxworks960) + basic_machine=i960-wrs + os=vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=vxworks + ;; + xbox) + basic_machine=i686-pc + os=mingw32 + ;; + ymp) + basic_machine=ymp-cray + os=unicos + ;; + *) + basic_machine=$1 + os= + ;; + esac ;; esac -# Decode aliases for certain CPU-COMPANY combinations. +# Decode 1-component or ad-hoc basic machines case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | aarch64 | aarch64_be \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arceb \ - | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ - | avr | avr32 \ - | ba \ - | be32 | be64 \ - | bfin \ - | c4x | c8051 | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | e2k | epiphany \ - | fido | fr30 | frv | ft32 \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | hexagon \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | k1om \ - | le32 | le64 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa32r6 | mipsisa32r6el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64r6 | mipsisa64r6el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipsr5900 | mipsr5900el \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nds32 | nds32le | nds32be \ - | nios | nios2 | nios2eb | nios2el \ - | ns16k | ns32k \ - | open8 | or1k | or1knd | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle \ - | pru \ - | pyramid \ - | riscv32 | riscv64 \ - | rl78 | rx \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu \ - | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ - | ubicom32 \ - | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ - | visium \ - | we32k \ - | x86 | xc16x | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown + # Here we handle the default manufacturer of certain CPU types. It is in + # some cases the only manufacturer, in others, it is the most popular. + w89k) + cpu=hppa1.1 + vendor=winbond ;; - c54x) - basic_machine=tic54x-unknown + op50n) + cpu=hppa1.1 + vendor=oki ;; - c55x) - basic_machine=tic55x-unknown + op60c) + cpu=hppa1.1 + vendor=oki ;; - c6x) - basic_machine=tic6x-unknown + ibm*) + cpu=i370 + vendor=ibm + ;; + orion105) + cpu=clipper + vendor=highlevel + ;; + mac | mpw | mac-mpw) + cpu=m68k + vendor=apple + ;; + pmac | pmac-mpw) + cpu=powerpc + vendor=apple + ;; + + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + cpu=m68000 + vendor=att + ;; + 3b*) + cpu=we32k + vendor=att + ;; + bluegene*) + cpu=powerpc + vendor=ibm + os=cnk + ;; + decsystem10* | dec10*) + cpu=pdp10 + vendor=dec + os=tops10 + ;; + decsystem20* | dec20*) + cpu=pdp10 + vendor=dec + os=tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + cpu=m68k + vendor=motorola + ;; + dpx2*) + cpu=m68k + vendor=bull + os=sysv3 + ;; + encore | umax | mmax) + cpu=ns32k + vendor=encore + ;; + elxsi) + cpu=elxsi + vendor=elxsi + os=${os:-bsd} + ;; + fx2800) + cpu=i860 + vendor=alliant + ;; + genix) + cpu=ns32k + vendor=ns + ;; + h3050r* | hiux*) + cpu=hppa1.1 + vendor=hitachi + os=hiuxwe2 + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + cpu=hppa1.0 + vendor=hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + cpu=m68000 + vendor=hp + ;; + hp9k3[2-9][0-9]) + cpu=m68k + vendor=hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + cpu=hppa1.0 + vendor=hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + cpu=hppa1.1 + vendor=hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + cpu=hppa1.1 + vendor=hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + cpu=hppa1.1 + vendor=hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + cpu=hppa1.1 + vendor=hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + cpu=hppa1.0 + vendor=hp + ;; + i*86v32) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + os=sysv32 + ;; + i*86v4*) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + os=sysv4 + ;; + i*86v) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + os=sysv + ;; + i*86sol2) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + os=solaris2 + ;; + j90 | j90-cray) + cpu=j90 + vendor=cray + os=${os:-unicos} + ;; + iris | iris4d) + cpu=mips + vendor=sgi + case $os in + irix*) + ;; + *) + os=irix4 + ;; + esac + ;; + miniframe) + cpu=m68000 + vendor=convergent + ;; + *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) + cpu=m68k + vendor=atari + os=mint + ;; + news-3600 | risc-news) + cpu=mips + vendor=sony + os=newsos + ;; + next | m*-next) + cpu=m68k + vendor=next + case $os in + nextstep* ) + ;; + ns2*) + os=nextstep2 + ;; + *) + os=nextstep3 + ;; + esac + ;; + np1) + cpu=np1 + vendor=gould + ;; + op50n-* | op60c-*) + cpu=hppa1.1 + vendor=oki + os=proelf + ;; + pa-hitachi) + cpu=hppa1.1 + vendor=hitachi + os=hiuxwe2 + ;; + pbd) + cpu=sparc + vendor=tti + ;; + pbb) + cpu=m68k + vendor=tti + ;; + pc532) + cpu=ns32k + vendor=pc532 + ;; + pn) + cpu=pn + vendor=gould + ;; + power) + cpu=power + vendor=ibm + ;; + ps2) + cpu=i386 + vendor=ibm + ;; + rm[46]00) + cpu=mips + vendor=siemens + ;; + rtpc | rtpc-*) + cpu=romp + vendor=ibm + ;; + sde) + cpu=mipsisa32 + vendor=sde + os=${os:-elf} + ;; + simso-wrs) + cpu=sparclite + vendor=wrs + os=vxworks + ;; + tower | tower-32) + cpu=m68k + vendor=ncr + ;; + vpp*|vx|vx-*) + cpu=f301 + vendor=fujitsu + ;; + w65) + cpu=w65 + vendor=wdc + ;; + w89k-*) + cpu=hppa1.1 + vendor=winbond + os=proelf + ;; + none) + cpu=none + vendor=none ;; leon|leon[3-9]) - basic_machine=sparc-$basic_machine + cpu=sparc + vendor=$basic_machine ;; - m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - ms1) - basic_machine=mt-unknown + leon-*|leon[3-9]-*) + cpu=sparc + vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; - strongarm | thumb | xscale) - basic_machine=arm-unknown + *-*) + # shellcheck disable=SC2162 + IFS="-" read cpu vendor <&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | aarch64-* | aarch64_be-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | ba-* \ - | be32-* | be64-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | c8051-* | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | e2k-* | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | hexagon-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | k1om-* \ - | le32-* | le64-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ - | microblaze-* | microblazeel-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa32r6-* | mipsisa32r6el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64r6-* | mipsisa64r6el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipsr5900-* | mipsr5900el-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nds32-* | nds32le-* | nds32be-* \ - | nios-* | nios2-* | nios2eb-* | nios2el-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | open8-* \ - | or1k*-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ - | pru-* \ - | pyramid-* \ - | riscv32-* | riscv64-* \ - | rl78-* | romp-* | rs6000-* | rx-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ - | tahoe-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tile*-* \ - | tron-* \ - | ubicom32-* \ - | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ - | vax-* \ - | visium-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - asmjs) - basic_machine=asmjs-unknown - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - bluegene*) - basic_machine=powerpc-ibm - os=-cnk - ;; - c54x-*) - basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c55x-*) - basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c6x-*) - basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16 | cr16-*) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - e500v[12]) - basic_machine=powerpc-unknown - os=$os"spe" - ;; - e500v[12]-*) - basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - os=$os"spe" - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - leon-*|leon[3-9]-*) - basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` - ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; - m68knommu-*) - basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - microblaze*) - basic_machine=microblaze-xilinx - ;; - mingw64) - basic_machine=x86_64-pc - os=-mingw64 - ;; - mingw32) - basic_machine=i686-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - moxiebox) - basic_machine=moxie-unknown - os=-moxiebox - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` - ;; - msys) - basic_machine=i686-pc - os=-msys - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - nacl) - basic_machine=le32-unknown - os=-nacl - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - neo-tandem) - basic_machine=neo-tandem - ;; - nse-tandem) - basic_machine=nse-tandem - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 + cpu=$basic_machine + vendor=pc ;; + # These rules are duplicated from below for sake of the special case above; + # i.e. things that normalized to x86 arches should also default to "pc" pc98) - basic_machine=i386-pc + cpu=i386 + vendor=pc ;; - pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + x64 | amd64) + cpu=x86_64 + vendor=pc ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc + # Recognize the basic CPU types without company name. + *) + cpu=$basic_machine + vendor=unknown ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc +esac + +unset -v basic_machine + +# Decode basic machines in the full and proper CPU-Company form. +case $cpu-$vendor in + # Here we handle the default manufacturer of certain CPU types in canonical form. It is in + # some cases the only manufacturer, in others, it is the most popular. + craynv-unknown) + vendor=cray + os=${os:-unicosmp} ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc + c90-unknown | c90-cray) + vendor=cray + os=${os:-unicos} ;; - pentium4) - basic_machine=i786-pc + fx80-unknown) + vendor=alliant ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + romp-unknown) + vendor=ibm ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + mmix-unknown) + vendor=knuth ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + microblaze-unknown | microblazeel-unknown) + vendor=xilinx ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + rs6000-unknown) + vendor=ibm ;; - pn) - basic_machine=pn-gould + vax-unknown) + vendor=dec ;; - power) basic_machine=power-ibm + pdp11-unknown) + vendor=dec ;; - ppc | ppcbe) basic_machine=powerpc-unknown + we32k-unknown) + vendor=att ;; - ppc-* | ppcbe-*) - basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + cydra-unknown) + vendor=cydrome ;; - ppcle | powerpclittle) - basic_machine=powerpcle-unknown + i370-ibm*) + vendor=ibm ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + orion-unknown) + vendor=highlevel ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos | rdos64) - basic_machine=x86_64-pc - os=-rdos - ;; - rdos32) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sde) - basic_machine=mipsisa32-sde - os=-elf - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sh5el) - basic_machine=sh5le-unknown - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - strongarm-* | thumb-*) - basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - tile*) - basic_machine=$basic_machine-unknown - os=-linux-gnu - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - xbox) - basic_machine=i686-pc - os=-mingw32 - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - xscale-* | xscalee[bl]-*) - basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - z80-*-coff) - basic_machine=z80-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none + xps-unknown | xps100-unknown) + cpu=xps100 + vendor=honeywell ;; -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond + # Here we normalize CPU types with a missing or matching vendor + dpx20-unknown | dpx20-bull) + cpu=rs6000 + vendor=bull + os=${os:-bosx} ;; - op50n) - basic_machine=hppa1.1-oki + + # Here we normalize CPU types irrespective of the vendor + amd64-*) + cpu=x86_64 ;; - op60c) - basic_machine=hppa1.1-oki + blackfin-*) + cpu=bfin + os=linux ;; - romp) - basic_machine=romp-ibm + c54x-*) + cpu=tic54x ;; - mmix) - basic_machine=mmix-knuth + c55x-*) + cpu=tic55x ;; - rs6000) - basic_machine=rs6000-ibm + c6x-*) + cpu=tic6x ;; - vax) - basic_machine=vax-dec + e500v[12]-*) + cpu=powerpc + os=$os"spe" ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown + mips3*-*) + cpu=mips64 ;; - pdp11) - basic_machine=pdp11-dec + ms1-*) + cpu=mt ;; - we32k) - basic_machine=we32k-att + m68knommu-*) + cpu=m68k + os=linux ;; - sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown + m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*) + cpu=s12z ;; - sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) - basic_machine=sparc-sun + openrisc-*) + cpu=or32 ;; - cydra) - basic_machine=cydra-cydrome + parisc-*) + cpu=hppa + os=linux ;; - orion) - basic_machine=orion-highlevel + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + cpu=i586 ;; - orion105) - basic_machine=clipper-highlevel + pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*) + cpu=i686 ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + cpu=i686 ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple + pentium4-*) + cpu=i786 ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. + pc98-*) + cpu=i386 ;; + ppc-* | ppcbe-*) + cpu=powerpc + ;; + ppcle-* | powerpclittle-*) + cpu=powerpcle + ;; + ppc64-*) + cpu=powerpc64 + ;; + ppc64le-* | powerpc64little-*) + cpu=powerpc64le + ;; + sb1-*) + cpu=mipsisa64sb1 + ;; + sb1el-*) + cpu=mipsisa64sb1el + ;; + sh5e[lb]-*) + cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'` + ;; + spur-*) + cpu=spur + ;; + strongarm-* | thumb-*) + cpu=arm + ;; + tx39-*) + cpu=mipstx39 + ;; + tx39el-*) + cpu=mipstx39el + ;; + x64-*) + cpu=x86_64 + ;; + xscale-* | xscalee[bl]-*) + cpu=`echo "$cpu" | sed 's/^xscale/arm/'` + ;; + + # Recognize the canonical CPU Types that limit and/or modify the + # company names they are paired with. + cr16-*) + os=${os:-elf} + ;; + crisv32-* | etraxfs*-*) + cpu=crisv32 + vendor=axis + ;; + cris-* | etrax*-*) + cpu=cris + vendor=axis + ;; + crx-*) + os=${os:-elf} + ;; + neo-tandem) + cpu=neo + vendor=tandem + ;; + nse-tandem) + cpu=nse + vendor=tandem + ;; + nsr-tandem) + cpu=nsr + vendor=tandem + ;; + nsv-tandem) + cpu=nsv + vendor=tandem + ;; + nsx-tandem) + cpu=nsx + vendor=tandem + ;; + s390-*) + cpu=s390 + vendor=ibm + ;; + s390x-*) + cpu=s390x + vendor=ibm + ;; + tile*-*) + os=${os:-linux-gnu} + ;; + *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 + # Recognize the canonical CPU types that are allowed with any + # company name. + case $cpu in + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | abacus \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \ + | alphapca5[67] | alpha64pca5[67] \ + | am33_2.0 \ + | amdgcn \ + | arc | arceb \ + | arm | arm[lb]e | arme[lb] | armv* \ + | avr | avr32 \ + | asmjs \ + | ba \ + | be32 | be64 \ + | bfin | bs2000 \ + | c[123]* | c30 | [cjt]90 | c4x \ + | c8051 | clipper | craynv | csky | cydra \ + | d10v | d30v | dlx | dsp16xx \ + | e2k | elxsi | epiphany \ + | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \ + | h8300 | h8500 \ + | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i*86 | i860 | i960 | ia16 | ia64 \ + | ip2k | iq2000 \ + | k1om \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle \ + | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \ + | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \ + | m88110 | m88k | maxq | mb | mcore | mep | metag \ + | microblaze | microblazeel \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64eb | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r6 | mipsisa32r6el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mmix \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nfp \ + | nios | nios2 | nios2eb | nios2el \ + | none | np1 | ns16k | ns32k | nvptx \ + | open8 \ + | or1k* \ + | or32 \ + | orion \ + | picochip \ + | pdp10 | pdp11 | pj | pjl | pn | power \ + | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \ + | pru \ + | pyramid \ + | riscv | riscv32 | riscv64 \ + | rl78 | romp | rs6000 | rx \ + | score \ + | sh | shl \ + | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \ + | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \ + | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \ + | spu \ + | tahoe \ + | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \ + | tron \ + | ubicom32 \ + | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \ + | vax \ + | visium \ + | w65 | wasm32 \ + | we32k \ + | x86 | x86_64 | xc16x | xgate | xps100 \ + | xstormy16 | xtensa* \ + | ymp \ + | z8k | z80) + ;; + + *) + echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2 + exit 1 + ;; + esac ;; esac # Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` +case $vendor in + digital*) + vendor=dec ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + commodore*) + vendor=cbm ;; *) ;; @@ -1355,200 +1275,246 @@ esac # Decode manufacturer-specific aliases for certain operating systems. -if [ x"$os" != x"" ] +if [ x$os != x ] then case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -auroraux) - os=-auroraux + # First match some system type aliases that might get confused + # with valid system types. + # solaris* is a basic system type, with this one exception. + auroraux) + os=auroraux ;; - -solaris1 | -solaris1.*) + bluegene*) + os=cnk + ;; + solaris1 | solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; - -solaris) - os=-solaris2 + solaris) + os=solaris2 ;; - -svr4*) - os=-sysv4 + unixware*) + os=sysv4.2uw ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) + gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; - # First accept the basic system types. + # es1800 is here to avoid being matched by es* (a different OS) + es1800*) + os=ose + ;; + # Some version numbers need modification + chorusos*) + os=chorusos + ;; + isc) + os=isc2.2 + ;; + sco6) + os=sco5v6 + ;; + sco5) + os=sco3.2v5 + ;; + sco4) + os=sco3.2v4 + ;; + sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + ;; + sco3.2v[4-9]* | sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + ;; + scout) + # Don't match below + ;; + sco*) + os=sco3.2v2 + ;; + psos*) + os=psos + ;; + # Now accept the basic system types. # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ - | -sym* | -kopensolaris* | -plan9* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* | -cloudabi* | -sortix* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \ - | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ - | -linux-newlib* | -linux-musl* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ - | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox*) + # Each alternative MUST end in a * to match a version number. + # sysv* is not here because it comes later, after sysvr4. + gnu* | bsd* | mach* | minix* | genix* | ultrix* | irix* \ + | *vms* | esix* | aix* | cnk* | sunos | sunos[34]*\ + | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ + | sym* | kopensolaris* | plan9* \ + | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ + | aos* | aros* | cloudabi* | sortix* \ + | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \ + | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \ + | knetbsd* | mirbsd* | netbsd* \ + | bitrig* | openbsd* | solidbsd* | libertybsd* \ + | ekkobsd* | kfreebsd* | freebsd* | riscix* | lynxos* \ + | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \ + | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \ + | udi* | eabi* | lites* | ieee* | go32* | aux* | hcos* \ + | chorusrdb* | cegcc* | glidix* \ + | cygwin* | msys* | pe* | moss* | proelf* | rtems* \ + | midipix* | mingw32* | mingw64* | linux-gnu* | linux-android* \ + | linux-newlib* | linux-musl* | linux-uclibc* \ + | uxpv* | beos* | mpeix* | udk* | moxiebox* \ + | interix* | uwin* | mks* | rhapsody* | darwin* \ + | openstep* | oskit* | conix* | pw32* | nonstopux* \ + | storm-chaos* | tops10* | tenex* | tops20* | its* \ + | os2* | vos* | palmos* | uclinux* | nucleus* \ + | morphos* | superux* | rtmk* | windiss* \ + | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \ + | skyos* | haiku* | rdos* | toppers* | drops* | es* \ + | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ + | midnightbsd* | amdhsa* | unleashed* | emscripten*) # Remember, each alternative MUST END IN *, to match a version number. ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) + qnx*) + case $cpu in + x86 | i*86) ;; *) - os=-nto$os + os=nto-$os ;; esac ;; - -nto-qnx*) + hiux*) + os=hiuxwe2 ;; - -nto*) + nto-qnx*) + ;; + nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + sim | xray | os68k* | v88r* \ + | windows* | osx | abug | netware* | os9* \ + | macos* | mpw* | magic* | mmixware* | mon960* | lnews*) ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` + linux-dietlibc) + os=linux-dietlibc ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) + linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` + lynx*178) + os=lynxos178 ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` + lynx*5) + os=lynxos5 ;; - -opened*) - os=-openedition + lynx*) + os=lynxos ;; - -os400*) - os=-os400 + mac*) + os=`echo "$os" | sed -e 's|mac|macos|'` ;; - -wince*) - os=-wince + opened*) + os=openedition ;; - -osfrose*) - os=-osfrose + os400*) + os=os400 ;; - -osf*) - os=-osf + sunos5*) + os=`echo "$os" | sed -e 's|sunos5|solaris2|'` ;; - -utek*) - os=-bsd + sunos6*) + os=`echo "$os" | sed -e 's|sunos6|solaris3|'` ;; - -dynix*) - os=-bsd + wince*) + os=wince ;; - -acis*) - os=-aos + utek*) + os=bsd ;; - -atheos*) - os=-atheos + dynix*) + os=bsd ;; - -syllable*) - os=-syllable + acis*) + os=aos ;; - -386bsd) - os=-bsd + atheos*) + os=atheos ;; - -ctix* | -uts*) - os=-sysv + syllable*) + os=syllable ;; - -nova*) - os=-rtmk-nova + 386bsd) + os=bsd ;; - -ns2 ) - os=-nextstep2 + ctix* | uts*) + os=sysv ;; - -nsk*) - os=-nsk + nova*) + os=rtmk-nova + ;; + ns2) + os=nextstep2 + ;; + nsk*) + os=nsk ;; # Preserve the version number of sinix5. - -sinix5.*) + sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; - -sinix*) - os=-sysv4 + sinix*) + os=sysv4 ;; - -tpf*) - os=-tpf + tpf*) + os=tpf ;; - -triton*) - os=-sysv3 + triton*) + os=sysv3 ;; - -oss*) - os=-sysv3 + oss*) + os=sysv3 ;; - -svr4) - os=-sysv4 + svr4*) + os=sysv4 ;; - -svr3) - os=-sysv3 + svr3) + os=sysv3 ;; - -sysvr4) - os=-sysv4 + sysvr4) + os=sysv4 ;; - # This must come after -sysvr4. - -sysv*) + # This must come after sysvr4. + sysv*) ;; - -ose*) - os=-ose + ose*) + os=ose ;; - -es1800*) - os=-ose + *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) + os=mint ;; - -xenix) - os=-xenix + zvmoe) + os=zvmoe ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint + dicos*) + os=dicos ;; - -aros*) - os=-aros + pikeos*) + # Until real need of OS specific support for + # particular features comes up, bare metal + # configurations are quite functional. + case $cpu in + arm*) + os=eabi + ;; + *) + os=elf + ;; + esac ;; - -zvmoe) - os=-zvmoe + nacl*) ;; - -dicos*) - os=-dicos + ios) ;; - -nacl*) + none) ;; - -ios) - ;; - -none) + *-eabi) ;; *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2 exit 1 ;; esac @@ -1564,264 +1530,265 @@ else # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. -case $basic_machine in +case $cpu-$vendor in score-*) - os=-elf + os=elf ;; spu-*) - os=-elf + os=elf ;; *-acorn) - os=-riscix1.2 + os=riscix1.2 ;; arm*-rebel) - os=-linux + os=linux ;; arm*-semi) - os=-aout + os=aout ;; c4x-* | tic4x-*) - os=-coff + os=coff ;; c8051-*) - os=-elf + os=elf + ;; + clipper-intergraph) + os=clix ;; hexagon-*) - os=-elf + os=elf ;; tic54x-*) - os=-coff + os=coff ;; tic55x-*) - os=-coff + os=coff ;; tic6x-*) - os=-coff + os=coff ;; # This must come before the *-dec entry. pdp10-*) - os=-tops20 + os=tops20 ;; pdp11-*) - os=-none + os=none ;; *-dec | vax-*) - os=-ultrix4.2 + os=ultrix4.2 ;; m68*-apollo) - os=-domain + os=domain ;; i386-sun) - os=-sunos4.0.2 + os=sunos4.0.2 ;; m68000-sun) - os=-sunos3 + os=sunos3 ;; m68*-cisco) - os=-aout + os=aout ;; mep-*) - os=-elf + os=elf ;; mips*-cisco) - os=-elf + os=elf ;; mips*-*) - os=-elf + os=elf ;; or32-*) - os=-coff + os=coff ;; *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 + os=sysv3 ;; sparc-* | *-sun) - os=-sunos4.1.1 + os=sunos4.1.1 ;; pru-*) - os=-elf + os=elf ;; *-be) - os=-beos - ;; - *-haiku) - os=-haiku + os=beos ;; *-ibm) - os=-aix + os=aix ;; *-knuth) - os=-mmixware + os=mmixware ;; *-wec) - os=-proelf + os=proelf ;; *-winbond) - os=-proelf + os=proelf ;; *-oki) - os=-proelf + os=proelf ;; *-hp) - os=-hpux + os=hpux ;; *-hitachi) - os=-hiux + os=hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv + os=sysv ;; *-cbm) - os=-amigaos + os=amigaos ;; *-dg) - os=-dgux + os=dgux ;; *-dolphin) - os=-sysv3 + os=sysv3 ;; m68k-ccur) - os=-rtu + os=rtu ;; m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs + os=luna ;; *-next) - os=-nextstep3 + os=nextstep + ;; + *-sequent) + os=ptx + ;; + *-crds) + os=unos + ;; + *-ns) + os=genix + ;; + i370-*) + os=mvs ;; *-gould) - os=-sysv + os=sysv ;; *-highlevel) - os=-bsd + os=bsd ;; *-encore) - os=-bsd + os=bsd ;; *-sgi) - os=-irix + os=irix ;; *-siemens) - os=-sysv4 + os=sysv4 ;; *-masscomp) - os=-rtu + os=rtu ;; f30[01]-fujitsu | f700-fujitsu) - os=-uxpv + os=uxpv ;; *-rom68k) - os=-coff + os=coff ;; *-*bug) - os=-coff + os=coff ;; *-apple) - os=-macos + os=macos ;; *-atari*) - os=-mint + os=mint + ;; + *-wrs) + os=vxworks ;; *) - os=-none + os=none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) +case $vendor in + unknown) case $os in - -riscix*) + riscix*) vendor=acorn ;; - -sunos*) + sunos*) vendor=sun ;; - -cnk*|-aix*) + cnk*|-aix*) vendor=ibm ;; - -beos*) + beos*) vendor=be ;; - -hpux*) + hpux*) vendor=hp ;; - -mpeix*) + mpeix*) vendor=hp ;; - -hiux*) + hiux*) vendor=hitachi ;; - -unos*) + unos*) vendor=crds ;; - -dgux*) + dgux*) vendor=dg ;; - -luna*) + luna*) vendor=omron ;; - -genix*) + genix*) vendor=ns ;; - -mvs* | -opened*) + clix*) + vendor=intergraph + ;; + mvs* | opened*) vendor=ibm ;; - -os400*) + os400*) vendor=ibm ;; - -ptx*) + ptx*) vendor=sequent ;; - -tpf*) + tpf*) vendor=ibm ;; - -vxsim* | -vxworks* | -windiss*) + vxsim* | vxworks* | windiss*) vendor=wrs ;; - -aux*) + aux*) vendor=apple ;; - -hms*) + hms*) vendor=hitachi ;; - -mpw* | -macos*) + mpw* | macos*) vendor=apple ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) vendor=atari ;; - -vos*) + vos*) vendor=stratus ;; esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac -echo $basic_machine$os +echo "$cpu-$vendor-$os" exit # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" diff --git a/configure b/configure index a26523061fd..910dc37302c 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for file 5.37. +# Generated by GNU Autoconf 2.69 for file 5.38. # # Report bugs to . # @@ -590,8 +590,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='file' PACKAGE_TARNAME='file' -PACKAGE_VERSION='5.37' -PACKAGE_STRING='file 5.37' +PACKAGE_VERSION='5.38' +PACKAGE_STRING='file 5.38' PACKAGE_BUGREPORT='christos@astron.com' PACKAGE_URL='' @@ -640,6 +640,7 @@ IS_CROSS_COMPILE_TRUE LIBOBJS HAVE_VISIBILITY CFLAG_VISIBILITY +LT_SYS_LIBRARY_PATH OTOOL64 OTOOL LIPO @@ -669,7 +670,6 @@ am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE -am__quote am__include DEPDIR OBJEXT @@ -759,7 +759,8 @@ PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR -SHELL' +SHELL +am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking @@ -767,6 +768,8 @@ enable_silent_rules enable_elf enable_elf_core enable_zlib +enable_bzlib +enable_xzlib enable_libseccomp enable_fsect_man5 enable_dependency_tracking @@ -774,6 +777,7 @@ enable_static with_pic enable_shared enable_fast_install +with_aix_soname with_gnu_ld with_sysroot enable_libtool_lock @@ -788,7 +792,8 @@ CFLAGS LDFLAGS LIBS CPPFLAGS -CPP' +CPP +LT_SYS_LIBRARY_PATH' # Initialize some variables set by options. @@ -1329,7 +1334,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures file 5.37 to adapt to many kinds of systems. +\`configure' configures file 5.38 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1399,7 +1404,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of file 5.37:";; + short | recursive ) echo "Configuration of file 5.38:";; esac cat <<\_ACEOF @@ -1412,6 +1417,9 @@ Optional Features: --disable-elf disable builtin ELF support --disable-elf-core disable ELF core file support --disable-zlib disable zlib compression support [default=auto] + --disable-bzlib disable bz2lib compression support [default=auto] + --disable-xzlib disable liblzma/xz compression support + [default=auto] --disable-libseccomp disable libseccomp sandboxing [default=auto] --enable-fsect-man5 enable file formats in man section 5 --enable-dependency-tracking @@ -1431,9 +1439,12 @@ Optional Packages: --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] + --with-aix-soname=aix|svr4|both + shared library versioning (aka "SONAME") variant to + provide on AIX, [default=aix]. --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-sysroot=DIR Search for dependent libraries within DIR - (or the compiler's sysroot if not specified). + --with-sysroot[=DIR] Search for dependent libraries within DIR (or the + compiler's sysroot if not specified). Some influential environment variables: CC C compiler command @@ -1444,6 +1455,8 @@ Some influential environment variables: CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor + LT_SYS_LIBRARY_PATH + User-defined run-time library search path. Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. @@ -1511,7 +1524,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -file configure 5.37 +file configure 5.38 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2167,7 +2180,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by file $as_me 5.37, which was +It was created by file $as_me 5.38, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2518,7 +2531,7 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu -am__api_version='1.15' +am__api_version='1.16' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do @@ -3033,7 +3046,7 @@ fi # Define the identity of the package. PACKAGE='file' - VERSION='5.37' + VERSION='5.38' cat >>confdefs.h <<_ACEOF @@ -3063,8 +3076,8 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: -# -# +# +# mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The @@ -3115,7 +3128,7 @@ END Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation -that behaves properly: . +that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM @@ -3232,6 +3245,26 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_zlib" >&5 $as_echo "$enable_zlib" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for bzlib support" >&5 +$as_echo_n "checking for bzlib support... " >&6; } +# Check whether --enable-bzlib was given. +if test "${enable_bzlib+set}" = set; then : + enableval=$enable_bzlib; +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_bzlib" >&5 +$as_echo "$enable_bzlib" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for xzlib support" >&5 +$as_echo_n "checking for xzlib support... " >&6; } +# Check whether --enable-xzlib was given. +if test "${enable_xzlib+set}" = set; then : + enableval=$enable_xzlib; +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_xzlib" >&5 +$as_echo "$enable_xzlib" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libseccomp support" >&5 $as_echo_n "checking for libseccomp support... " >&6; } # Check whether --enable-libseccomp was given. @@ -3372,45 +3405,45 @@ DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" - -am_make=${MAKE-make} -cat > confinc << 'END' +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 +$as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; } +cat > confinc.mk << 'END' am__doit: - @echo this is the am__doit target + @echo this is the am__doit target >confinc.out .PHONY: am__doit END -# If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -$as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD +# BSD make does it like this. +echo '.include "confinc.mk" # ignored' > confmf.BSD +# Other make implementations (GNU, Solaris 10, AIX) do it like this. +echo 'include confinc.mk # ignored' > confmf.GNU +_am_result=no +for s in GNU BSD; do + { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 + (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + case $?:`cat confinc.out 2>/dev/null` in #( + '0:this is the am__doit target') : + case $s in #( + BSD) : + am__include='.include' am__quote='"' ;; #( + *) : + am__include='include' am__quote='' ;; +esac ;; #( + *) : ;; - esac -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -$as_echo "$_am_result" >&6; } -rm -f confinc confmf +esac + if test "$am__include" != "#"; then + _am_result="yes ($s style)" + break + fi +done +rm -f confinc.* confmf.* +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 +$as_echo "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : @@ -5403,8 +5436,8 @@ esac -macro_version='2.4.2' -macro_revision='1.3337' +macro_version='2.4.6' +macro_revision='2.4.6' @@ -5418,7 +5451,7 @@ macro_revision='1.3337' -ltmain="$ac_aux_dir/ltmain.sh" +ltmain=$ac_aux_dir/ltmain.sh # Backslashify metacharacters that are still active within # double-quoted strings. @@ -5467,7 +5500,7 @@ func_echo_all () $ECHO "" } -case "$ECHO" in +case $ECHO in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 @@ -5660,19 +5693,19 @@ test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld -if test "$GCC" = yes; then +if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw + # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; @@ -5686,7 +5719,7 @@ $as_echo_n "checking for ld used by $CC... " >&6; } while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done - test -z "$LD" && LD="$ac_prog" + test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. @@ -5697,7 +5730,7 @@ $as_echo_n "checking for ld used by $CC... " >&6; } with_gnu_ld=unknown ;; esac -elif test "$with_gnu_ld" = yes; then +elif test yes = "$with_gnu_ld"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else @@ -5708,32 +5741,32 @@ if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" + lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } @@ -5776,33 +5809,38 @@ if ${lt_cv_path_NM+:} false; then : else if test -n "$NM"; then # Let the user override the test. - lt_cv_path_NM="$NM" + lt_cv_path_NM=$NM else - lt_nm_to_check="${ac_tool_prefix}nm" + lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" - break + break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" - break + break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but @@ -5813,15 +5851,15 @@ else esac fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : @@ -5927,9 +5965,9 @@ esac fi fi - case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) - DUMPBIN="$DUMPBIN -symbols" + DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: @@ -5937,8 +5975,8 @@ fi esac fi - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" + if test : != "$DUMPBIN"; then + NM=$DUMPBIN fi fi test -z "$NM" && NM=nm @@ -5978,7 +6016,7 @@ if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 - teststring="ABCD" + teststring=ABCD case $build_os in msdosdjgpp*) @@ -6018,7 +6056,7 @@ else lt_cv_sys_max_cmd_len=8192; ;; - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` @@ -6068,22 +6106,23 @@ else ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do + for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. - while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough + test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring @@ -6101,7 +6140,7 @@ else fi -if test -n $lt_cv_sys_max_cmd_len ; then +if test -n "$lt_cv_sys_max_cmd_len"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else @@ -6119,30 +6158,6 @@ max_cmd_len=$lt_cv_sys_max_cmd_len : ${MV="mv -f"} : ${RM="rm -f"} -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 -$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,b/c, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 -$as_echo "$xsi_shell" >&6; } - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 -$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } -lt_shell_append=no -( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 -$as_echo "$lt_shell_append" >&6; } - - if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else @@ -6265,13 +6280,13 @@ esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) - if test "$GCC" != yes; then + if test yes != "$GCC"; then reload_cmds=false fi ;; darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + if test yes = "$GCC"; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi @@ -6399,13 +6414,13 @@ lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. +# 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) @@ -6432,8 +6447,7 @@ mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. - # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. - if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then + if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else @@ -6469,10 +6483,6 @@ freebsd* | dragonfly*) fi ;; -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - haiku*) lt_cv_deplibs_check_method=pass_all ;; @@ -6511,7 +6521,7 @@ irix5* | irix6* | nonstopux*) ;; # This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; @@ -6533,8 +6543,8 @@ newos6*) lt_cv_deplibs_check_method=pass_all ;; -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' @@ -6587,6 +6597,9 @@ sysv4 | sysv4.3*) tpf*) lt_cv_deplibs_check_method=pass_all ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; esac fi @@ -6744,8 +6757,8 @@ else case $host_os in cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh - # decide which to use based on capabilities of $DLLTOOL + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib @@ -6757,7 +6770,7 @@ cygwin* | mingw* | pw32* | cegcc*) ;; *) # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd="$ECHO" + lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac @@ -6911,7 +6924,7 @@ if ac_fn_c_try_compile "$LINENO"; then : ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } - if test "$ac_status" -eq 0; then + if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 @@ -6919,7 +6932,7 @@ if ac_fn_c_try_compile "$LINENO"; then : ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } - if test "$ac_status" -ne 0; then + if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi @@ -6932,7 +6945,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } -if test "x$lt_cv_ar_at_file" = xno; then +if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file @@ -7149,7 +7162,7 @@ old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in - openbsd*) + bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) @@ -7239,7 +7252,7 @@ cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then symcode='[ABCDEGRST]' fi ;; @@ -7272,14 +7285,44 @@ case `$NM -V 2>&1` in symcode='[ABCDGIRSTW]' ;; esac +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Gets list of data symbols to import. + lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + # Adjust the below global symbol transforms to fixup imported variables. + lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" + lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +else + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= +fi + # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" +lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +$lt_cdecl_hook\ +" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +$lt_c_name_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" + +# Transform an extracted symbol line into symbol name with lib prefix and +# symbol address. +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +$lt_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= @@ -7297,21 +7340,24 @@ for ac_symprfx in "" "_"; do # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. + # Fake it for dumpbin and say T for any non-static function, + # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" @@ -7359,11 +7405,11 @@ _LT_EOF if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST -#elif defined(__osf__) +#elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else @@ -7389,7 +7435,7 @@ lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; @@ -7409,13 +7455,13 @@ _LT_EOF mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS - LIBS="conftstm.$ac_objext" + LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext}; then + test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS @@ -7436,7 +7482,7 @@ _LT_EOF rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then + if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= @@ -7478,6 +7524,16 @@ fi + + + + + + + + + + @@ -7501,9 +7557,9 @@ fi lt_sysroot= -case ${with_sysroot} in #( +case $with_sysroot in #( yes) - if test "$GCC" = yes; then + if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( @@ -7513,8 +7569,8 @@ case ${with_sysroot} in #( no|'') ;; #( *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 -$as_echo "${with_sysroot}" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 +$as_echo "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac @@ -7526,18 +7582,99 @@ $as_echo "${lt_sysroot:-no}" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 +$as_echo_n "checking for a working dd... " >&6; } +if ${ac_cv_path_lt_DD+:} false; then : + $as_echo_n "(cached) " >&6 +else + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +if test -z "$lt_DD"; then + ac_path_lt_DD_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in dd; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_lt_DD" || continue +if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi + $ac_path_lt_DD_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_lt_DD"; then + : + fi +else + ac_cv_path_lt_DD=$lt_DD +fi + +rm -f conftest.i conftest2.i conftest.out +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 +$as_echo "$ac_cv_path_lt_DD" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 +$as_echo_n "checking how to truncate binary pipes... " >&6; } +if ${lt_cv_truncate_bin+:} false; then : + $as_echo_n "(cached) " >&6 +else + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 +$as_echo "$lt_cv_truncate_bin" >&6; } + + + + + + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes +test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) - # Find out which ABI we are using. + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 @@ -7546,24 +7683,25 @@ ia64-*-hpux*) test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) - HPUX_IA64_MODE="32" + HPUX_IA64_MODE=32 ;; *ELF-64*) - HPUX_IA64_MODE="64" + HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) - # Find out which ABI we are using. + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - if test "$lt_cv_prog_gnu_ld" = yes; then + if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" @@ -7592,9 +7730,50 @@ ia64-*-hpux*) rm -rf conftest* ;; -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + emul=elf + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # not appear in the list. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 @@ -7608,9 +7787,19 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) - LD="${LD-ld} -m elf_i386" + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac ;; - ppc64-*linux*|powerpc64-*linux*) + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) @@ -7629,7 +7818,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; - ppc*-*linux*|powerpc*-*linux*) + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) @@ -7647,7 +7839,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" + SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } @@ -7687,13 +7879,14 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } - if test x"$lt_cv_cc_needs_belf" != x"yes"; then + if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" + CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) - # Find out which ABI we are using. + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 @@ -7705,7 +7898,7 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; } case $lt_cv_prog_gnu_ld in yes*) case $host in - i?86-*-solaris*) + i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) @@ -7714,7 +7907,7 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; } esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then - LD="${LD-ld}_sol2" + LD=${LD-ld}_sol2 fi ;; *) @@ -7730,7 +7923,7 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; } ;; esac -need_locks="$enable_libtool_lock" +need_locks=$enable_libtool_lock if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. @@ -7841,7 +8034,7 @@ else fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } -if test "x$lt_cv_path_mainfest_tool" != xyes; then +if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi @@ -8344,7 +8537,7 @@ if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then + if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the @@ -8362,7 +8555,7 @@ else cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. - elif test -f libconftest.dylib && test $_lt_result -eq 0; then + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 @@ -8401,7 +8594,7 @@ else fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" + LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 @@ -8430,7 +8623,7 @@ _LT_EOF _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 - elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&5 @@ -8443,32 +8636,32 @@ fi $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[012]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + 10.[012][,.]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then + if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi - if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= @@ -8476,6 +8669,41 @@ $as_echo "$lt_cv_ld_force_load" >&6; } ;; esac +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default @@ -8503,14 +8731,14 @@ if test "${enable_static+set}" = set; then : *) enable_static=no # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs ;; esac else @@ -8532,23 +8760,21 @@ if test "${with_pic+set}" = set; then : *) pic_mode=default # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs ;; esac else - pic_mode=default + pic_mode=yes fi -test -z "$pic_mode" && pic_mode=yes - @@ -8571,14 +8797,14 @@ if test "${enable_shared+set}" = set; then : *) enable_shared=no # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs ;; esac else @@ -8604,14 +8830,14 @@ if test "${enable_fast_install+set}" = set; then : *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs ;; esac else @@ -8625,11 +8851,63 @@ fi + shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[5-9]*,yes) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 +$as_echo_n "checking which variant of shared library versioning to provide... " >&6; } + +# Check whether --with-aix-soname was given. +if test "${with_aix_soname+set}" = set; then : + withval=$with_aix_soname; case $withval in + aix|svr4|both) + ;; + *) + as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname +else + if ${lt_cv_with_aix_soname+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_with_aix_soname=aix +fi + + with_aix_soname=$lt_cv_with_aix_soname +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 +$as_echo "$with_aix_soname" >&6; } + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac + + + + + + + # This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" +LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' @@ -8678,7 +8956,7 @@ test -z "$LN_S" && LN_S="ln -s" -if test -n "${ZSH_VERSION+set}" ; then +if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi @@ -8717,7 +8995,7 @@ aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then + if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi @@ -8728,14 +9006,14 @@ esac ofile=libtool can_build_shared=yes -# All known linkers require a `.a' archive for static linking (except MSVC, +# All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a -with_gnu_ld="$lt_cv_prog_gnu_ld" +with_gnu_ld=$lt_cv_prog_gnu_ld -old_CC="$CC" -old_CFLAGS="$CFLAGS" +old_CC=$CC +old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc @@ -8744,15 +9022,8 @@ test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +func_cc_basename $compiler +cc_basename=$func_cc_basename_result # Only perform the check for file, if the check method requires it @@ -8767,22 +9038,22 @@ if ${lt_cv_path_MAGIC_CMD+:} false; then : else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/${ac_tool_prefix}file; then - lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -f "$ac_dir/${ac_tool_prefix}file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : @@ -8805,13 +9076,13 @@ _LT_EOF break fi done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } @@ -8833,22 +9104,22 @@ if ${lt_cv_path_MAGIC_CMD+:} false; then : else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/file; then - lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -f "$ac_dir/file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : @@ -8871,13 +9142,13 @@ _LT_EOF break fi done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } @@ -8898,7 +9169,7 @@ esac # Use C for the default configuration in the libtool script -lt_save_CC="$CC" +lt_save_CC=$CC ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -8960,7 +9231,7 @@ if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= -if test "$GCC" = yes; then +if test yes = "$GCC"; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; @@ -8976,7 +9247,7 @@ else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" + lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins @@ -9006,7 +9277,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then +if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : @@ -9024,17 +9295,18 @@ lt_prog_compiler_pic= lt_prog_compiler_static= - if test "$GCC" = yes; then + if test yes = "$GCC"; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi + lt_prog_compiler_pic='-fPIC' ;; amigaos*) @@ -9045,8 +9317,8 @@ lt_prog_compiler_static= ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac @@ -9062,6 +9334,11 @@ lt_prog_compiler_static= # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac ;; darwin* | rhapsody*) @@ -9132,7 +9409,7 @@ lt_prog_compiler_static= case $host_os in aix*) lt_prog_compiler_wl='-Wl,' - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else @@ -9140,10 +9417,29 @@ lt_prog_compiler_static= fi ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac ;; hpux9* | hpux10* | hpux11*) @@ -9159,7 +9455,7 @@ lt_prog_compiler_static= ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='${wl}-a ${wl}archive' + lt_prog_compiler_static='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) @@ -9168,9 +9464,9 @@ lt_prog_compiler_static= lt_prog_compiler_static='-non_shared' ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. + # old Intel for x86_64, which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' @@ -9195,6 +9491,12 @@ lt_prog_compiler_static= lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) @@ -9292,7 +9594,7 @@ lt_prog_compiler_static= ;; sysv4*MP*) - if test -d /usr/nec ;then + if test -d /usr/nec; then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi @@ -9321,7 +9623,7 @@ lt_prog_compiler_static= fi case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: + # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; @@ -9353,7 +9655,7 @@ else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins @@ -9383,7 +9685,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } -if test x"$lt_cv_prog_compiler_pic_works" = xyes; then +if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; @@ -9415,7 +9717,7 @@ if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no - save_LDFLAGS="$LDFLAGS" + save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then @@ -9434,13 +9736,13 @@ else fi fi $RM -r conftest* - LDFLAGS="$save_LDFLAGS" + LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } -if test x"$lt_cv_prog_compiler_static_works" = xyes; then +if test yes = "$lt_cv_prog_compiler_static_works"; then : else lt_prog_compiler_static= @@ -9560,8 +9862,8 @@ $as_echo "$lt_cv_prog_compiler_c_o" >&6; } -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then +hard_links=nottested +if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } @@ -9573,9 +9875,9 @@ $as_echo_n "checking if we can lock with hard links... " >&6; } ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } - if test "$hard_links" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + if test no = "$hard_links"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else @@ -9618,9 +9920,9 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if @@ -9635,7 +9937,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. - if test "$GCC" != yes; then + if test yes != "$GCC"; then with_gnu_ld=no fi ;; @@ -9643,7 +9945,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; - openbsd*) + openbsd* | bitrig*) with_gnu_ld=no ;; esac @@ -9653,7 +9955,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no - if test "$with_gnu_ld" = yes; then + if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility @@ -9675,24 +9977,24 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie esac fi - if test "$lt_use_gnu_ld_interface" = yes; then + if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' + wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + export_dynamic_flag_spec='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no - case `$LD -v 2>&1` in + case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... @@ -9705,7 +10007,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then + if test ia64 != "$host_cpu"; then ld_shlibs=no cat <<_LT_EOF 1>&2 @@ -9724,7 +10026,7 @@ _LT_EOF case $host_cpu in powerpc) # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) @@ -9740,7 +10042,7 @@ _LT_EOF allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs=no fi @@ -9750,7 +10052,7 @@ _LT_EOF # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' - export_dynamic_flag_spec='${wl}--export-all-symbols' + export_dynamic_flag_spec='$wl--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes @@ -9758,61 +10060,89 @@ _LT_EOF exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' link_all_deplibs=yes ;; + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes=yes + ;; + interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no - if test "$host_os" = linux-dietlibc; then + if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no + && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; @@ -9823,42 +10153,47 @@ _LT_EOF lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac - archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then + if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in + tcc*) + export_dynamic_flag_spec='-rdynamic' + ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then + if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac @@ -9872,8 +10207,8 @@ _LT_EOF archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; @@ -9891,8 +10226,8 @@ _LT_EOF _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi @@ -9904,7 +10239,7 @@ _LT_EOF ld_shlibs=no cat <<_LT_EOF 1>&2 -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify @@ -9919,9 +10254,9 @@ _LT_EOF # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi @@ -9938,15 +10273,15 @@ _LT_EOF *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac - if test "$ld_shlibs" = no; then + if test no = "$ld_shlibs"; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= @@ -9962,7 +10297,7 @@ _LT_EOF # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported @@ -9970,34 +10305,57 @@ _LT_EOF ;; aix[4-9]*) - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' - no_entry_flag="" + no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global - # defined symbols, whereas GNU nm marks them as "W". + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else - export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi ;; esac @@ -10016,13 +10374,21 @@ _LT_EOF hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes - file_list_spec='${wl}-f,' + file_list_spec='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + hardcode_direct=no + hardcode_direct_absolute=no + ;; + esac - if test "$GCC" = yes; then + if test yes = "$GCC"; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` + collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then @@ -10041,35 +10407,42 @@ _LT_EOF ;; esac shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' else # not using gcc - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' else - shared_flag='${wl}-bM:SRE' + shared_flag='$wl-bM:SRE' fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' fi fi - export_dynamic_flag_spec='${wl}-bexpall' + export_dynamic_flag_spec='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes - if test "$aix_use_runtimelinking" = yes; then + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. - if test "${lt_cv_aix_libpath+set}" = set; then + if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : @@ -10104,7 +10477,7 @@ fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_="/usr/lib:/lib" + lt_cv_aix_libpath_=/usr/lib:/lib fi fi @@ -10112,17 +10485,17 @@ fi aix_libpath=$lt_cv_aix_libpath_ fi - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + if test ia64 = "$host_cpu"; then + hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. - if test "${lt_cv_aix_libpath+set}" = set; then + if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : @@ -10157,7 +10530,7 @@ fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_="/usr/lib:/lib" + lt_cv_aix_libpath_=/usr/lib:/lib fi fi @@ -10165,21 +10538,33 @@ fi aix_libpath=$lt_cv_aix_libpath_ fi - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. - no_undefined_flag=' ${wl}-bernotok' - allow_undefined_flag=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then + no_undefined_flag=' $wl-bernotok' + allow_undefined_flag=' $wl-berok' + if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. - whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' fi fi ;; @@ -10188,7 +10573,7 @@ fi case $host_cpu in powerpc) # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) @@ -10218,16 +10603,17 @@ fi # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" + shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes @@ -10236,18 +10622,18 @@ fi # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' ;; *) # Assume MSVC wrapper @@ -10256,7 +10642,7 @@ fi # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" + shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. @@ -10275,24 +10661,24 @@ fi hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported - if test "$lt_cv_ld_force_load" = "yes"; then - whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + if test yes = "$lt_cv_ld_force_load"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes - allow_undefined_flag="$_lt_dar_allow_undefined" + allow_undefined_flag=$_lt_dar_allow_undefined case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; + ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac - if test "$_lt_dar_can_shared" = "yes"; then + if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all - archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" else ld_shlibs=no @@ -10334,33 +10720,33 @@ fi ;; hpux9*) - if test "$GCC" = yes; then - archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + if test yes = "$GCC"; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else - archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes - export_dynamic_flag_spec='${wl}-E' + export_dynamic_flag_spec='$wl-E' ;; hpux10*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + if test yes,no = "$GCC,$with_gnu_ld"; then + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' + export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes @@ -10368,25 +10754,25 @@ fi ;; hpux11*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then + if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) - archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) - archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) @@ -10398,7 +10784,7 @@ if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no - save_LDFLAGS="$LDFLAGS" + save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then @@ -10417,14 +10803,14 @@ else fi fi $RM -r conftest* - LDFLAGS="$save_LDFLAGS" + LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } -if test x"$lt_cv_prog_compiler__b" = xyes; then - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +if test yes = "$lt_cv_prog_compiler__b"; then + archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi @@ -10432,8 +10818,8 @@ fi ;; esac fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: case $host_cpu in @@ -10444,7 +10830,7 @@ fi *) hardcode_direct=yes hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' + export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. @@ -10455,8 +10841,8 @@ fi ;; irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + if test yes = "$GCC"; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. @@ -10466,8 +10852,8 @@ $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " > if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } @@ -10479,24 +10865,34 @@ else fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" + LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } - if test "$lt_cv_irix_exported_symbol" = yes; then - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + if test yes = "$lt_cv_irix_exported_symbol"; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; + linux*) + case $cc_basename in + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + ld_shlibs=yes + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out @@ -10511,7 +10907,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; @@ -10519,27 +10915,19 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } *nto* | *qnx*) ;; - openbsd*) + openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' fi else ld_shlibs=no @@ -10550,33 +10938,53 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported - archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes=yes ;; osf3*) - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' else allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' @@ -10587,24 +10995,24 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } solaris*) no_undefined_flag=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + if test yes = "$GCC"; then + wlarc='$wl' + archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) - wlarc='${wl}' - archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + wlarc='$wl' + archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi @@ -10614,11 +11022,11 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', + # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + if test yes = "$GCC"; then + whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi @@ -10628,10 +11036,10 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } ;; sunos4*) - if test "x$host_vendor" = xsequent; then + if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. - archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi @@ -10680,43 +11088,43 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag='${wl}-z,text' + no_undefined_flag='$wl-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not + # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. - no_undefined_flag='${wl}-z,text' - allow_undefined_flag='${wl}-z,nodefs' + no_undefined_flag='$wl-z,text' + allow_undefined_flag='$wl-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_flag_spec='$wl-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes - export_dynamic_flag_spec='${wl}-Bexport' + export_dynamic_flag_spec='$wl-Bexport' runpath_var='LD_RUN_PATH' - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; @@ -10731,10 +11139,10 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } ;; esac - if test x$host_vendor = xsni; then + if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - export_dynamic_flag_spec='${wl}-Blargedynsym' + export_dynamic_flag_spec='$wl-Blargedynsym' ;; esac fi @@ -10742,7 +11150,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } -test "$ld_shlibs" = no && can_build_shared=no +test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld @@ -10768,7 +11176,7 @@ x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes - if test "$enable_shared" = yes && test "$GCC" = yes; then + if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. @@ -10983,14 +11391,14 @@ esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } -if test "$GCC" = yes; then +if test yes = "$GCC"; then case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in - mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; - *) lt_sed_strip_eq="s,=/,/,g" ;; + mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in @@ -11006,28 +11414,35 @@ if test "$GCC" = yes; then ;; esac # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. + # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; + lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } @@ -11041,7 +11456,7 @@ BEGIN {RS=" "; FS="/|\n";} { # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ - $SED 's,/\([A-Za-z]:\),\1,g'` ;; + $SED 's|/\([A-Za-z]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else @@ -11050,7 +11465,7 @@ fi library_names_spec= libname_spec='lib$name' soname_spec= -shrext_cmds=".so" +shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= @@ -11067,14 +11482,16 @@ hardcode_into_libs=no # flags to be left without arguments need_version=unknown + + case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' + soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) @@ -11082,41 +11499,91 @@ aix[4-9]*) need_lib_prefix=no need_version=no hardcode_into_libs=yes - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a(lib.so.V)' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac shlibpath_var=LIBPATH fi ;; @@ -11126,18 +11593,18 @@ amigaos*) powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) - library_names_spec='${libname}${shared_ext}' + library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; @@ -11145,8 +11612,8 @@ beos*) bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" @@ -11158,7 +11625,7 @@ bsdi[45]*) cygwin* | mingw* | pw32* | cegcc*) version_type=windows - shrext_cmds=".dll" + shrext_cmds=.dll need_version=no need_lib_prefix=no @@ -11167,8 +11634,8 @@ cygwin* | mingw* | pw32* | cegcc*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ @@ -11184,17 +11651,17 @@ cygwin* | mingw* | pw32* | cegcc*) case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' @@ -11203,8 +11670,8 @@ cygwin* | mingw* | pw32* | cegcc*) *,cl*) # Native MSVC libname_spec='$name' - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - library_names_spec='${libname}.dll.lib' + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' case $build_os in mingw*) @@ -11231,7 +11698,7 @@ cygwin* | mingw* | pw32* | cegcc*) sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) - sys_lib_search_path_spec="$LIB" + sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` @@ -11244,8 +11711,8 @@ cygwin* | mingw* | pw32* | cegcc*) esac # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' @@ -11258,7 +11725,7 @@ cygwin* | mingw* | pw32* | cegcc*) *) # Assume MSVC wrapper - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac @@ -11271,8 +11738,8 @@ darwin* | rhapsody*) version_type=darwin need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' @@ -11285,8 +11752,8 @@ dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; @@ -11304,12 +11771,13 @@ freebsd* | dragonfly*) version_type=freebsd-$objformat case $version_type in freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac @@ -11334,26 +11802,15 @@ freebsd* | dragonfly*) esac ;; -gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=yes + shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; @@ -11371,14 +11828,15 @@ hpux9* | hpux10* | hpux11*) dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' @@ -11386,8 +11844,8 @@ hpux9* | hpux10* | hpux11*) dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; @@ -11396,8 +11854,8 @@ hpux9* | hpux10* | hpux11*) dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... @@ -11410,8 +11868,8 @@ interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no @@ -11422,7 +11880,7 @@ irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) - if test "$lt_cv_prog_gnu_ld" = yes; then + if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix @@ -11430,8 +11888,8 @@ irix5* | irix6* | nonstopux*) esac need_lib_prefix=no need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= @@ -11450,8 +11908,8 @@ irix5* | irix6* | nonstopux*) esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; @@ -11460,13 +11918,33 @@ linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + hardcode_libdir_flag_spec='-L$libdir' + ;; + # This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no @@ -11510,7 +11988,12 @@ fi # before this can be enabled. hardcode_into_libs=yes - # Append ld.so.conf contents to the search path + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" @@ -11530,12 +12013,12 @@ netbsd*) need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH @@ -11545,7 +12028,7 @@ netbsd*) newsos6) version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; @@ -11554,58 +12037,68 @@ newsos6) version_type=qnx need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; -openbsd*) +openbsd* | bitrig*) version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" + sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi + shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' - shrext_cmds=".dll" + version_type=windows + shrext_cmds=.dll + need_version=no need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) @@ -11616,8 +12109,8 @@ solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes @@ -11627,11 +12120,11 @@ solaris*) sunos4*) version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then + if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes @@ -11639,8 +12132,8 @@ sunos4*) sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) @@ -11661,24 +12154,24 @@ sysv4 | sysv4.3*) ;; sysv4*MP*) - if test -d /usr/nec ;then + if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf + version_type=sco need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then + if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' @@ -11696,7 +12189,7 @@ tpf*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes @@ -11704,8 +12197,8 @@ tpf*) uts4*) version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; @@ -11715,20 +12208,35 @@ uts4*) esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no +test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then +if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + + + + + + @@ -11825,15 +12333,15 @@ $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || - test "X$hardcode_automatic" = "Xyes" ; then + test yes = "$hardcode_automatic"; then # We can hardcode non-existent directories. - if test "$hardcode_direct" != no && + if test no != "$hardcode_direct" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && - test "$hardcode_minus_L" != no; then + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && + test no != "$hardcode_minus_L"; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else @@ -11848,12 +12356,12 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } -if test "$hardcode_action" = relink || - test "$inherit_rpath" = yes; then +if test relink = "$hardcode_action" || + test yes = "$inherit_rpath"; then # Fast installation is not supported enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi @@ -11863,7 +12371,7 @@ fi - if test "x$enable_dlopen" != xyes; then + if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown @@ -11873,23 +12381,23 @@ else case $host_os in beos*) - lt_cv_dlopen="load_add_on" + lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) - lt_cv_dlopen="dlopen" + lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) - # if libdl is installed we need to link against it + # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : @@ -11927,10 +12435,10 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else - lt_cv_dlopen="dyld" + lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes @@ -11938,10 +12446,18 @@ fi ;; + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : - lt_cv_dlopen="shl_load" + lt_cv_dlopen=shl_load else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } @@ -11980,11 +12496,11 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" + lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" + lt_cv_dlopen=dlopen else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } @@ -12023,7 +12539,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } @@ -12062,7 +12578,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } @@ -12101,7 +12617,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" + lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi @@ -12122,21 +12638,21 @@ fi ;; esac - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else + if test no = "$lt_cv_dlopen"; then enable_dlopen=no + else + enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - save_LDFLAGS="$LDFLAGS" + save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - save_LIBS="$LIBS" + save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 @@ -12144,7 +12660,7 @@ $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then : + if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 @@ -12191,9 +12707,9 @@ else # endif #endif -/* When -fvisbility=hidden is used, assume the code has been annotated +/* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif @@ -12223,7 +12739,7 @@ _LT_EOF (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in @@ -12243,14 +12759,14 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } - if test "x$lt_cv_dlopen_self" = xyes; then + if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then : + if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 @@ -12297,9 +12813,9 @@ else # endif #endif -/* When -fvisbility=hidden is used, assume the code has been annotated +/* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif @@ -12329,7 +12845,7 @@ _LT_EOF (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in @@ -12350,9 +12866,9 @@ fi $as_echo "$lt_cv_dlopen_self_static" >&6; } fi - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS ;; esac @@ -12396,7 +12912,7 @@ else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) - if test -n "$STRIP" ; then + if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 @@ -12424,7 +12940,7 @@ fi - # Report which library types will actually be built + # Report what library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 @@ -12432,13 +12948,13 @@ $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } - test "$can_build_shared" = "no" && enable_shared=no + test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) - test "$enable_shared" = yes && enable_static=no + test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' @@ -12446,8 +12962,12 @@ $as_echo_n "checking whether to build shared libraries... " >&6; } ;; aix[4-9]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac fi ;; esac @@ -12457,7 +12977,7 @@ $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes + test yes = "$enable_shared" || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } @@ -12471,7 +12991,7 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -CC="$lt_save_CC" +CC=$lt_save_CC @@ -12502,13 +13022,12 @@ CC="$lt_save_CC" if test -n "$GCC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5 $as_echo_n "checking whether the -Werror option is usable... " >&6; } - if ${gl_cv_cc_vis_werror+:} false; then : +if ${gl_cv_cc_vis_werror+:} false; then : $as_echo_n "(cached) " >&6 else - - gl_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -Werror" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + gl_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -12525,29 +13044,28 @@ else gl_cv_cc_vis_werror=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$gl_save_CFLAGS" -fi + CFLAGS="$gl_save_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5 $as_echo "$gl_cv_cc_vis_werror" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5 $as_echo_n "checking for simple visibility declarations... " >&6; } - if ${gl_cv_cc_visibility+:} false; then : +if ${gl_cv_cc_visibility+:} false; then : $as_echo_n "(cached) " >&6 else - - gl_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -fvisibility=hidden" - if test $gl_cv_cc_vis_werror = yes; then - CFLAGS="$CFLAGS -Werror" - fi - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + gl_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fvisibility=hidden" + if test $gl_cv_cc_vis_werror = yes; then + CFLAGS="$CFLAGS -Werror" + fi + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern __attribute__((__visibility__("hidden"))) int hiddenvar; - extern __attribute__((__visibility__("default"))) int exportedvar; - extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); - extern __attribute__((__visibility__("default"))) int exportedfunc (void); - void dummyfunc (void) {} + extern __attribute__((__visibility__("default"))) int exportedvar; + extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); + extern __attribute__((__visibility__("default"))) int exportedfunc (void); + void dummyfunc (void) {} int main () @@ -12563,10 +13081,10 @@ else gl_cv_cc_visibility=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$gl_save_CFLAGS" -fi + CFLAGS="$gl_save_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5 $as_echo "$gl_cv_cc_visibility" >&6; } if test $gl_cv_cc_visibility = yes; then CFLAG_VISIBILITY="-fvisibility=hidden" @@ -12849,6 +13367,34 @@ fi done +fi +if test "$enable_bzlib" != "no"; then + for ac_header in bzlib.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "bzlib.h" "ac_cv_header_bzlib_h" "$ac_includes_default" +if test "x$ac_cv_header_bzlib_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_BZLIB_H 1 +_ACEOF + +fi + +done + +fi +if test "$enable_xzlib" != "no"; then + for ac_header in lzma.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "lzma.h" "ac_cv_header_lzma_h" "$ac_includes_default" +if test "x$ac_cv_header_lzma_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LZMA_H 1 +_ACEOF + +fi + +done + fi ac_fn_c_check_type "$LINENO" "sig_t" "ac_cv_type_sig_t" "#include " @@ -12859,87 +13405,6 @@ $as_echo "#define HAVE_SIG_T 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 -$as_echo_n "checking for an ANSI C-conforming const... " >&6; } -if ${ac_cv_c_const+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - -#ifndef __cplusplus - /* Ultrix mips cc rejects this sort of thing. */ - typedef int charset[2]; - const charset cs = { 0, 0 }; - /* SunOS 4.1.1 cc rejects this. */ - char const *const *pcpcc; - char **ppc; - /* NEC SVR4.0.2 mips cc rejects this. */ - struct point {int x, y;}; - static struct point const zero = {0,0}; - /* AIX XL C 1.02.0.0 rejects this. - It does not let you subtract one const X* pointer from another in - an arm of an if-expression whose if-part is not a constant - expression */ - const char *g = "string"; - pcpcc = &g + (g ? g-g : 0); - /* HPUX 7.0 cc rejects these. */ - ++pcpcc; - ppc = (char**) pcpcc; - pcpcc = (char const *const *) ppc; - { /* SCO 3.2v4 cc rejects this sort of thing. */ - char tx; - char *t = &tx; - char const *s = 0 ? (char *) 0 : (char const *) 0; - - *t++ = 0; - if (s) return 0; - } - { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ - int x[] = {25, 17}; - const int *foo = &x[0]; - ++foo; - } - { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ - typedef const int *iptr; - iptr p = 0; - ++p; - } - { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying - "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ - struct s { int j; const int *ap[3]; } bx; - struct s *b = &bx; b->j = 5; - } - { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; - if (!foo) return 0; - } - return !cs[0] && !zero.x; -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_const=yes -else - ac_cv_c_const=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 -$as_echo "$ac_cv_c_const" >&6; } -if test $ac_cv_c_const = no; then - -$as_echo "#define const /**/" >>confdefs.h - -fi - ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" if test "x$ac_cv_type_off_t" = xyes; then : @@ -14470,6 +14935,100 @@ _ACEOF fi +fi +if test "$enable_bzlib" != "no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BZ2_bzCompressInit in -lbz2" >&5 +$as_echo_n "checking for BZ2_bzCompressInit in -lbz2... " >&6; } +if ${ac_cv_lib_bz2_BZ2_bzCompressInit+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lbz2 $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char BZ2_bzCompressInit (); +int +main () +{ +return BZ2_bzCompressInit (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_bz2_BZ2_bzCompressInit=yes +else + ac_cv_lib_bz2_BZ2_bzCompressInit=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bz2_BZ2_bzCompressInit" >&5 +$as_echo "$ac_cv_lib_bz2_BZ2_bzCompressInit" >&6; } +if test "x$ac_cv_lib_bz2_BZ2_bzCompressInit" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBBZ2 1 +_ACEOF + + LIBS="-lbz2 $LIBS" + +fi + +fi +if test "$enable_xzlib" != "no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lzma_stream_decoder in -llzma" >&5 +$as_echo_n "checking for lzma_stream_decoder in -llzma... " >&6; } +if ${ac_cv_lib_lzma_lzma_stream_decoder+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-llzma $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char lzma_stream_decoder (); +int +main () +{ +return lzma_stream_decoder (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_lzma_lzma_stream_decoder=yes +else + ac_cv_lib_lzma_lzma_stream_decoder=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lzma_lzma_stream_decoder" >&5 +$as_echo "$ac_cv_lib_lzma_lzma_stream_decoder" >&6; } +if test "x$ac_cv_lib_lzma_lzma_stream_decoder" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBLZMA 1 +_ACEOF + + LIBS="-llzma $LIBS" + +fi + fi if test "$enable_libseccomp" != "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for seccomp_init in -lseccomp" >&5 @@ -14586,6 +15145,26 @@ if test "$ac_cv_header_zlib_h$ac_cv_lib_z_gzopen" = "yesyes"; then $as_echo "#define ZLIBSUPPORT 1" >>confdefs.h +fi +if test "$enable_bzlib" = "yes"; then + if test "$ac_cv_header_bzlib_h$ac_cv_lib_bz2_BZ2_bzCompressInit" != "yesyes"; then + as_fn_error $? "bzlib support requested but not found" "$LINENO" 5 + fi +fi +if test "$ac_cv_header_bzlib_h$ac_cv_lib_bz2_BZ2_bzCompressInit" = "yesyes"; then + +$as_echo "#define BZLIBSUPPORT 1" >>confdefs.h + +fi +if test "$enable_xzlib" = "yes"; then + if test "$ac_cv_header_lzma_h$ac_cv_lib_lzma_lzma_stream_decoder" != "yesyes"; then + as_fn_error $? "xzlib support requested but not found" "$LINENO" 5 + fi +fi +if test "$ac_cv_header_lzma_h$ac_cv_lib_lzma_lzma_stream_decoder" = "yesyes"; then + +$as_echo "#define XZLIBSUPPORT 1" >>confdefs.h + fi ac_config_files="$ac_config_files Makefile src/Makefile magic/Makefile tests/Makefile doc/Makefile python/Makefile" @@ -15133,7 +15712,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by file $as_me 5.37, which was +This file was extended by file $as_me 5.38, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -15199,7 +15778,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -file config.status 5.37 +file config.status 5.38 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -15318,7 +15897,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" +AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" # The HP-UX ksh and POSIX shell print the target directory to stdout @@ -15334,6 +15913,7 @@ enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' @@ -15383,10 +15963,13 @@ compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' +lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' @@ -15451,7 +16034,8 @@ finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' -sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' +configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' +configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' @@ -15502,9 +16086,12 @@ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_import \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +lt_cv_nm_interface \ nm_file_list_spec \ +lt_cv_truncate_bin \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ @@ -15539,7 +16126,7 @@ old_striplib \ striplib; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" @@ -15566,10 +16153,11 @@ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ -sys_lib_dlsearch_path_spec; do +configure_time_dlsearch_path \ +configure_time_lt_sys_library_path; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" @@ -15578,19 +16166,16 @@ sys_lib_dlsearch_path_spec; do done ac_aux_dir='$ac_aux_dir' -xsi_shell='$xsi_shell' -lt_shell_append='$lt_shell_append' -# See if we are running on zsh, and set the options which allow our +# See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then +if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' @@ -16213,29 +16798,35 @@ $as_echo "$as_me: executing $ac_file commands" >&6;} # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac + # TODO: see whether this extra hack can be removed once we start + # requiring Autoconf 2.70 or later. + case $CONFIG_FILES in #( + *\'*) : + eval set x "$CONFIG_FILES" ;; #( + *) : + set x $CONFIG_FILES ;; #( + *) : + ;; +esac shift - for mf + # Used to flag and report bootstrapping failures. + am_rc=0 + for am_mf do # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line + am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile which includes + # dependency-tracking related rules and includes. + # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | + sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ + || continue + am_dirpart=`$as_dirname -- "$am_mf" || +$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$am_mf" : 'X\(//\)[^/]' \| \ + X"$am_mf" : 'X\(//\)$' \| \ + X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -16253,106 +16844,99 @@ $as_echo X"$mf" | q } s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "$am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + am_filepart=`$as_basename -- "$am_mf" || +$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ + X"$am_mf" : 'X\(//\)$' \| \ + X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$am_mf" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } - /^X\(\/\/\)[^/].*/{ + /^X\/\(\/\/\)$/{ s//\1/ q } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ + /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done + { echo "$as_me:$LINENO: cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles" >&5 + (cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } || am_rc=$? done + if test $am_rc -ne 0; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "Something went wrong bootstrapping makefile fragments + for automatic dependency tracking. Try re-running configure with the + '--disable-dependency-tracking' option to at least be able to build + the package (albeit without support for automatic dependency tracking). +See \`config.log' for more details" "$LINENO" 5; } + fi + { am_dirpart=; unset am_dirpart;} + { am_filepart=; unset am_filepart;} + { am_mf=; unset am_mf;} + { am_rc=; unset am_rc;} + rm -f conftest-deps.mk } ;; "libtool":C) - # See if we are running on zsh, and set the options which allow our + # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then + if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi - cfgfile="${ofile}T" + cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Generated automatically by $as_me ($PACKAGE) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of of the License, or +# (at your option) any later version. # -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. # -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# along with this program. If not, see . # The names of the tagged configurations supported by this script. -available_tags="" +available_tags='' + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG @@ -16372,6 +16956,9 @@ build_libtool_libs=$enable_shared # Whether or not to optimize for fast installation. fast_install=$enable_fast_install +# Shared archive member basename,for filename based shared library versioning on AIX. +shared_archive_member_spec=$shared_archive_member_spec + # Shell to use when invoking shell scripts. SHELL=$lt_SHELL @@ -16489,18 +17076,27 @@ global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl +# Transform the output of nm into a list of symbols to manually relocate. +global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import + # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix +# The name lister interface. +nm_interface=$lt_lt_cv_nm_interface + # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec -# The root where to search for dependent libraries,and in which our libraries should be installed. +# The root where to search for dependent libraries,and where our libraries should be installed. lt_sysroot=$lt_sysroot +# Command to truncate a binary pipe. +lt_truncate_bin=$lt_lt_cv_truncate_bin + # The name of the directory that contains temporary libtool files. objdir=$objdir @@ -16591,8 +17187,11 @@ hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec -# Run-time system search path for libraries. -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec +# Detected run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path + +# Explicit LT_SYS_LIBRARY_PATH set during ./configure time. +configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path # Whether dlopen is supported. dlopen_support=$enable_dlopen @@ -16685,13 +17284,13 @@ hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute @@ -16741,6 +17340,65 @@ hardcode_action=$hardcode_action # ### END LIBTOOL CONFIG +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + + +# ### END FUNCTIONS SHARED WITH CONFIGURE + _LT_EOF case $host_os in @@ -16749,7 +17407,7 @@ _LT_EOF # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then +if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi @@ -16758,7 +17416,7 @@ _LT_EOF esac -ltmain="$ac_aux_dir/ltmain.sh" +ltmain=$ac_aux_dir/ltmain.sh # We use sed instead of cat because bash on DJGPP gets confused if @@ -16768,165 +17426,6 @@ ltmain="$ac_aux_dir/ltmain.sh" sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) - if test x"$xsi_shell" = xyes; then - sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ -func_dirname ()\ -{\ -\ case ${1} in\ -\ */*) func_dirname_result="${1%/*}${2}" ;;\ -\ * ) func_dirname_result="${3}" ;;\ -\ esac\ -} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_basename ()$/,/^} # func_basename /c\ -func_basename ()\ -{\ -\ func_basename_result="${1##*/}"\ -} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ -func_dirname_and_basename ()\ -{\ -\ case ${1} in\ -\ */*) func_dirname_result="${1%/*}${2}" ;;\ -\ * ) func_dirname_result="${3}" ;;\ -\ esac\ -\ func_basename_result="${1##*/}"\ -} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ -func_stripname ()\ -{\ -\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ -\ # positional parameters, so assign one to ordinary parameter first.\ -\ func_stripname_result=${3}\ -\ func_stripname_result=${func_stripname_result#"${1}"}\ -\ func_stripname_result=${func_stripname_result%"${2}"}\ -} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ -func_split_long_opt ()\ -{\ -\ func_split_long_opt_name=${1%%=*}\ -\ func_split_long_opt_arg=${1#*=}\ -} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ -func_split_short_opt ()\ -{\ -\ func_split_short_opt_arg=${1#??}\ -\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ -} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ -func_lo2o ()\ -{\ -\ case ${1} in\ -\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ -\ *) func_lo2o_result=${1} ;;\ -\ esac\ -} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_xform ()$/,/^} # func_xform /c\ -func_xform ()\ -{\ - func_xform_result=${1%.*}.lo\ -} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_arith ()$/,/^} # func_arith /c\ -func_arith ()\ -{\ - func_arith_result=$(( $* ))\ -} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_len ()$/,/^} # func_len /c\ -func_len ()\ -{\ - func_len_result=${#1}\ -} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - -fi - -if test x"$lt_shell_append" = xyes; then - sed -e '/^func_append ()$/,/^} # func_append /c\ -func_append ()\ -{\ - eval "${1}+=\\${2}"\ -} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ -func_append_quoted ()\ -{\ -\ func_quote_for_eval "${2}"\ -\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ -} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - # Save a `func_append' function call where possible by direct use of '+=' - sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -else - # Save a `func_append' function call even when '+=' is not available - sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -fi - -if test x"$_lt_function_replace_fail" = x":"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 -$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} -fi - - mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" diff --git a/configure.ac b/configure.ac index 7da62aa2698..ac37fccd3d9 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ dnl Process this file with autoconf to produce a configure script. -AC_INIT([file],[5.37],[christos@astron.com]) +AC_INIT([file],[5.38],[christos@astron.com]) AM_INIT_AUTOMAKE([subdir-objects foreign]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) @@ -39,6 +39,16 @@ AC_ARG_ENABLE([zlib], [AS_HELP_STRING([--disable-zlib], [disable zlib compression support @<:@default=auto@:>@])]) AC_MSG_RESULT($enable_zlib) +AC_MSG_CHECKING(for bzlib support) +AC_ARG_ENABLE([bzlib], +[AS_HELP_STRING([--disable-bzlib], [disable bz2lib compression support @<:@default=auto@:>@])]) +AC_MSG_RESULT($enable_bzlib) + +AC_MSG_CHECKING(for xzlib support) +AC_ARG_ENABLE([xzlib], +[AS_HELP_STRING([--disable-xzlib], [disable liblzma/xz compression support @<:@default=auto@:>@])]) +AC_MSG_RESULT($enable_xzlib) + AC_MSG_CHECKING(for libseccomp support) AC_ARG_ENABLE([libseccomp], [AS_HELP_STRING([--disable-libseccomp], [disable libseccomp sandboxing @<:@default=auto@:>@])]) @@ -97,10 +107,15 @@ AC_CHECK_HEADERS(sys/mman.h sys/stat.h sys/types.h sys/utime.h sys/time.h sys/sy if test "$enable_zlib" != "no"; then AC_CHECK_HEADERS(zlib.h) fi +if test "$enable_bzlib" != "no"; then + AC_CHECK_HEADERS(bzlib.h) +fi +if test "$enable_xzlib" != "no"; then + AC_CHECK_HEADERS(lzma.h) +fi AC_CHECK_TYPE([sig_t],[AC_DEFINE([HAVE_SIG_T],1,[Have sig_t type])],,[#include ]) dnl Checks for typedefs, structures, and compiler characteristics. -AC_C_CONST AC_TYPE_OFF_T AC_TYPE_SIZE_T AC_CHECK_MEMBERS([struct stat.st_rdev]) @@ -160,6 +175,12 @@ dnl Checks for libraries if test "$enable_zlib" != "no"; then AC_CHECK_LIB(z, gzopen) fi +if test "$enable_bzlib" != "no"; then + AC_CHECK_LIB(bz2, BZ2_bzCompressInit) +fi +if test "$enable_xzlib" != "no"; then + AC_CHECK_LIB(lzma, lzma_stream_decoder) +fi if test "$enable_libseccomp" != "no"; then AC_CHECK_LIB(seccomp, seccomp_init) fi @@ -179,6 +200,22 @@ fi if test "$ac_cv_header_zlib_h$ac_cv_lib_z_gzopen" = "yesyes"; then AC_DEFINE([ZLIBSUPPORT], 1, [Enable zlib compression support]) fi +if test "$enable_bzlib" = "yes"; then + if test "$ac_cv_header_bzlib_h$ac_cv_lib_bz2_BZ2_bzCompressInit" != "yesyes"; then + AC_MSG_ERROR([bzlib support requested but not found]) + fi +fi +if test "$ac_cv_header_bzlib_h$ac_cv_lib_bz2_BZ2_bzCompressInit" = "yesyes"; then + AC_DEFINE([BZLIBSUPPORT], 1, [Enable bzlib compression support]) +fi +if test "$enable_xzlib" = "yes"; then + if test "$ac_cv_header_lzma_h$ac_cv_lib_lzma_lzma_stream_decoder" != "yesyes"; then + AC_MSG_ERROR([xzlib support requested but not found]) + fi +fi +if test "$ac_cv_header_lzma_h$ac_cv_lib_lzma_lzma_stream_decoder" = "yesyes"; then + AC_DEFINE([XZLIBSUPPORT], 1, [Enable xzlib compression support]) +fi AC_CONFIG_FILES([Makefile src/Makefile magic/Makefile tests/Makefile doc/Makefile python/Makefile]) AC_OUTPUT diff --git a/depcomp b/depcomp index fc98710e2a1..65cbf7093a1 100755 --- a/depcomp +++ b/depcomp @@ -1,9 +1,9 @@ #! /bin/sh # depcomp - compile a program generating dependencies as side-effects -scriptversion=2013-05-30.07; # UTC +scriptversion=2018-03-07.03; # UTC -# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ scriptversion=2013-05-30.07; # UTC # GNU General Public License for more details. # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -783,9 +783,9 @@ exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" +# time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff --git a/doc/Makefile.in b/doc/Makefile.in index 165918a5e42..ce52b681291 100644 --- a/doc/Makefile.in +++ b/doc/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -198,6 +198,7 @@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MINGW = @MINGW@ @@ -302,8 +303,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -499,7 +500,10 @@ ctags CTAGS: cscope cscopelist: -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ diff --git a/doc/file.man b/doc/file.man index 63e95f1365f..84b4b357f03 100644 --- a/doc/file.man +++ b/doc/file.man @@ -1,5 +1,5 @@ -.\" $File: file.man,v 1.135 2019/03/03 02:32:40 christos Exp $ -.Dd February 18, 2019 +.\" $File: file.man,v 1.138 2019/10/15 18:00:40 christos Exp $ +.Dd July 13, 2019 .Dt FILE __CSECTION__ .Os .Sh NAME @@ -212,6 +212,8 @@ Ignored for backwards compatibility. Prints details of Compound Document Files. .It compress Checks for, and looks inside, compressed files. +.It csv +Checks Comma Separated Value files. .It elf Prints ELF file details, provided soft magic tests are enabled and the elf magic is found. @@ -289,7 +291,7 @@ The magic pattern with the highest strength (see the option) comes first. .It Fl l , Fl Fl list Shows a list of patterns and their strength sorted descending by -.Xr magic 4 +.Xr magic __FSECTION__ strength which is used for the matching (see also the .Fl k @@ -363,10 +365,11 @@ On systems where libseccomp is available, the .Fl S flag disables sandboxing which is enabled by default. -This option is needed for file to execute external descompressing programs, +This option is needed for file to execute external decompressing programs, i.e. when the .Fl z flag is specified and the built-in decompressors are not available. +On systems where sandboxing is not available, this option has no effect. .It Fl v , Fl Fl version Print the version of the program and exit. .It Fl z , Fl Fl uncompress diff --git a/doc/libmagic.man b/doc/libmagic.man index 086f0659f11..b0cf0339f19 100644 --- a/doc/libmagic.man +++ b/doc/libmagic.man @@ -1,4 +1,4 @@ -.\" $File: libmagic.man,v 1.44 2018/09/09 20:33:28 christos Exp $ +.\" $File: libmagic.man,v 1.45 2019/06/08 22:16:24 christos Exp $ .\" .\" Copyright (c) Christos Zoulas 2003, 2018. .\" All Rights Reserved. @@ -25,7 +25,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd August 18, 2018 +.Dd June 8, 2019 .Dt LIBMAGIC 3 .Os .Sh NAME @@ -160,7 +160,9 @@ Don't check for various types of text files. .It Dv MAGIC_NO_CHECK_TOKENS Don't look for known tokens inside ascii files. .It Dv MAGIC_NO_CHECK_JSON -Don't example JSON files. +Don't examine JSON files. +.It Dv MAGIC_NO_CHECK_CSV +Don't examine CSV files. .El .Pp The diff --git a/doc/magic.man b/doc/magic.man index bc69604a3df..ed074adbcc6 100644 --- a/doc/magic.man +++ b/doc/magic.man @@ -1,4 +1,4 @@ -.\" $File: magic.man,v 1.96 2019/01/21 14:56:53 christos Exp $ +.\" $File: magic.man,v 1.97 2019/11/15 21:03:14 christos Exp $ .Dd January 21, 2019 .Dt MAGIC __FSECTION__ .Os @@ -44,7 +44,7 @@ This offset can be a negative number if it is: The first direct offset of the magic entry (at continuation level 0), in which case it is interpreted an offset from end end of the file going backwards. -This works only when a file descriptor to the file is a available and it +This works only when a file descriptor to the file is available and it is a regular file. .It A continuation offset relative to the end of the last up-level field @@ -136,7 +136,7 @@ format. .It Dv date A four-byte value interpreted as a UNIX date. .It Dv qdate -A eight-byte value interpreted as a UNIX date. +An eight-byte value interpreted as a UNIX date. .It Dv ldate A four-byte value interpreted as a UNIX-style date, but interpreted as local time rather than UTC. diff --git a/ltmain.sh b/ltmain.sh index fcc4d744b45..ffabee228c1 100755 --- a/ltmain.sh +++ b/ltmain.sh @@ -1,9 +1,12 @@ +#! /bin/sh +## DO NOT EDIT - This file generated from ./build-aux/ltmain.in +## by inline-source v2014-01-03.01 -# libtool (GNU libtool) 2.4.2 +# libtool (GNU libtool) 2.4.6 +# Provide generalized library-building support services. # Written by Gordon Matzigkeit , 1996 -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, -# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. +# Copyright (C) 1996-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. @@ -23,167 +26,673 @@ # General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, -# or obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# along with this program. If not, see . -# Usage: $progname [OPTION]... [MODE-ARG]... -# -# Provide generalized library-building support services. -# -# --config show all configuration variables -# --debug enable verbose shell tracing -# -n, --dry-run display commands without modifying any files -# --features display basic configuration information and exit -# --mode=MODE use operation mode MODE -# --preserve-dup-deps don't remove duplicate dependency libraries -# --quiet, --silent don't print informational messages -# --no-quiet, --no-silent -# print informational messages (default) -# --no-warn don't display warning messages -# --tag=TAG use configuration variables from tag TAG -# -v, --verbose print more informational messages than default -# --no-verbose don't print the extra informational messages -# --version print version information -# -h, --help, --help-all print short, long, or detailed help message -# -# MODE must be one of the following: -# -# clean remove files from the build directory -# compile compile a source file into a libtool object -# execute automatically set library path, then run a program -# finish complete the installation of libtool libraries -# install install libraries or executables -# link create a library or an executable -# uninstall remove libraries from an installed directory -# -# MODE-ARGS vary depending on the MODE. When passed as first option, -# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. -# Try `$progname --help --mode=MODE' for a more detailed description of MODE. -# -# When reporting a bug, please describe a test case to reproduce it and -# include the following information: -# -# host-triplet: $host -# shell: $SHELL -# compiler: $LTCC -# compiler flags: $LTCFLAGS -# linker: $LD (gnu? $with_gnu_ld) -# $progname: (GNU libtool) 2.4.2 -# automake: $automake_version -# autoconf: $autoconf_version -# -# Report bugs to . -# GNU libtool home page: . -# General help using GNU software: . PROGRAM=libtool PACKAGE=libtool -VERSION=2.4.2 -TIMESTAMP="" -package_revision=1.3337 +VERSION=2.4.6 +package_revision=2.4.6 -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + +## ------ ## +## Usage. ## +## ------ ## + +# Run './libtool --help' for help with using this script from the +# command line. + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# After configure completes, it has a better idea of some of the +# shell tools we need than the defaults used by the functions shared +# with bootstrap, so set those here where they can still be over- +# ridden by the user, but otherwise take precedence. + +: ${AUTOCONF="autoconf"} +: ${AUTOMAKE="automake"} + + +## -------------------------- ## +## Source external libraries. ## +## -------------------------- ## + +# Much of our low-level functionality needs to be sourced from external +# libraries, which are installed to $pkgauxdir. + +# Set a version string for this script. +scriptversion=2015-01-20.17; # UTC + +# General shell script boiler plate, and helper functions. +# Written by Gary V. Vaughan, 2004 + +# Copyright (C) 2004-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. + +# As a special exception to the GNU General Public License, if you distribute +# this file as part of a program or library that is built using GNU Libtool, +# you may include this file under the same distribution terms that you use +# for the rest of that program. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Please report bugs or propose patches to gary@gnu.org. + + +## ------ ## +## Usage. ## +## ------ ## + +# Evaluate this file near the top of your script to gain access to +# the functions and variables defined here: +# +# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh +# +# If you need to override any of the default environment variable +# settings, do that before evaluating this file. + + +## -------------------- ## +## Shell normalisation. ## +## -------------------- ## + +# Some shells need a little help to be as Bourne compatible as possible. +# Before doing anything else, make sure all that help has been provided! + +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else - case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac + case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' -} - -# NLS nuisances: We save the old values to restore during execute mode. -lt_user_locale= -lt_safe_locale= -for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +# NLS nuisances: We save the old values in case they are required later. +_G_user_locale= +_G_safe_locale= +for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do - eval "if test \"\${$lt_var+set}\" = set; then - save_$lt_var=\$$lt_var - $lt_var=C - export $lt_var - lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" - lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" + eval "if test set = \"\${$_G_var+set}\"; then + save_$_G_var=\$$_G_var + $_G_var=C + export $_G_var + _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" + _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" fi" done -LC_ALL=C -LANGUAGE=C -export LANGUAGE LC_ALL -$lt_unset CDPATH +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH +# Make sure IFS has a sensible default +sp=' ' +nl=' +' +IFS="$sp $nl" + +# There are apparently some retarded systems that use ';' as a PATH separator! +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + + +## ------------------------- ## +## Locate command utilities. ## +## ------------------------- ## + + +# func_executable_p FILE +# ---------------------- +# Check that FILE is an executable regular file. +func_executable_p () +{ + test -f "$1" && test -x "$1" +} + + +# func_path_progs PROGS_LIST CHECK_FUNC [PATH] +# -------------------------------------------- +# Search for either a program that responds to --version with output +# containing "GNU", or else returned by CHECK_FUNC otherwise, by +# trying all the directories in PATH with each of the elements of +# PROGS_LIST. +# +# CHECK_FUNC should accept the path to a candidate program, and +# set $func_check_prog_result if it truncates its output less than +# $_G_path_prog_max characters. +func_path_progs () +{ + _G_progs_list=$1 + _G_check_func=$2 + _G_PATH=${3-"$PATH"} + + _G_path_prog_max=0 + _G_path_prog_found=false + _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} + for _G_dir in $_G_PATH; do + IFS=$_G_save_IFS + test -z "$_G_dir" && _G_dir=. + for _G_prog_name in $_G_progs_list; do + for _exeext in '' .EXE; do + _G_path_prog=$_G_dir/$_G_prog_name$_exeext + func_executable_p "$_G_path_prog" || continue + case `"$_G_path_prog" --version 2>&1` in + *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; + *) $_G_check_func $_G_path_prog + func_path_progs_result=$func_check_prog_result + ;; + esac + $_G_path_prog_found && break 3 + done + done + done + IFS=$_G_save_IFS + test -z "$func_path_progs_result" && { + echo "no acceptable sed could be found in \$PATH" >&2 + exit 1 + } +} + + +# We want to be able to use the functions in this file before configure +# has figured out where the best binaries are kept, which means we have +# to search for them ourselves - except when the results are already set +# where we skip the searches. + +# Unless the user overrides by setting SED, search the path for either GNU +# sed, or the sed that truncates its output the least. +test -z "$SED" && { + _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for _G_i in 1 2 3 4 5 6 7; do + _G_sed_script=$_G_sed_script$nl$_G_sed_script + done + echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed + _G_sed_script= + + func_check_prog_sed () + { + _G_path_prog=$1 + + _G_count=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo '' >> conftest.nl + "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin + rm -f conftest.sed + SED=$func_path_progs_result +} + + +# Unless the user overrides by setting GREP, search the path for either GNU +# grep, or the grep that truncates its output the least. +test -z "$GREP" && { + func_check_prog_grep () + { + _G_path_prog=$1 + + _G_count=0 + _G_path_prog_max=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo 'GREP' >> conftest.nl + "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin + GREP=$func_path_progs_result +} + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# All uppercase variable names are used for environment variables. These +# variables can be overridden by the user before calling a script that +# uses them if a suitable command of that name is not already available +# in the command search PATH. + +unset CP +unset MV +unset RM +: ${CP="cp -f"} +: ${ECHO="printf %s\n"} +: ${EGREP="$GREP -E"} +: ${FGREP="$GREP -F"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} + + +## -------------------- ## +## Useful sed snippets. ## +## -------------------- ## + +sed_dirname='s|/[^/]*$||' +sed_basename='s|^.*/||' + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s|\([`"$\\]\)|\\\1|g' + +# Same as above, but do not quote variable references. +sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' + +# Sed substitution that converts a w32 file name or path +# that contains forward slashes, into one that contains +# (escaped) backslashes. A very naive implementation. +sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + +# Re-'\' parameter expansions in output of sed_double_quote_subst that +# were '\'-ed in input to the same. If an odd number of '\' preceded a +# '$' in input to sed_double_quote_subst, that '$' was protected from +# expansion. Since each input '\' is now two '\'s, look for any number +# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. +_G_bs='\\' +_G_bs2='\\\\' +_G_bs4='\\\\\\\\' +_G_dollar='\$' +sed_double_backslash="\ + s/$_G_bs4/&\\ +/g + s/^$_G_bs2$_G_dollar/$_G_bs&/ + s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g + s/\n//g" + + +## ----------------- ## +## Global variables. ## +## ----------------- ## + +# Except for the global variables explicitly listed below, the following +# functions in the '^func_' namespace, and the '^require_' namespace +# variables initialised in the 'Resource management' section, sourcing +# this file will not pollute your global namespace with anything +# else. There's no portable way to scope variables in Bourne shell +# though, so actually running these functions will sometimes place +# results into a variable named after the function, and often use +# temporary variables in the '^_G_' namespace. If you are careful to +# avoid using those namespaces casually in your sourcing script, things +# should continue to work as you expect. And, of course, you can freely +# overwrite any of the functions or variables defined here before +# calling anything to customize them. + +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +# Allow overriding, eg assuming that you follow the convention of +# putting '$debug_cmd' at the start of all your functions, you can get +# bash to show function call trace with: +# +# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name +debug_cmd=${debug_cmd-":"} +exit_cmd=: + +# By convention, finish your script with: +# +# exit $exit_status +# +# so that you can set exit_status to non-zero if you want to indicate +# something went wrong during execution without actually bailing out at +# the point of failure. +exit_status=$EXIT_SUCCESS # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. -progpath="$0" +progpath=$0 -unset CP -unset MV -unset RM -: ${CP="cp -f"} -test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} -: ${MAKE="make"} -: ${MKDIR="mkdir"} -: ${MV="mv -f"} -: ${RM="rm -f"} -: ${SHELL="${CONFIG_SHELL-/bin/sh}"} -: ${Xsed="$SED -e 1s/^X//"} +# The name of this program. +progname=`$ECHO "$progpath" |$SED "$sed_basename"` -# Global variables: -EXIT_SUCCESS=0 -EXIT_FAILURE=1 -EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. -EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. +# Make sure we have an absolute progpath for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` + progdir=`cd "$progdir" && pwd` + progpath=$progdir/$progname + ;; + *) + _G_IFS=$IFS + IFS=${PATH_SEPARATOR-:} + for progdir in $PATH; do + IFS=$_G_IFS + test -x "$progdir/$progname" && break + done + IFS=$_G_IFS + test -n "$progdir" || progdir=`pwd` + progpath=$progdir/$progname + ;; +esac -exit_status=$EXIT_SUCCESS -# Make sure IFS has a sensible default -lt_nl=' -' -IFS=" $lt_nl" +## ----------------- ## +## Standard options. ## +## ----------------- ## -dirname="s,/[^/]*$,," -basename="s,^.*/,," +# The following options affect the operation of the functions defined +# below, and should be set appropriately depending on run-time para- +# meters passed on the command line. -# func_dirname file append nondir_replacement +opt_dry_run=false +opt_quiet=false +opt_verbose=false + +# Categories 'all' and 'none' are always available. Append any others +# you will pass as the first argument to func_warning from your own +# code. +warning_categories= + +# By default, display warnings according to 'opt_warning_types'. Set +# 'warning_func' to ':' to elide all warnings, or func_fatal_error to +# treat the next displayed warning as a fatal error. +warning_func=func_warn_and_continue + +# Set to 'all' to display all warnings, 'none' to suppress all +# warnings, or a space delimited list of some subset of +# 'warning_categories' to display only the listed warnings. +opt_warning_types=all + + +## -------------------- ## +## Resource management. ## +## -------------------- ## + +# This section contains definitions for functions that each ensure a +# particular resource (a file, or a non-empty configuration variable for +# example) is available, and if appropriate to extract default values +# from pertinent package files. Call them using their associated +# 'require_*' variable to ensure that they are executed, at most, once. +# +# It's entirely deliberate that calling these functions can set +# variables that don't obey the namespace limitations obeyed by the rest +# of this file, in order that that they be as useful as possible to +# callers. + + +# require_term_colors +# ------------------- +# Allow display of bold text on terminals that support it. +require_term_colors=func_require_term_colors +func_require_term_colors () +{ + $debug_cmd + + test -t 1 && { + # COLORTERM and USE_ANSI_COLORS environment variables take + # precedence, because most terminfo databases neglect to describe + # whether color sequences are supported. + test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} + + if test 1 = "$USE_ANSI_COLORS"; then + # Standard ANSI escape sequences + tc_reset='' + tc_bold=''; tc_standout='' + tc_red=''; tc_green='' + tc_blue=''; tc_cyan='' + else + # Otherwise trust the terminfo database after all. + test -n "`tput sgr0 2>/dev/null`" && { + tc_reset=`tput sgr0` + test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` + tc_standout=$tc_bold + test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` + test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` + test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` + test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` + test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` + } + fi + } + + require_term_colors=: +} + + +## ----------------- ## +## Function library. ## +## ----------------- ## + +# This section contains a variety of useful functions to call in your +# scripts. Take note of the portable wrappers for features provided by +# some modern shells, which will fall back to slower equivalents on +# less featureful shells. + + +# func_append VAR VALUE +# --------------------- +# Append VALUE onto the existing contents of VAR. + + # We should try to minimise forks, especially on Windows where they are + # unreasonably slow, so skip the feature probes when bash or zsh are + # being used: + if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then + : ${_G_HAVE_ARITH_OP="yes"} + : ${_G_HAVE_XSI_OPS="yes"} + # The += operator was introduced in bash 3.1 + case $BASH_VERSION in + [12].* | 3.0 | 3.0*) ;; + *) + : ${_G_HAVE_PLUSEQ_OP="yes"} + ;; + esac + fi + + # _G_HAVE_PLUSEQ_OP + # Can be empty, in which case the shell is probed, "yes" if += is + # useable or anything else if it does not work. + test -z "$_G_HAVE_PLUSEQ_OP" \ + && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ + && _G_HAVE_PLUSEQ_OP=yes + +if test yes = "$_G_HAVE_PLUSEQ_OP" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_append () + { + $debug_cmd + + eval "$1+=\$2" + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_append () + { + $debug_cmd + + eval "$1=\$$1\$2" + } +fi + + +# func_append_quoted VAR VALUE +# ---------------------------- +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +if test yes = "$_G_HAVE_PLUSEQ_OP"; then + eval 'func_append_quoted () + { + $debug_cmd + + func_quote_for_eval "$2" + eval "$1+=\\ \$func_quote_for_eval_result" + }' +else + func_append_quoted () + { + $debug_cmd + + func_quote_for_eval "$2" + eval "$1=\$$1\\ \$func_quote_for_eval_result" + } +fi + + +# func_append_uniq VAR VALUE +# -------------------------- +# Append unique VALUE onto the existing contents of VAR, assuming +# entries are delimited by the first character of VALUE. For example: +# +# func_append_uniq options " --another-option option-argument" +# +# will only append to $options if " --another-option option-argument " +# is not already present somewhere in $options already (note spaces at +# each end implied by leading space in second argument). +func_append_uniq () +{ + $debug_cmd + + eval _G_current_value='`$ECHO $'$1'`' + _G_delim=`expr "$2" : '\(.\)'` + + case $_G_delim$_G_current_value$_G_delim in + *"$2$_G_delim"*) ;; + *) func_append "$@" ;; + esac +} + + +# func_arith TERM... +# ------------------ +# Set func_arith_result to the result of evaluating TERMs. + test -z "$_G_HAVE_ARITH_OP" \ + && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ + && _G_HAVE_ARITH_OP=yes + +if test yes = "$_G_HAVE_ARITH_OP"; then + eval 'func_arith () + { + $debug_cmd + + func_arith_result=$(( $* )) + }' +else + func_arith () + { + $debug_cmd + + func_arith_result=`expr "$@"` + } +fi + + +# func_basename FILE +# ------------------ +# Set func_basename_result to FILE with everything up to and including +# the last / stripped. +if test yes = "$_G_HAVE_XSI_OPS"; then + # If this shell supports suffix pattern removal, then use it to avoid + # forking. Hide the definitions single quotes in case the shell chokes + # on unsupported syntax... + _b='func_basename_result=${1##*/}' + _d='case $1 in + */*) func_dirname_result=${1%/*}$2 ;; + * ) func_dirname_result=$3 ;; + esac' + +else + # ...otherwise fall back to using sed. + _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' + _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` + if test "X$func_dirname_result" = "X$1"; then + func_dirname_result=$3 + else + func_append func_dirname_result "$2" + fi' +fi + +eval 'func_basename () +{ + $debug_cmd + + '"$_b"' +}' + + +# func_dirname FILE APPEND NONDIR_REPLACEMENT +# ------------------------------------------- # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. -func_dirname () +eval 'func_dirname () { - func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} # func_dirname may be replaced by extended shell implementation + $debug_cmd + + '"$_d"' +}' -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "${1}" | $SED "$basename"` -} # func_basename may be replaced by extended shell implementation - - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function +# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT +# -------------------------------------------------------- +# Perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result @@ -191,263 +700,327 @@ func_basename () # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () +# For efficiency, we do not delegate to the functions above but instead +# duplicate the functionality here. +eval 'func_dirname_and_basename () { - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" + $debug_cmd + + '"$_b"' + '"$_d"' +}' + + +# func_echo ARG... +# ---------------- +# Echo program name prefixed message. +func_echo () +{ + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname: $_G_line" + done + IFS=$func_echo_IFS +} + + +# func_echo_all ARG... +# -------------------- +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + + +# func_echo_infix_1 INFIX ARG... +# ------------------------------ +# Echo program name, followed by INFIX on the first line, with any +# additional lines not showing INFIX. +func_echo_infix_1 () +{ + $debug_cmd + + $require_term_colors + + _G_infix=$1; shift + _G_indent=$_G_infix + _G_prefix="$progname: $_G_infix: " + _G_message=$* + + # Strip color escape sequences before counting printable length + for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" + do + test -n "$_G_tc" && { + _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` + _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` + } + done + _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes + + func_echo_infix_1_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_infix_1_IFS + $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 + _G_prefix=$_G_indent + done + IFS=$func_echo_infix_1_IFS +} + + +# func_error ARG... +# ----------------- +# Echo program name prefixed message to standard error. +func_error () +{ + $debug_cmd + + $require_term_colors + + func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 +} + + +# func_fatal_error ARG... +# ----------------------- +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + $debug_cmd + + func_error "$*" + exit $EXIT_FAILURE +} + + +# func_grep EXPRESSION FILENAME +# ----------------------------- +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $debug_cmd + + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_len STRING +# --------------- +# Set func_len_result to the length of STRING. STRING may not +# start with a hyphen. + test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_len () + { + $debug_cmd + + func_len_result=${#1} + }' +else + func_len () + { + $debug_cmd + + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` + } +fi + + +# func_mkdir_p DIRECTORY-PATH +# --------------------------- +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + $debug_cmd + + _G_directory_path=$1 + _G_dir_list= + + if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then + + # Protect directory names starting with '-' + case $_G_directory_path in + -*) _G_directory_path=./$_G_directory_path ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$_G_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + _G_dir_list=$_G_directory_path:$_G_dir_list + + # If the last portion added has no slash in it, the list is done + case $_G_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` + done + _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` + + func_mkdir_p_IFS=$IFS; IFS=: + for _G_dir in $_G_dir_list; do + IFS=$func_mkdir_p_IFS + # mkdir can fail with a 'File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$_G_dir" 2>/dev/null || : + done + IFS=$func_mkdir_p_IFS + + # Bail out if we (or some other process) failed to create a directory. + test -d "$_G_directory_path" || \ + func_fatal_error "Failed to create '$1'" fi - func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` -} # func_dirname_and_basename may be replaced by extended shell implementation +} -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () +# func_mktempdir [BASENAME] +# ------------------------- +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, BASENAME is the basename for that directory. +func_mktempdir () { - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; - esac -} # func_stripname may be replaced by extended shell implementation + $debug_cmd + _G_template=${TMPDIR-/tmp}/${1-$progname} + + if test : = "$opt_dry_run"; then + # Return a directory name, but don't create it in dry-run mode + _G_tmpdir=$_G_template-$$ + else + + # If mktemp works, use that first and foremost + _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` + + if test ! -d "$_G_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + _G_tmpdir=$_G_template-${RANDOM-0}$$ + + func_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$_G_tmpdir" + umask $func_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$_G_tmpdir" || \ + func_fatal_error "cannot create temporary directory '$_G_tmpdir'" + fi + + $ECHO "$_G_tmpdir" +} -# These SED scripts presuppose an absolute path with a trailing slash. -pathcar='s,^/\([^/]*\).*$,\1,' -pathcdr='s,^/[^/]*,,' -removedotparts=':dotsl - s@/\./@/@g - t dotsl - s,/\.$,/,' -collapseslashes='s@/\{1,\}@/@g' -finalslash='s,/*$,/,' # func_normal_abspath PATH +# ------------------------ # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. -# value returned in "$func_normal_abspath_result" func_normal_abspath () { - # Start from root dir and reassemble the path. - func_normal_abspath_result= - func_normal_abspath_tpath=$1 - func_normal_abspath_altnamespace= - case $func_normal_abspath_tpath in - "") - # Empty path, that just means $cwd. - func_stripname '' '/' "`pwd`" - func_normal_abspath_result=$func_stripname_result - return - ;; - # The next three entries are used to spot a run of precisely - # two leading slashes without using negated character classes; - # we take advantage of case's first-match behaviour. - ///*) - # Unusual form of absolute path, do nothing. - ;; - //*) - # Not necessarily an ordinary path; POSIX reserves leading '//' - # and for example Cygwin uses it to access remote file shares - # over CIFS/SMB, so we conserve a leading double slash if found. - func_normal_abspath_altnamespace=/ - ;; - /*) - # Absolute path, do nothing. - ;; - *) - # Relative path, prepend $cwd. - func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath - ;; - esac - # Cancel out all the simple stuff to save iterations. We also want - # the path to end with a slash for ease of parsing, so make sure - # there is one (and only one) here. - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` - while :; do - # Processed it all yet? - if test "$func_normal_abspath_tpath" = / ; then - # If we ascended to the root using ".." the result may be empty now. - if test -z "$func_normal_abspath_result" ; then - func_normal_abspath_result=/ - fi - break - fi - func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$pathcar"` - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$pathcdr"` - # Figure out what to do with it - case $func_normal_abspath_tcomponent in + $debug_cmd + + # These SED scripts presuppose an absolute path with a trailing slash. + _G_pathcar='s|^/\([^/]*\).*$|\1|' + _G_pathcdr='s|^/[^/]*||' + _G_removedotparts=':dotsl + s|/\./|/|g + t dotsl + s|/\.$|/|' + _G_collapseslashes='s|/\{1,\}|/|g' + _G_finalslash='s|/*$|/|' + + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in "") - # Trailing empty path component, ignore it. - ;; - ..) - # Parent dir; strip last assembled component from result. - func_dirname "$func_normal_abspath_result" - func_normal_abspath_result=$func_dirname_result - ;; - *) - # Actual path component, append it. - func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent - ;; - esac - done - # Restore leading double-slash if one was found on entry. - func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result -} - -# func_relative_path SRCDIR DSTDIR -# generates a relative path from SRCDIR to DSTDIR, with a trailing -# slash if non-empty, suitable for immediately appending a filename -# without needing to append a separator. -# value returned in "$func_relative_path_result" -func_relative_path () -{ - func_relative_path_result= - func_normal_abspath "$1" - func_relative_path_tlibdir=$func_normal_abspath_result - func_normal_abspath "$2" - func_relative_path_tbindir=$func_normal_abspath_result - - # Ascend the tree starting from libdir - while :; do - # check if we have found a prefix of bindir - case $func_relative_path_tbindir in - $func_relative_path_tlibdir) - # found an exact match - func_relative_path_tcancelled= - break + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return ;; - $func_relative_path_tlibdir*) - # found a matching prefix - func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" - func_relative_path_tcancelled=$func_stripname_result - if test -z "$func_relative_path_result"; then - func_relative_path_result=. - fi - break + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. ;; *) - func_dirname $func_relative_path_tlibdir - func_relative_path_tlibdir=${func_dirname_result} - if test "x$func_relative_path_tlibdir" = x ; then - # Have to descend all the way to the root! - func_relative_path_result=../$func_relative_path_result - func_relative_path_tcancelled=$func_relative_path_tbindir - break - fi - func_relative_path_result=../$func_relative_path_result + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac - done - # Now calculate path; take care to avoid doubling-up slashes. - func_stripname '' '/' "$func_relative_path_result" - func_relative_path_result=$func_stripname_result - func_stripname '/' '/' "$func_relative_path_tcancelled" - if test "x$func_stripname_result" != x ; then - func_relative_path_result=${func_relative_path_result}/${func_stripname_result} - fi - - # Normalisation. If bindir is libdir, return empty string, - # else relative path ending with a slash; either way, target - # file name can be directly appended. - if test ! -z "$func_relative_path_result"; then - func_stripname './' '' "$func_relative_path_result/" - func_relative_path_result=$func_stripname_result - fi + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` + while :; do + # Processed it all yet? + if test / = "$func_normal_abspath_tpath"; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result"; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } -# The name of this program: -func_dirname_and_basename "$progpath" -progname=$func_basename_result -# Make sure we have an absolute path for reexecution: -case $progpath in - [\\/]*|[A-Za-z]:\\*) ;; - *[\\/]*) - progdir=$func_dirname_result - progdir=`cd "$progdir" && pwd` - progpath="$progdir/$progname" - ;; - *) - save_IFS="$IFS" - IFS=${PATH_SEPARATOR-:} - for progdir in $PATH; do - IFS="$save_IFS" - test -x "$progdir/$progname" && break - done - IFS="$save_IFS" - test -n "$progdir" || progdir=`pwd` - progpath="$progdir/$progname" - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed="${SED}"' -e 1s/^X//' -sed_quote_subst='s/\([`"$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution that turns a string into a regex matching for the -# string literally. -sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' - -# Sed substitution that converts a w32 file name or path -# which contains forward slashes, into one that contains -# (escaped) backslashes. A very naive implementation. -lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - -# Re-`\' parameter expansions in output of double_quote_subst that were -# `\'-ed in input to the same. If an odd number of `\' preceded a '$' -# in input to double_quote_subst, that '$' was protected from expansion. -# Since each input `\' is now two `\'s, look for any number of runs of -# four `\'s followed by two `\'s and then a '$'. `\' that '$'. -bs='\\' -bs2='\\\\' -bs4='\\\\\\\\' -dollar='\$' -sed_double_backslash="\ - s/$bs4/&\\ -/g - s/^$bs2$dollar/$bs&/ - s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g - s/\n//g" - -# Standard options: -opt_dry_run=false -opt_help=false -opt_quiet=false -opt_verbose=false -opt_warning=: - -# func_echo arg... -# Echo program name prefixed message, along with the current mode -# name if it has been set yet. -func_echo () +# func_notquiet ARG... +# -------------------- +# Echo program name prefixed message only when not in quiet mode. +func_notquiet () { - $ECHO "$progname: ${opt_mode+$opt_mode: }$*" -} + $debug_cmd -# func_verbose arg... -# Echo program name prefixed message in verbose mode only. -func_verbose () -{ - $opt_verbose && func_echo ${1+"$@"} + $opt_quiet || func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to @@ -455,450 +1028,1113 @@ func_verbose () : } -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "$*" -} -# func_error arg... -# Echo program name prefixed message to standard error. -func_error () +# func_relative_path SRCDIR DSTDIR +# -------------------------------- +# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. +func_relative_path () { - $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 -} + $debug_cmd -# func_warning arg... -# Echo program name prefixed warning message to standard error. -func_warning () -{ - $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=$func_dirname_result + if test -z "$func_relative_path_tlibdir"; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test -n "$func_stripname_result"; then + func_append func_relative_path_result "/$func_stripname_result" + fi + + # Normalisation. If bindir is libdir, return '.' else relative path. + if test -n "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + fi + + test -n "$func_relative_path_result" || func_relative_path_result=. - # bash bug again: : } -# func_fatal_error arg... -# Echo program name prefixed message to standard error, and exit. -func_fatal_error () -{ - func_error ${1+"$@"} - exit $EXIT_FAILURE -} -# func_fatal_help arg... -# Echo program name prefixed message to standard error, followed by -# a help hint, and exit. -func_fatal_help () -{ - func_error ${1+"$@"} - func_fatal_error "$help" -} -help="Try \`$progname --help' for more information." ## default - - -# func_grep expression filename -# Check whether EXPRESSION matches any line of FILENAME, without output. -func_grep () -{ - $GREP "$1" "$2" >/dev/null 2>&1 -} - - -# func_mkdir_p directory-path -# Make sure the entire path to DIRECTORY-PATH is available. -func_mkdir_p () -{ - my_directory_path="$1" - my_dir_list= - - if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then - - # Protect directory names starting with `-' - case $my_directory_path in - -*) my_directory_path="./$my_directory_path" ;; - esac - - # While some portion of DIR does not yet exist... - while test ! -d "$my_directory_path"; do - # ...make a list in topmost first order. Use a colon delimited - # list incase some portion of path contains whitespace. - my_dir_list="$my_directory_path:$my_dir_list" - - # If the last portion added has no slash in it, the list is done - case $my_directory_path in */*) ;; *) break ;; esac - - # ...otherwise throw away the child directory and loop - my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` - done - my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` - - save_mkdir_p_IFS="$IFS"; IFS=':' - for my_dir in $my_dir_list; do - IFS="$save_mkdir_p_IFS" - # mkdir can fail with a `File exist' error if two processes - # try to create one of the directories concurrently. Don't - # stop in that case! - $MKDIR "$my_dir" 2>/dev/null || : - done - IFS="$save_mkdir_p_IFS" - - # Bail out if we (or some other process) failed to create a directory. - test -d "$my_directory_path" || \ - func_fatal_error "Failed to create \`$1'" - fi -} - - -# func_mktempdir [string] -# Make a temporary directory that won't clash with other running -# libtool processes, and avoids race conditions if possible. If -# given, STRING is the basename for that directory. -func_mktempdir () -{ - my_template="${TMPDIR-/tmp}/${1-$progname}" - - if test "$opt_dry_run" = ":"; then - # Return a directory name, but don't create it in dry-run mode - my_tmpdir="${my_template}-$$" - else - - # If mktemp works, use that first and foremost - my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` - - if test ! -d "$my_tmpdir"; then - # Failing that, at least try and use $RANDOM to avoid a race - my_tmpdir="${my_template}-${RANDOM-0}$$" - - save_mktempdir_umask=`umask` - umask 0077 - $MKDIR "$my_tmpdir" - umask $save_mktempdir_umask - fi - - # If we're not in dry-run mode, bomb out on failure - test -d "$my_tmpdir" || \ - func_fatal_error "cannot create temporary directory \`$my_tmpdir'" - fi - - $ECHO "$my_tmpdir" -} - - -# func_quote_for_eval arg -# Aesthetically quote ARG to be evaled later. -# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT -# is double-quoted, suitable for a subsequent eval, whereas -# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters -# which are still active within double quotes backslashified. +# func_quote_for_eval ARG... +# -------------------------- +# Aesthetically quote ARGs to be evaled later. +# This function returns two values: +# i) func_quote_for_eval_result +# double-quoted, suitable for a subsequent eval +# ii) func_quote_for_eval_unquoted_result +# has all characters that are still active within double +# quotes backslashified. func_quote_for_eval () { - case $1 in - *[\\\`\"\$]*) - func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; - *) - func_quote_for_eval_unquoted_result="$1" ;; - esac + $debug_cmd - case $func_quote_for_eval_unquoted_result in - # Double-quote args containing shell metacharacters to delay - # word splitting, command substitution and and variable - # expansion for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" - ;; - *) - func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" - esac + func_quote_for_eval_unquoted_result= + func_quote_for_eval_result= + while test 0 -lt $#; do + case $1 in + *[\\\`\"\$]*) + _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; + *) + _G_unquoted_arg=$1 ;; + esac + if test -n "$func_quote_for_eval_unquoted_result"; then + func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" + else + func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" + fi + + case $_G_unquoted_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and variable expansion + # for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + _G_quoted_arg=\"$_G_unquoted_arg\" + ;; + *) + _G_quoted_arg=$_G_unquoted_arg + ;; + esac + + if test -n "$func_quote_for_eval_result"; then + func_append func_quote_for_eval_result " $_G_quoted_arg" + else + func_append func_quote_for_eval_result "$_G_quoted_arg" + fi + shift + done } -# func_quote_for_expand arg +# func_quote_for_expand ARG +# ------------------------- # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { + $debug_cmd + case $1 in *[\\\`\"]*) - my_arg=`$ECHO "$1" | $SED \ - -e "$double_quote_subst" -e "$sed_double_backslash"` ;; + _G_arg=`$ECHO "$1" | $SED \ + -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; *) - my_arg="$1" ;; + _G_arg=$1 ;; esac - case $my_arg in + case $_G_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - my_arg="\"$my_arg\"" + _G_arg=\"$_G_arg\" ;; esac - func_quote_for_expand_result="$my_arg" + func_quote_for_expand_result=$_G_arg } -# func_show_eval cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# func_stripname PREFIX SUFFIX NAME +# --------------------------------- +# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_stripname () + { + $debug_cmd + + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary variable first. + func_stripname_result=$3 + func_stripname_result=${func_stripname_result#"$1"} + func_stripname_result=${func_stripname_result%"$2"} + }' +else + func_stripname () + { + $debug_cmd + + case $2 in + .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; + *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; + esac + } +fi + + +# func_show_eval CMD [FAIL_EXP] +# ----------------------------- +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { - my_cmd="$1" - my_fail_exp="${2-:}" + $debug_cmd - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } + _G_cmd=$1 + _G_fail_exp=${2-':'} - if ${opt_dry_run-false}; then :; else - eval "$my_cmd" - my_status=$? - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" + func_quote_for_expand "$_G_cmd" + eval "func_notquiet $func_quote_for_expand_result" + + $opt_dry_run || { + eval "$_G_cmd" + _G_status=$? + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" fi - fi + } } -# func_show_eval_locale cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# func_show_eval_locale CMD [FAIL_EXP] +# ------------------------------------ +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { - my_cmd="$1" - my_fail_exp="${2-:}" + $debug_cmd - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" + _G_cmd=$1 + _G_fail_exp=${2-':'} + + $opt_quiet || { + func_quote_for_expand "$_G_cmd" eval "func_echo $func_quote_for_expand_result" } - if ${opt_dry_run-false}; then :; else - eval "$lt_user_locale - $my_cmd" - my_status=$? - eval "$lt_safe_locale" - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" + $opt_dry_run || { + eval "$_G_user_locale + $_G_cmd" + _G_status=$? + eval "$_G_safe_locale" + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" fi - fi + } } + # func_tr_sh +# ---------- # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { - case $1 in - [0-9]* | *[!a-zA-Z0-9_]*) - func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` - ;; - * ) - func_tr_sh_result=$1 - ;; - esac + $debug_cmd + + case $1 in + [0-9]* | *[!a-zA-Z0-9_]*) + func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` + ;; + * ) + func_tr_sh_result=$1 + ;; + esac } -# func_version -# Echo version message to standard output and exit. -func_version () +# func_verbose ARG... +# ------------------- +# Echo program name prefixed message in verbose mode only. +func_verbose () { - $opt_debug + $debug_cmd - $SED -n '/(C)/!b go - :more - /\./!{ - N - s/\n# / / - b more - } - :go - /^# '$PROGRAM' (GNU /,/# warranty; / { - s/^# // - s/^# *$// - s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ - p - }' < "$progpath" - exit $? + $opt_verbose && func_echo "$*" + + : } -# func_usage -# Echo short help message to standard output and exit. -func_usage () + +# func_warn_and_continue ARG... +# ----------------------------- +# Echo program name prefixed warning message to standard error. +func_warn_and_continue () { - $opt_debug + $debug_cmd - $SED -n '/^# Usage:/,/^# *.*--help/ { - s/^# // - s/^# *$// - s/\$progname/'$progname'/ - p - }' < "$progpath" - echo - $ECHO "run \`$progname --help | more' for full usage" - exit $? + $require_term_colors + + func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 } -# func_help [NOEXIT] -# Echo long help message to standard output and exit, -# unless 'noexit' is passed as argument. + +# func_warning CATEGORY ARG... +# ---------------------------- +# Echo program name prefixed warning message to standard error. Warning +# messages can be filtered according to CATEGORY, where this function +# elides messages where CATEGORY is not listed in the global variable +# 'opt_warning_types'. +func_warning () +{ + $debug_cmd + + # CATEGORY must be in the warning_categories list! + case " $warning_categories " in + *" $1 "*) ;; + *) func_internal_error "invalid warning category '$1'" ;; + esac + + _G_category=$1 + shift + + case " $opt_warning_types " in + *" $_G_category "*) $warning_func ${1+"$@"} ;; + esac +} + + +# func_sort_ver VER1 VER2 +# ----------------------- +# 'sort -V' is not generally available. +# Note this deviates from the version comparison in automake +# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a +# but this should suffice as we won't be specifying old +# version formats or redundant trailing .0 in bootstrap.conf. +# If we did want full compatibility then we should probably +# use m4_version_compare from autoconf. +func_sort_ver () +{ + $debug_cmd + + printf '%s\n%s\n' "$1" "$2" \ + | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n +} + +# func_lt_ver PREV CURR +# --------------------- +# Return true if PREV and CURR are in the correct order according to +# func_sort_ver, otherwise false. Use it like this: +# +# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." +func_lt_ver () +{ + $debug_cmd + + test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: +#! /bin/sh + +# Set a version string for this script. +scriptversion=2014-01-07.03; # UTC + +# A portable, pluggable option parser for Bourne shell. +# Written by Gary V. Vaughan, 2010 + +# Copyright (C) 2010-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Please report bugs or propose patches to gary@gnu.org. + + +## ------ ## +## Usage. ## +## ------ ## + +# This file is a library for parsing options in your shell scripts along +# with assorted other useful supporting features that you can make use +# of too. +# +# For the simplest scripts you might need only: +# +# #!/bin/sh +# . relative/path/to/funclib.sh +# . relative/path/to/options-parser +# scriptversion=1.0 +# func_options ${1+"$@"} +# eval set dummy "$func_options_result"; shift +# ...rest of your script... +# +# In order for the '--version' option to work, you will need to have a +# suitably formatted comment like the one at the top of this file +# starting with '# Written by ' and ending with '# warranty; '. +# +# For '-h' and '--help' to work, you will also need a one line +# description of your script's purpose in a comment directly above the +# '# Written by ' line, like the one at the top of this file. +# +# The default options also support '--debug', which will turn on shell +# execution tracing (see the comment above debug_cmd below for another +# use), and '--verbose' and the func_verbose function to allow your script +# to display verbose messages only when your user has specified +# '--verbose'. +# +# After sourcing this file, you can plug processing for additional +# options by amending the variables from the 'Configuration' section +# below, and following the instructions in the 'Option parsing' +# section further down. + +## -------------- ## +## Configuration. ## +## -------------- ## + +# You should override these variables in your script after sourcing this +# file so that they reflect the customisations you have added to the +# option parser. + +# The usage line for option parsing errors and the start of '-h' and +# '--help' output messages. You can embed shell variables for delayed +# expansion at the time the message is displayed, but you will need to +# quote other shell meta-characters carefully to prevent them being +# expanded when the contents are evaled. +usage='$progpath [OPTION]...' + +# Short help message in response to '-h' and '--help'. Add to this or +# override it after sourcing this library to reflect the full set of +# options your script accepts. +usage_message="\ + --debug enable verbose shell tracing + -W, --warnings=CATEGORY + report the warnings falling in CATEGORY [all] + -v, --verbose verbosely report processing + --version print version information and exit + -h, --help print short or long help message and exit +" + +# Additional text appended to 'usage_message' in response to '--help'. +long_help_message=" +Warning categories include: + 'all' show all warnings + 'none' turn off all the warnings + 'error' warnings are treated as fatal errors" + +# Help message printed before fatal option parsing errors. +fatal_help="Try '\$progname --help' for more information." + + + +## ------------------------- ## +## Hook function management. ## +## ------------------------- ## + +# This section contains functions for adding, removing, and running hooks +# to the main code. A hook is just a named list of of function, that can +# be run in order later on. + +# func_hookable FUNC_NAME +# ----------------------- +# Declare that FUNC_NAME will run hooks added with +# 'func_add_hook FUNC_NAME ...'. +func_hookable () +{ + $debug_cmd + + func_append hookable_fns " $1" +} + + +# func_add_hook FUNC_NAME HOOK_FUNC +# --------------------------------- +# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must +# first have been declared "hookable" by a call to 'func_hookable'. +func_add_hook () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not accept hook functions." ;; + esac + + eval func_append ${1}_hooks '" $2"' +} + + +# func_remove_hook FUNC_NAME HOOK_FUNC +# ------------------------------------ +# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. +func_remove_hook () +{ + $debug_cmd + + eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' +} + + +# func_run_hooks FUNC_NAME [ARG]... +# --------------------------------- +# Run all hook functions registered to FUNC_NAME. +# It is assumed that the list of hook functions contains nothing more +# than a whitespace-delimited list of legal shell function names, and +# no effort is wasted trying to catch shell meta-characters or preserve +# whitespace. +func_run_hooks () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not support hook funcions.n" ;; + esac + + eval _G_hook_fns=\$$1_hooks; shift + + for _G_hook in $_G_hook_fns; do + eval $_G_hook '"$@"' + + # store returned options list back into positional + # parameters for next 'cmd' execution. + eval _G_hook_result=\$${_G_hook}_result + eval set dummy "$_G_hook_result"; shift + done + + func_quote_for_eval ${1+"$@"} + func_run_hooks_result=$func_quote_for_eval_result +} + + + +## --------------- ## +## Option parsing. ## +## --------------- ## + +# In order to add your own option parsing hooks, you must accept the +# full positional parameter list in your hook function, remove any +# options that you action, and then pass back the remaining unprocessed +# options in '_result', escaped suitably for +# 'eval'. Like this: +# +# my_options_prep () +# { +# $debug_cmd +# +# # Extend the existing usage message. +# usage_message=$usage_message' +# -s, --silent don'\''t print informational messages +# ' +# +# func_quote_for_eval ${1+"$@"} +# my_options_prep_result=$func_quote_for_eval_result +# } +# func_add_hook func_options_prep my_options_prep +# +# +# my_silent_option () +# { +# $debug_cmd +# +# # Note that for efficiency, we parse as many options as we can +# # recognise in a loop before passing the remainder back to the +# # caller on the first unrecognised argument we encounter. +# while test $# -gt 0; do +# opt=$1; shift +# case $opt in +# --silent|-s) opt_silent=: ;; +# # Separate non-argument short options: +# -s*) func_split_short_opt "$_G_opt" +# set dummy "$func_split_short_opt_name" \ +# "-$func_split_short_opt_arg" ${1+"$@"} +# shift +# ;; +# *) set dummy "$_G_opt" "$*"; shift; break ;; +# esac +# done +# +# func_quote_for_eval ${1+"$@"} +# my_silent_option_result=$func_quote_for_eval_result +# } +# func_add_hook func_parse_options my_silent_option +# +# +# my_option_validation () +# { +# $debug_cmd +# +# $opt_silent && $opt_verbose && func_fatal_help "\ +# '--silent' and '--verbose' options are mutually exclusive." +# +# func_quote_for_eval ${1+"$@"} +# my_option_validation_result=$func_quote_for_eval_result +# } +# func_add_hook func_validate_options my_option_validation +# +# You'll alse need to manually amend $usage_message to reflect the extra +# options you parse. It's preferable to append if you can, so that +# multiple option parsing hooks can be added safely. + + +# func_options [ARG]... +# --------------------- +# All the functions called inside func_options are hookable. See the +# individual implementations for details. +func_hookable func_options +func_options () +{ + $debug_cmd + + func_options_prep ${1+"$@"} + eval func_parse_options \ + ${func_options_prep_result+"$func_options_prep_result"} + eval func_validate_options \ + ${func_parse_options_result+"$func_parse_options_result"} + + eval func_run_hooks func_options \ + ${func_validate_options_result+"$func_validate_options_result"} + + # save modified positional parameters for caller + func_options_result=$func_run_hooks_result +} + + +# func_options_prep [ARG]... +# -------------------------- +# All initialisations required before starting the option parse loop. +# Note that when calling hook functions, we pass through the list of +# positional parameters. If a hook function modifies that list, and +# needs to propogate that back to rest of this script, then the complete +# modified list must be put in 'func_run_hooks_result' before +# returning. +func_hookable func_options_prep +func_options_prep () +{ + $debug_cmd + + # Option defaults: + opt_verbose=false + opt_warning_types= + + func_run_hooks func_options_prep ${1+"$@"} + + # save modified positional parameters for caller + func_options_prep_result=$func_run_hooks_result +} + + +# func_parse_options [ARG]... +# --------------------------- +# The main option parsing loop. +func_hookable func_parse_options +func_parse_options () +{ + $debug_cmd + + func_parse_options_result= + + # this just eases exit handling + while test $# -gt 0; do + # Defer to hook functions for initial option parsing, so they + # get priority in the event of reusing an option name. + func_run_hooks func_parse_options ${1+"$@"} + + # Adjust func_parse_options positional parameters to match + eval set dummy "$func_run_hooks_result"; shift + + # Break out of the loop if we already parsed every option. + test $# -gt 0 || break + + _G_opt=$1 + shift + case $_G_opt in + --debug|-x) debug_cmd='set -x' + func_echo "enabling shell trace mode" + $debug_cmd + ;; + + --no-warnings|--no-warning|--no-warn) + set dummy --warnings none ${1+"$@"} + shift + ;; + + --warnings|--warning|-W) + test $# = 0 && func_missing_arg $_G_opt && break + case " $warning_categories $1" in + *" $1 "*) + # trailing space prevents matching last $1 above + func_append_uniq opt_warning_types " $1" + ;; + *all) + opt_warning_types=$warning_categories + ;; + *none) + opt_warning_types=none + warning_func=: + ;; + *error) + opt_warning_types=$warning_categories + warning_func=func_fatal_error + ;; + *) + func_fatal_error \ + "unsupported warning category: '$1'" + ;; + esac + shift + ;; + + --verbose|-v) opt_verbose=: ;; + --version) func_version ;; + -\?|-h) func_usage ;; + --help) func_help ;; + + # Separate optargs to long options (plugins may need this): + --*=*) func_split_equals "$_G_opt" + set dummy "$func_split_equals_lhs" \ + "$func_split_equals_rhs" ${1+"$@"} + shift + ;; + + # Separate optargs to short options: + -W*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + # Separate non-argument short options: + -\?*|-h*|-v*|-x*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "-$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + --) break ;; + -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + esac + done + + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + func_parse_options_result=$func_quote_for_eval_result +} + + +# func_validate_options [ARG]... +# ------------------------------ +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +func_hookable func_validate_options +func_validate_options () +{ + $debug_cmd + + # Display all warnings if -W was not given. + test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" + + func_run_hooks func_validate_options ${1+"$@"} + + # Bail if the options were screwed! + $exit_cmd $EXIT_FAILURE + + # save modified positional parameters for caller + func_validate_options_result=$func_run_hooks_result +} + + + +## ----------------- ## +## Helper functions. ## +## ----------------- ## + +# This section contains the helper functions used by the rest of the +# hookable option parser framework in ascii-betical order. + + +# func_fatal_help ARG... +# ---------------------- +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + $debug_cmd + + eval \$ECHO \""Usage: $usage"\" + eval \$ECHO \""$fatal_help"\" + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + + +# func_help +# --------- +# Echo long help message to standard output and exit. func_help () { - $opt_debug + $debug_cmd - $SED -n '/^# Usage:/,/# Report bugs to/ { - :print - s/^# // - s/^# *$// - s*\$progname*'$progname'* - s*\$host*'"$host"'* - s*\$SHELL*'"$SHELL"'* - s*\$LTCC*'"$LTCC"'* - s*\$LTCFLAGS*'"$LTCFLAGS"'* - s*\$LD*'"$LD"'* - s/\$with_gnu_ld/'"$with_gnu_ld"'/ - s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ - s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ - p - d - } - /^# .* home page:/b print - /^# General help using/b print - ' < "$progpath" - ret=$? - if test -z "$1"; then - exit $ret - fi + func_usage_message + $ECHO "$long_help_message" + exit 0 } -# func_missing_arg argname + +# func_missing_arg ARGNAME +# ------------------------ # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { - $opt_debug + $debug_cmd - func_error "missing argument for $1." + func_error "Missing argument for '$1'." exit_cmd=exit } -# func_split_short_opt shortopt +# func_split_equals STRING +# ------------------------ +# Set func_split_equals_lhs and func_split_equals_rhs shell variables after +# splitting STRING at the '=' sign. +test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=${1%%=*} + func_split_equals_rhs=${1#*=} + test "x$func_split_equals_lhs" = "x$1" \ + && func_split_equals_rhs= + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` + func_split_equals_rhs= + test "x$func_split_equals_lhs" = "x$1" \ + || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` + } +fi #func_split_equals + + +# func_split_short_opt SHORTOPT +# ----------------------------- # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. -func_split_short_opt () +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"} + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` + func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` + } +fi #func_split_short_opt + + +# func_usage +# ---------- +# Echo short help message to standard output and exit. +func_usage () { - my_sed_short_opt='1s/^\(..\).*$/\1/;q' - my_sed_short_rest='1s/^..\(.*\)$/\1/;q' + $debug_cmd - func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` - func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` -} # func_split_short_opt may be replaced by extended shell implementation + func_usage_message + $ECHO "Run '$progname --help |${PAGER-more}' for full usage" + exit 0 +} -# func_split_long_opt longopt -# Set func_split_long_opt_name and func_split_long_opt_arg shell -# variables after splitting LONGOPT at the `=' sign. -func_split_long_opt () +# func_usage_message +# ------------------ +# Echo short help message to standard output. +func_usage_message () { - my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' - my_sed_long_arg='1s/^--[^=]*=//' + $debug_cmd - func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` - func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` -} # func_split_long_opt may be replaced by extended shell implementation - -exit_cmd=: + eval \$ECHO \""Usage: $usage"\" + echo + $SED -n 's|^# || + /^Written by/{ + x;p;x + } + h + /^Written by/q' < "$progpath" + echo + eval \$ECHO \""$usage_message"\" +} - - - -magic="%%%MAGIC variable%%%" -magic_exe="%%%MAGIC EXE variable%%%" - -# Global variables. -nonopt= -preserve_args= -lo2o="s/\\.lo\$/.${objext}/" -o2lo="s/\\.${objext}\$/.lo/" -extracted_archives= -extracted_serial=0 - -# If this variable is set in any of the actions, the command in it -# will be execed at the end. This prevents here-documents from being -# left over by shells. -exec_cmd= - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () +# func_version +# ------------ +# Echo version message to standard output and exit. +func_version () { - eval "${1}=\$${1}\${2}" -} # func_append may be replaced by extended shell implementation + $debug_cmd -# func_append_quoted var value -# Quote VALUE and append to the end of shell variable VAR, separated -# by a space. -func_append_quoted () + printf '%s\n' "$progname $scriptversion" + $SED -n ' + /(C)/!b go + :more + /\./!{ + N + s|\n# | | + b more + } + :go + /^# Written by /,/# warranty; / { + s|^# || + s|^# *$|| + s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| + p + } + /^# Written by / { + s|^# || + p + } + /^warranty; /q' < "$progpath" + + exit $? +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: + +# Set a version string. +scriptversion='(GNU libtool) 2.4.6' + + +# func_echo ARG... +# ---------------- +# Libtool also displays the current mode in messages, so override +# funclib.sh func_echo with this custom definition. +func_echo () { - func_quote_for_eval "${2}" - eval "${1}=\$${1}\\ \$func_quote_for_eval_result" -} # func_append_quoted may be replaced by extended shell implementation + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" + done + IFS=$func_echo_IFS +} -# func_arith arithmetic-term... -func_arith () +# func_warning ARG... +# ------------------- +# Libtool warnings are not categorized, so override funclib.sh +# func_warning with this simpler definition. +func_warning () { - func_arith_result=`expr "${@}"` -} # func_arith may be replaced by extended shell implementation + $debug_cmd + + $warning_func ${1+"$@"} +} -# func_len string -# STRING may not start with a hyphen. -func_len () +## ---------------- ## +## Options parsing. ## +## ---------------- ## + +# Hook in the functions to make sure our own options are parsed during +# the option parsing loop. + +usage='$progpath [OPTION]... [MODE-ARG]...' + +# Short help message in response to '-h'. +usage_message="Options: + --config show all configuration variables + --debug enable verbose shell tracing + -n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --mode=MODE use operation mode MODE + --no-warnings equivalent to '-Wnone' + --preserve-dup-deps don't remove duplicate dependency libraries + --quiet, --silent don't print informational messages + --tag=TAG use configuration variables from tag TAG + -v, --verbose print more informational messages than default + --version print version information + -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] + -h, --help, --help-all print short, long, or detailed help message +" + +# Additional text appended to 'usage_message' in response to '--help'. +func_help () { - func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` -} # func_len may be replaced by extended shell implementation + $debug_cmd + + func_usage_message + $ECHO "$long_help_message + +MODE must be one of the following: + + clean remove files from the build directory + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. When passed as first option, +'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. +Try '$progname --help --mode=MODE' for a more detailed description of MODE. + +When reporting a bug, please describe a test case to reproduce it and +include the following information: + + host-triplet: $host + shell: $SHELL + compiler: $LTCC + compiler flags: $LTCFLAGS + linker: $LD (gnu? $with_gnu_ld) + version: $progname (GNU libtool) 2.4.6 + automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` + autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` + +Report bugs to . +GNU libtool home page: . +General help using GNU software: ." + exit 0 +} -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` -} # func_lo2o may be replaced by extended shell implementation +# func_lo2o OBJECT-NAME +# --------------------- +# Transform OBJECT-NAME from a '.lo' suffix to the platform specific +# object suffix. + +lo2o=s/\\.lo\$/.$objext/ +o2lo=s/\\.$objext\$/.lo/ + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_lo2o () + { + case $1 in + *.lo) func_lo2o_result=${1%.lo}.$objext ;; + * ) func_lo2o_result=$1 ;; + esac + }' + + # func_xform LIBOBJ-OR-SOURCE + # --------------------------- + # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) + # suffix to a '.lo' libtool-object suffix. + eval 'func_xform () + { + func_xform_result=${1%.*}.lo + }' +else + # ...otherwise fall back to using sed. + func_lo2o () + { + func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` + } + + func_xform () + { + func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` + } +fi -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` -} # func_xform may be replaced by extended shell implementation - - -# func_fatal_configuration arg... +# func_fatal_configuration ARG... +# ------------------------------- # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { - func_error ${1+"$@"} - func_error "See the $PACKAGE documentation for more information." - func_fatal_error "Fatal configuration error." + func__fatal_error ${1+"$@"} \ + "See the $PACKAGE documentation for more information." \ + "Fatal configuration error." } # func_config +# ----------- # Display the configuration for all the tags in this script. func_config () { @@ -916,17 +2152,19 @@ func_config () exit $? } + # func_features +# ------------- # Display the features supported by this script. func_features () { echo "host: $host" - if test "$build_libtool_libs" = yes; then + if test yes = "$build_libtool_libs"; then echo "enable shared libraries" else echo "disable shared libraries" fi - if test "$build_old_libs" = yes; then + if test yes = "$build_old_libs"; then echo "enable static libraries" else echo "disable static libraries" @@ -935,314 +2173,350 @@ func_features () exit $? } -# func_enable_tag tagname + +# func_enable_tag TAGNAME +# ----------------------- # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { - # Global variable: - tagname="$1" + # Global variable: + tagname=$1 - re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" - re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" - sed_extractcf="/$re_begincf/,/$re_endcf/p" + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf=/$re_begincf/,/$re_endcf/p - # Validate tagname. - case $tagname in - *[!-_A-Za-z0-9,/]*) - func_fatal_error "invalid tag name: $tagname" - ;; - esac + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac - # Don't test for the "default" C tag, as we know it's - # there but not specially marked. - case $tagname in - CC) ;; + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; *) - if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then - taglist="$taglist $tagname" + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" - # Evaluate the configuration. Be careful to quote the path - # and the sed script, to avoid splitting on whitespace, but - # also don't use non-portable quotes within backquotes within - # quotes we have to do it in 2 steps: - extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` - eval "$extractedcf" - else - func_error "ignoring unknown tag $tagname" - fi - ;; - esac + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac } + # func_check_version_match +# ------------------------ # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { - if test "$package_revision" != "$macro_revision"; then - if test "$VERSION" != "$macro_version"; then - if test -z "$macro_version"; then - cat >&2 <<_LT_EOF + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF - else - cat >&2 <<_LT_EOF + else + cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF - fi - else - cat >&2 <<_LT_EOF + fi + else + cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF - fi + fi - exit $EXIT_MISMATCH - fi + exit $EXIT_MISMATCH + fi } -# Shorthand for --mode=foo, only valid as the first argument -case $1 in -clean|clea|cle|cl) - shift; set dummy --mode clean ${1+"$@"}; shift - ;; -compile|compil|compi|comp|com|co|c) - shift; set dummy --mode compile ${1+"$@"}; shift - ;; -execute|execut|execu|exec|exe|ex|e) - shift; set dummy --mode execute ${1+"$@"}; shift - ;; -finish|finis|fini|fin|fi|f) - shift; set dummy --mode finish ${1+"$@"}; shift - ;; -install|instal|insta|inst|ins|in|i) - shift; set dummy --mode install ${1+"$@"}; shift - ;; -link|lin|li|l) - shift; set dummy --mode link ${1+"$@"}; shift - ;; -uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) - shift; set dummy --mode uninstall ${1+"$@"}; shift - ;; -esac - - - -# Option defaults: -opt_debug=: -opt_dry_run=false -opt_config=false -opt_preserve_dup_deps=false -opt_features=false -opt_finish=false -opt_help=false -opt_help_all=false -opt_silent=: -opt_warning=: -opt_verbose=: -opt_silent=false -opt_verbose=false - - -# Parse options once, thoroughly. This comes as soon as possible in the -# script to make things like `--version' happen as quickly as we can. +# libtool_options_prep [ARG]... +# ----------------------------- +# Preparation for options parsed by libtool. +libtool_options_prep () { - # this just eases exit handling - while test $# -gt 0; do - opt="$1" - shift - case $opt in - --debug|-x) opt_debug='set -x' - func_echo "enabling shell trace mode" - $opt_debug - ;; - --dry-run|--dryrun|-n) - opt_dry_run=: - ;; - --config) - opt_config=: -func_config - ;; - --dlopen|-dlopen) - optarg="$1" - opt_dlopen="${opt_dlopen+$opt_dlopen -}$optarg" - shift - ;; - --preserve-dup-deps) - opt_preserve_dup_deps=: - ;; - --features) - opt_features=: -func_features - ;; - --finish) - opt_finish=: -set dummy --mode finish ${1+"$@"}; shift - ;; - --help) - opt_help=: - ;; - --help-all) - opt_help_all=: -opt_help=': help-all' - ;; - --mode) - test $# = 0 && func_missing_arg $opt && break - optarg="$1" - opt_mode="$optarg" -case $optarg in - # Valid mode arguments: - clean|compile|execute|finish|install|link|relink|uninstall) ;; + $debug_mode - # Catch anything else as an error - *) func_error "invalid argument for $opt" - exit_cmd=exit - break - ;; -esac - shift - ;; - --no-silent|--no-quiet) - opt_silent=false -func_append preserve_args " $opt" - ;; - --no-warning|--no-warn) - opt_warning=false -func_append preserve_args " $opt" - ;; - --no-verbose) - opt_verbose=false -func_append preserve_args " $opt" - ;; - --silent|--quiet) - opt_silent=: -func_append preserve_args " $opt" - opt_verbose=false - ;; - --verbose|-v) - opt_verbose=: -func_append preserve_args " $opt" -opt_silent=false - ;; - --tag) - test $# = 0 && func_missing_arg $opt && break - optarg="$1" - opt_tag="$optarg" -func_append preserve_args " $opt $optarg" -func_enable_tag "$optarg" - shift - ;; + # Option defaults: + opt_config=false + opt_dlopen= + opt_dry_run=false + opt_help=false + opt_mode= + opt_preserve_dup_deps=false + opt_quiet=false - -\?|-h) func_usage ;; - --help) func_help ;; - --version) func_version ;; + nonopt= + preserve_args= - # Separate optargs to long options: - --*=*) - func_split_long_opt "$opt" - set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} - shift - ;; - - # Separate non-argument short options: - -\?*|-h*|-n*|-v*) - func_split_short_opt "$opt" - set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} - shift - ;; - - --) break ;; - -*) func_fatal_help "unrecognized option \`$opt'" ;; - *) set dummy "$opt" ${1+"$@"}; shift; break ;; + # Shorthand for --mode=foo, only valid as the first argument + case $1 in + clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; + compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; + execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; + finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; + install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; + link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; + uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; esac - done - # Validate options: - - # save first non-option argument - if test "$#" -gt 0; then - nonopt="$opt" - shift - fi - - # preserve --debug - test "$opt_debug" = : || func_append preserve_args " --debug" - - case $host in - *cygwin* | *mingw* | *pw32* | *cegcc*) - # don't eliminate duplications in $postdeps and $predeps - opt_duplicate_compiler_generated_deps=: - ;; - *) - opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps - ;; - esac - - $opt_help || { - # Sanity checks first: - func_check_version_match - - if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then - func_fatal_configuration "not configured to build any kind of library" - fi - - # Darwin sucks - eval std_shrext=\"$shrext_cmds\" - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$opt_dlopen" && test "$opt_mode" != execute; then - func_error "unrecognized option \`-dlopen'" - $ECHO "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Change the help message to a mode-specific one. - generic_help="$help" - help="Try \`$progname --help --mode=$opt_mode' for more information." - } - - - # Bail if the options were screwed - $exit_cmd $EXIT_FAILURE + # Pass back the list of options. + func_quote_for_eval ${1+"$@"} + libtool_options_prep_result=$func_quote_for_eval_result } +func_add_hook func_options_prep libtool_options_prep +# libtool_parse_options [ARG]... +# --------------------------------- +# Provide handling for libtool specific options. +libtool_parse_options () +{ + $debug_cmd + + # Perform our own loop to consume as many options as possible in + # each iteration. + while test $# -gt 0; do + _G_opt=$1 + shift + case $_G_opt in + --dry-run|--dryrun|-n) + opt_dry_run=: + ;; + + --config) func_config ;; + + --dlopen|-dlopen) + opt_dlopen="${opt_dlopen+$opt_dlopen +}$1" + shift + ;; + + --preserve-dup-deps) + opt_preserve_dup_deps=: ;; + + --features) func_features ;; + + --finish) set dummy --mode finish ${1+"$@"}; shift ;; + + --help) opt_help=: ;; + + --help-all) opt_help=': help-all' ;; + + --mode) test $# = 0 && func_missing_arg $_G_opt && break + opt_mode=$1 + case $1 in + # Valid mode arguments: + clean|compile|execute|finish|install|link|relink|uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $_G_opt" + exit_cmd=exit + break + ;; + esac + shift + ;; + + --no-silent|--no-quiet) + opt_quiet=false + func_append preserve_args " $_G_opt" + ;; + + --no-warnings|--no-warning|--no-warn) + opt_warning=false + func_append preserve_args " $_G_opt" + ;; + + --no-verbose) + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --silent|--quiet) + opt_quiet=: + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --tag) test $# = 0 && func_missing_arg $_G_opt && break + opt_tag=$1 + func_append preserve_args " $_G_opt $1" + func_enable_tag "$1" + shift + ;; + + --verbose|-v) opt_quiet=false + opt_verbose=: + func_append preserve_args " $_G_opt" + ;; + + # An option not handled by this hook function: + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + esac + done + + + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + libtool_parse_options_result=$func_quote_for_eval_result +} +func_add_hook func_parse_options libtool_parse_options + + + +# libtool_validate_options [ARG]... +# --------------------------------- +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +libtool_validate_options () +{ + # save first non-option argument + if test 0 -lt $#; then + nonopt=$1 + shift + fi + + # preserve --debug + test : = "$debug_cmd" || func_append preserve_args " --debug" + + case $host in + # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 + # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 + *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps + ;; + esac + + $opt_help || { + # Sanity checks first: + func_check_version_match + + test yes != "$build_libtool_libs" \ + && test yes != "$build_old_libs" \ + && func_fatal_configuration "not configured to build any kind of library" + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$opt_dlopen" && test execute != "$opt_mode"; then + func_error "unrecognized option '-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help=$help + help="Try '$progname --help --mode=$opt_mode' for more information." + } + + # Pass back the unparsed argument list + func_quote_for_eval ${1+"$@"} + libtool_validate_options_result=$func_quote_for_eval_result +} +func_add_hook func_validate_options libtool_validate_options + + +# Process options as early as possible so that --help and --version +# can return quickly. +func_options ${1+"$@"} +eval set dummy "$func_options_result"; shift + ## ----------- ## ## Main. ## ## ----------- ## +magic='%%%MAGIC variable%%%' +magic_exe='%%%MAGIC EXE variable%%%' + +# Global variables. +extracted_archives= +extracted_serial=0 + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# func_generated_by_libtool +# True iff stdin has been generated by Libtool. This function is only +# a basic sanity check; it will hardly flush out determined imposters. +func_generated_by_libtool_p () +{ + $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + # func_lalib_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. +# True iff FILE is a libtool '.la' library or '.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && - $SED -e 4q "$1" 2>/dev/null \ - | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 + $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p } # func_lalib_unsafe_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. +# True iff FILE is a libtool '.la' library or '.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be -# fatal anyway. Works if `file' does not exist. +# fatal anyway. Works if 'file' does not exist. func_lalib_unsafe_p () { lalib_p=no @@ -1250,13 +2524,13 @@ func_lalib_unsafe_p () for lalib_p_l in 1 2 3 4 do read lalib_p_line - case "$lalib_p_line" in + case $lalib_p_line in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi - test "$lalib_p" = yes + test yes = "$lalib_p" } # func_ltwrapper_script_p file @@ -1265,7 +2539,8 @@ func_lalib_unsafe_p () # determined imposters. func_ltwrapper_script_p () { - func_lalib_p "$1" + test -f "$1" && + $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p } # func_ltwrapper_executable_p file @@ -1290,7 +2565,7 @@ func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" - func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" + func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper } # func_ltwrapper_p file @@ -1309,11 +2584,13 @@ func_ltwrapper_p () # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { - $opt_debug + $debug_cmd + save_ifs=$IFS; IFS='~' for cmd in $1; do - IFS=$save_ifs + IFS=$sp$nl eval cmd=\"$cmd\" + IFS=$save_ifs func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs @@ -1325,10 +2602,11 @@ func_execute_cmds () # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing -# `FILE.' does not work on cygwin managed mounts. +# 'FILE.' does not work on cygwin managed mounts. func_source () { - $opt_debug + $debug_cmd + case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; @@ -1355,10 +2633,10 @@ func_resolve_sysroot () # store the result into func_replace_sysroot_result. func_replace_sysroot () { - case "$lt_sysroot:$1" in + case $lt_sysroot:$1 in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" - func_replace_sysroot_result="=$func_stripname_result" + func_replace_sysroot_result='='$func_stripname_result ;; *) # Including no sysroot. @@ -1375,7 +2653,8 @@ func_replace_sysroot () # arg is usually of the form 'gcc ...' func_infer_tag () { - $opt_debug + $debug_cmd + if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do @@ -1394,7 +2673,7 @@ func_infer_tag () for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. - eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. @@ -1419,7 +2698,7 @@ func_infer_tag () # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" - func_fatal_error "specify a tag with \`--tag'" + func_fatal_error "specify a tag with '--tag'" # else # func_verbose "using $tagname tagged configuration" fi @@ -1435,15 +2714,15 @@ func_infer_tag () # but don't create it if we're doing a dry run. func_write_libtool_object () { - write_libobj=${1} - if test "$build_libtool_libs" = yes; then - write_lobj=\'${2}\' + write_libobj=$1 + if test yes = "$build_libtool_libs"; then + write_lobj=\'$2\' else write_lobj=none fi - if test "$build_old_libs" = yes; then - write_oldobj=\'${3}\' + if test yes = "$build_old_libs"; then + write_oldobj=\'$3\' else write_oldobj=none fi @@ -1451,7 +2730,7 @@ func_write_libtool_object () $opt_dry_run || { cat >${write_libobj}T </dev/null` - if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then + if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | - $SED -e "$lt_sed_naive_backslashify"` + $SED -e "$sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi @@ -1515,18 +2795,19 @@ func_convert_core_file_wine_to_w32 () # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { - $opt_debug + $debug_cmd + # unfortunately, winepath doesn't convert paths, only file names - func_convert_core_path_wine_to_w32_result="" + func_convert_core_path_wine_to_w32_result= if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" - if test -n "$func_convert_core_file_wine_to_w32_result" ; then + if test -n "$func_convert_core_file_wine_to_w32_result"; then if test -z "$func_convert_core_path_wine_to_w32_result"; then - func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" + func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi @@ -1555,7 +2836,8 @@ func_convert_core_path_wine_to_w32 () # environment variable; do not put it in $PATH. func_cygpath () { - $opt_debug + $debug_cmd + if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then @@ -1564,7 +2846,7 @@ func_cygpath () fi else func_cygpath_result= - func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" + func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" fi } #end: func_cygpath @@ -1575,10 +2857,11 @@ func_cygpath () # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { - $opt_debug + $debug_cmd + # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | - $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` + $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 @@ -1589,13 +2872,14 @@ func_convert_core_msys_to_w32 () # func_to_host_file_result to ARG1). func_convert_file_check () { - $opt_debug - if test -z "$2" && test -n "$1" ; then + $debug_cmd + + if test -z "$2" && test -n "$1"; then func_error "Could not determine host file name corresponding to" - func_error " \`$1'" + func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: - func_to_host_file_result="$1" + func_to_host_file_result=$1 fi } # end func_convert_file_check @@ -1607,10 +2891,11 @@ func_convert_file_check () # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { - $opt_debug + $debug_cmd + if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" - func_error " \`$3'" + func_error " '$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. @@ -1619,7 +2904,7 @@ func_convert_path_check () func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else - func_to_host_path_result="$3" + func_to_host_path_result=$3 fi fi } @@ -1631,9 +2916,10 @@ func_convert_path_check () # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { - $opt_debug + $debug_cmd + case $4 in - $1 ) func_to_host_path_result="$3$func_to_host_path_result" + $1 ) func_to_host_path_result=$3$func_to_host_path_result ;; esac case $4 in @@ -1647,7 +2933,7 @@ func_convert_path_front_back_pathsep () ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## -# invoked via `$to_host_file_cmd ARG' +# invoked via '$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. @@ -1658,7 +2944,8 @@ func_convert_path_front_back_pathsep () # in func_to_host_file_result. func_to_host_file () { - $opt_debug + $debug_cmd + $to_host_file_cmd "$1" } # end func_to_host_file @@ -1670,7 +2957,8 @@ func_to_host_file () # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { - $opt_debug + $debug_cmd + case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 @@ -1688,7 +2976,7 @@ func_to_tool_file () # Copy ARG to func_to_host_file_result. func_convert_file_noop () { - func_to_host_file_result="$1" + func_to_host_file_result=$1 } # end func_convert_file_noop @@ -1699,11 +2987,12 @@ func_convert_file_noop () # func_to_host_file_result. func_convert_file_msys_to_w32 () { - $opt_debug - func_to_host_file_result="$1" + $debug_cmd + + func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" - func_to_host_file_result="$func_convert_core_msys_to_w32_result" + func_to_host_file_result=$func_convert_core_msys_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } @@ -1715,8 +3004,9 @@ func_convert_file_msys_to_w32 () # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { - $opt_debug - func_to_host_file_result="$1" + $debug_cmd + + func_to_host_file_result=$1 if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. @@ -1732,11 +3022,12 @@ func_convert_file_cygwin_to_w32 () # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { - $opt_debug - func_to_host_file_result="$1" + $debug_cmd + + func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" - func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" + func_to_host_file_result=$func_convert_core_file_wine_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } @@ -1748,12 +3039,13 @@ func_convert_file_nix_to_w32 () # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { - $opt_debug - func_to_host_file_result="$1" + $debug_cmd + + func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" - func_to_host_file_result="$func_cygpath_result" + func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } @@ -1766,13 +3058,14 @@ func_convert_file_msys_to_cygwin () # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { - $opt_debug - func_to_host_file_result="$1" + $debug_cmd + + func_to_host_file_result=$1 if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" - func_to_host_file_result="$func_cygpath_result" + func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } @@ -1782,7 +3075,7 @@ func_convert_file_nix_to_cygwin () ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# -# invoked via `$to_host_path_cmd ARG' +# invoked via '$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. @@ -1806,10 +3099,11 @@ func_convert_file_nix_to_cygwin () to_host_path_cmd= func_init_to_host_path_cmd () { - $opt_debug + $debug_cmd + if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" - to_host_path_cmd="func_convert_path_${func_stripname_result}" + to_host_path_cmd=func_convert_path_$func_stripname_result fi } @@ -1819,7 +3113,8 @@ func_init_to_host_path_cmd () # in func_to_host_path_result. func_to_host_path () { - $opt_debug + $debug_cmd + func_init_to_host_path_cmd $to_host_path_cmd "$1" } @@ -1830,7 +3125,7 @@ func_to_host_path () # Copy ARG to func_to_host_path_result. func_convert_path_noop () { - func_to_host_path_result="$1" + func_to_host_path_result=$1 } # end func_convert_path_noop @@ -1841,8 +3136,9 @@ func_convert_path_noop () # func_to_host_path_result. func_convert_path_msys_to_w32 () { - $opt_debug - func_to_host_path_result="$1" + $debug_cmd + + func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; @@ -1850,7 +3146,7 @@ func_convert_path_msys_to_w32 () func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" - func_to_host_path_result="$func_convert_core_msys_to_w32_result" + func_to_host_path_result=$func_convert_core_msys_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" @@ -1864,8 +3160,9 @@ func_convert_path_msys_to_w32 () # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { - $opt_debug - func_to_host_path_result="$1" + $debug_cmd + + func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" @@ -1884,14 +3181,15 @@ func_convert_path_cygwin_to_w32 () # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { - $opt_debug - func_to_host_path_result="$1" + $debug_cmd + + func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" - func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" + func_to_host_path_result=$func_convert_core_path_wine_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" @@ -1905,15 +3203,16 @@ func_convert_path_nix_to_w32 () # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { - $opt_debug - func_to_host_path_result="$1" + $debug_cmd + + func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" - func_to_host_path_result="$func_cygpath_result" + func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" @@ -1928,8 +3227,9 @@ func_convert_path_msys_to_cygwin () # func_to_host_file_result. func_convert_path_nix_to_cygwin () { - $opt_debug - func_to_host_path_result="$1" + $debug_cmd + + func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them @@ -1938,7 +3238,7 @@ func_convert_path_nix_to_cygwin () func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" - func_to_host_path_result="$func_cygpath_result" + func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" @@ -1947,13 +3247,31 @@ func_convert_path_nix_to_cygwin () # end func_convert_path_nix_to_cygwin +# func_dll_def_p FILE +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with _LT_DLL_DEF_P in libtool.m4 +func_dll_def_p () +{ + $debug_cmd + + func_dll_def_p_tmp=`$SED -n \ + -e 's/^[ ]*//' \ + -e '/^\(;.*\)*$/d' \ + -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ + -e q \ + "$1"` + test DEF = "$func_dll_def_p_tmp" +} + + # func_mode_compile arg... func_mode_compile () { - $opt_debug + $debug_cmd + # Get the compilation command and the source file. base_compile= - srcfile="$nonopt" # always keep a non-empty value in "srcfile" + srcfile=$nonopt # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal @@ -1966,12 +3284,12 @@ func_mode_compile () case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile - lastarg="$arg" + lastarg=$arg arg_mode=normal ;; target ) - libobj="$arg" + libobj=$arg arg_mode=normal continue ;; @@ -1981,7 +3299,7 @@ func_mode_compile () case $arg in -o) test -n "$libobj" && \ - func_fatal_error "you cannot specify \`-o' more than once" + func_fatal_error "you cannot specify '-o' more than once" arg_mode=target continue ;; @@ -2010,12 +3328,12 @@ func_mode_compile () func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= - save_ifs="$IFS"; IFS=',' + save_ifs=$IFS; IFS=, for arg in $args; do - IFS="$save_ifs" + IFS=$save_ifs func_append_quoted lastarg "$arg" done - IFS="$save_ifs" + IFS=$save_ifs func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result @@ -2028,8 +3346,8 @@ func_mode_compile () # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # - lastarg="$srcfile" - srcfile="$arg" + lastarg=$srcfile + srcfile=$arg ;; esac # case $arg ;; @@ -2044,13 +3362,13 @@ func_mode_compile () func_fatal_error "you must specify an argument for -Xcompile" ;; target) - func_fatal_error "you must specify a target with \`-o'" + func_fatal_error "you must specify a target with '-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" - libobj="$func_basename_result" + libobj=$func_basename_result } ;; esac @@ -2070,7 +3388,7 @@ func_mode_compile () case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) - func_fatal_error "cannot determine name of library object from \`$libobj'" + func_fatal_error "cannot determine name of library object from '$libobj'" ;; esac @@ -2079,8 +3397,8 @@ func_mode_compile () for arg in $later; do case $arg in -shared) - test "$build_libtool_libs" != yes && \ - func_fatal_configuration "can not build a shared library" + test yes = "$build_libtool_libs" \ + || func_fatal_configuration "cannot build a shared library" build_old_libs=no continue ;; @@ -2106,17 +3424,17 @@ func_mode_compile () func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ - && func_warning "libobj name \`$libobj' may not contain shell special characters." + && func_warning "libobj name '$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" - objname="$func_basename_result" - xdir="$func_dirname_result" - lobj=${xdir}$objdir/$objname + objname=$func_basename_result + xdir=$func_dirname_result + lobj=$xdir$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. - if test "$build_old_libs" = yes; then + if test yes = "$build_old_libs"; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" @@ -2128,16 +3446,16 @@ func_mode_compile () pic_mode=default ;; esac - if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c - if test "$compiler_c_o" = no; then - output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} - lockfile="$output_obj.lock" + if test no = "$compiler_c_o"; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext + lockfile=$output_obj.lock else output_obj= need_locks=no @@ -2146,12 +3464,12 @@ func_mode_compile () # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file - if test "$need_locks" = yes; then + if test yes = "$need_locks"; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done - elif test "$need_locks" = warn; then + elif test warn = "$need_locks"; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: @@ -2159,7 +3477,7 @@ func_mode_compile () This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you +your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." @@ -2181,11 +3499,11 @@ compiler." qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. - if test "$build_libtool_libs" = yes; then + if test yes = "$build_libtool_libs"; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile - if test "$pic_mode" != no; then + if test no != "$pic_mode"; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code @@ -2202,7 +3520,7 @@ compiler." func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' - if test "$need_locks" = warn && + if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: @@ -2213,7 +3531,7 @@ $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you +your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." @@ -2229,20 +3547,20 @@ compiler." fi # Allow error messages only from the first compilation. - if test "$suppress_opt" = yes; then + if test yes = "$suppress_opt"; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. - if test "$build_old_libs" = yes; then - if test "$pic_mode" != yes; then + if test yes = "$build_old_libs"; then + if test yes != "$pic_mode"; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi - if test "$compiler_c_o" = yes; then + if test yes = "$compiler_c_o"; then func_append command " -o $obj" fi @@ -2251,7 +3569,7 @@ compiler." func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' - if test "$need_locks" = warn && + if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: @@ -2262,7 +3580,7 @@ $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you +your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." @@ -2282,7 +3600,7 @@ compiler." func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked - if test "$need_locks" != no; then + if test no != "$need_locks"; then removelist=$lockfile $RM "$lockfile" fi @@ -2292,7 +3610,7 @@ compiler." } $opt_help || { - test "$opt_mode" = compile && func_mode_compile ${1+"$@"} + test compile = "$opt_mode" && func_mode_compile ${1+"$@"} } func_mode_help () @@ -2312,7 +3630,7 @@ func_mode_help () Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated @@ -2331,16 +3649,16 @@ This mode accepts the following additional options: -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only - -shared do not build a \`.o' file suitable for static linking - -static only build a \`.o' file suitable for static linking + -shared do not build a '.o' file suitable for static linking + -static only build a '.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler -COMPILE-COMMAND is a command to be used in creating a \`standard' object file +COMPILE-COMMAND is a command to be used in creating a 'standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from -SOURCEFILE, then substituting the C source code suffix \`.c' with the -library object suffix, \`.lo'." +SOURCEFILE, then substituting the C source code suffix '.c' with the +library object suffix, '.lo'." ;; execute) @@ -2353,7 +3671,7 @@ This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path -This mode sets the library path environment variable according to \`-dlopen' +This mode sets the library path environment variable according to '-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated @@ -2372,7 +3690,7 @@ Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use -the \`--dry-run' option if you just want to see what would be executed." +the '--dry-run' option if you just want to see what would be executed." ;; install) @@ -2382,7 +3700,7 @@ the \`--dry-run' option if you just want to see what would be executed." Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be -either the \`install' or \`cp' program. +either the 'install' or 'cp' program. The following components of INSTALL-COMMAND are treated specially: @@ -2408,7 +3726,7 @@ The following components of LINK-COMMAND are treated specially: -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) - -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE @@ -2422,7 +3740,8 @@ The following components of LINK-COMMAND are treated specially: -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects - -objectlist FILE Use a list of object files found in FILE to specify objects + -objectlist FILE use a list of object files found in FILE to specify objects + -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information @@ -2442,20 +3761,20 @@ The following components of LINK-COMMAND are treated specially: -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) -All other options (arguments beginning with \`-') are ignored. +All other options (arguments beginning with '-') are ignored. -Every other argument is treated as a filename. Files ending in \`.la' are +Every other argument is treated as a filename. Files ending in '.la' are treated as uninstalled libtool libraries, other files are standard or library object files. -If the OUTPUT-FILE ends in \`.la', then a libtool library is created, -only library objects (\`.lo' files) may be specified, and \`-rpath' is +If the OUTPUT-FILE ends in '.la', then a libtool library is created, +only library objects ('.lo' files) may be specified, and '-rpath' is required, except when creating a convenience library. -If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created -using \`ar' and \`ranlib', or on Windows using \`lib'. +If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created +using 'ar' and 'ranlib', or on Windows using 'lib'. -If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file is created, otherwise an executable program is created." ;; @@ -2466,7 +3785,7 @@ is created, otherwise an executable program is created." Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. @@ -2474,17 +3793,17 @@ Otherwise, only FILE itself is deleted using RM." ;; *) - func_fatal_help "invalid operation mode \`$opt_mode'" + func_fatal_help "invalid operation mode '$opt_mode'" ;; esac echo - $ECHO "Try \`$progname --help' for more information about other modes." + $ECHO "Try '$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then - if test "$opt_help" = :; then + if test : = "$opt_help"; then func_mode_help else { @@ -2492,7 +3811,7 @@ if $opt_help; then for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done - } | sed -n '1p; 2,$s/^Usage:/ or: /p' + } | $SED -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do @@ -2500,7 +3819,7 @@ if $opt_help; then func_mode_help done } | - sed '1d + $SED '1d /^When reporting/,/^Report/{ H d @@ -2517,16 +3836,17 @@ fi # func_mode_execute arg... func_mode_execute () { - $opt_debug + $debug_cmd + # The first argument is the command name. - cmd="$nonopt" + cmd=$nonopt test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ - || func_fatal_help "\`$file' is not a file" + || func_fatal_help "'$file' is not a file" dir= case $file in @@ -2536,7 +3856,7 @@ func_mode_execute () # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$lib' is not a valid libtool archive" + || func_fatal_help "'$lib' is not a valid libtool archive" # Read the libtool library. dlname= @@ -2547,18 +3867,18 @@ func_mode_execute () if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ - func_warning "\`$file' was not linked with \`-export-dynamic'" + func_warning "'$file' was not linked with '-export-dynamic'" continue fi func_dirname "$file" "" "." - dir="$func_dirname_result" + dir=$func_dirname_result if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then - func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" + func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" fi fi ;; @@ -2566,18 +3886,18 @@ func_mode_execute () *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." - dir="$func_dirname_result" + dir=$func_dirname_result ;; *) - func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" + func_warning "'-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` - test -n "$absdir" && dir="$absdir" + test -n "$absdir" && dir=$absdir # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then @@ -2589,7 +3909,7 @@ func_mode_execute () # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. - libtool_execute_magic="$magic" + libtool_execute_magic=$magic # Check if any of the arguments is a wrapper script. args= @@ -2602,12 +3922,12 @@ func_mode_execute () if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. - file="$progdir/$program" + file=$progdir/$program elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. - file="$progdir/$program" + file=$progdir/$program fi ;; esac @@ -2615,7 +3935,15 @@ func_mode_execute () func_append_quoted args "$file" done - if test "X$opt_dry_run" = Xfalse; then + if $opt_dry_run; then + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + else if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" @@ -2632,25 +3960,18 @@ func_mode_execute () done # Now prepare to actually exec the command. - exec_cmd="\$cmd$args" - else - # Display what would be done. - if test -n "$shlibpath_var"; then - eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" - echo "export $shlibpath_var" - fi - $ECHO "$cmd$args" - exit $EXIT_SUCCESS + exec_cmd=\$cmd$args fi } -test "$opt_mode" = execute && func_mode_execute ${1+"$@"} +test execute = "$opt_mode" && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { - $opt_debug + $debug_cmd + libs= libdirs= admincmds= @@ -2664,11 +3985,11 @@ func_mode_finish () if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else - func_warning "\`$opt' is not a valid libtool archive" + func_warning "'$opt' is not a valid libtool archive" fi else - func_fatal_error "invalid argument \`$opt'" + func_fatal_error "invalid argument '$opt'" fi done @@ -2683,12 +4004,12 @@ func_mode_finish () # Remove sysroot references if $opt_dry_run; then for lib in $libs; do - echo "removing references to $lt_sysroot and \`=' prefixes from $lib" + echo "removing references to $lt_sysroot and '=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do - sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ + $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done @@ -2713,7 +4034,7 @@ func_mode_finish () fi # Exit here if they wanted silent mode. - $opt_silent && exit $EXIT_SUCCESS + $opt_quiet && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" @@ -2724,27 +4045,27 @@ func_mode_finish () echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" - echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + echo "specify the full pathname of the library, or use the '-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then - echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " - add LIBDIR to the '$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then - echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " - add LIBDIR to the '$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" - $ECHO " - use the \`$flag' linker flag" + $ECHO " - use the '$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then - echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" fi echo @@ -2763,18 +4084,20 @@ func_mode_finish () exit $EXIT_SUCCESS } -test "$opt_mode" = finish && func_mode_finish ${1+"$@"} +test finish = "$opt_mode" && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { - $opt_debug + $debug_cmd + # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). - if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || # Allow the use of GNU shtool's install command. - case $nonopt in *shtool*) :;; *) false;; esac; then + case $nonopt in *shtool*) :;; *) false;; esac + then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " @@ -2801,7 +4124,7 @@ func_mode_install () opts= prev= install_type= - isdir=no + isdir=false stripme= no_mode=: for arg @@ -2814,7 +4137,7 @@ func_mode_install () fi case $arg in - -d) isdir=yes ;; + -d) isdir=: ;; -f) if $install_cp; then :; else prev=$arg @@ -2832,7 +4155,7 @@ func_mode_install () *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then - if test "x$prev" = x-m && test -n "$install_override_mode"; then + if test X-m = "X$prev" && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi @@ -2857,7 +4180,7 @@ func_mode_install () func_fatal_help "you must specify an install program" test -n "$prev" && \ - func_fatal_help "the \`$prev' option requires an argument" + func_fatal_help "the '$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else @@ -2879,19 +4202,19 @@ func_mode_install () dest=$func_stripname_result # Check to see that the destination is a directory. - test -d "$dest" && isdir=yes - if test "$isdir" = yes; then - destdir="$dest" + test -d "$dest" && isdir=: + if $isdir; then + destdir=$dest destname= else func_dirname_and_basename "$dest" "" "." - destdir="$func_dirname_result" - destname="$func_basename_result" + destdir=$func_dirname_result + destname=$func_basename_result # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ - func_fatal_help "\`$dest' is not a directory" + func_fatal_help "'$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; @@ -2900,7 +4223,7 @@ func_mode_install () case $file in *.lo) ;; *) - func_fatal_help "\`$destdir' must be an absolute directory name" + func_fatal_help "'$destdir' must be an absolute directory name" ;; esac done @@ -2909,7 +4232,7 @@ func_mode_install () # This variable tells wrapper scripts just to set variables rather # than running their programs. - libtool_install_magic="$magic" + libtool_install_magic=$magic staticlibs= future_libdirs= @@ -2929,7 +4252,7 @@ func_mode_install () # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$file' is not a valid libtool archive" + || func_fatal_help "'$file' is not a valid libtool archive" library_names= old_library= @@ -2951,7 +4274,7 @@ func_mode_install () fi func_dirname "$file" "/" "" - dir="$func_dirname_result" + dir=$func_dirname_result func_append dir "$objdir" if test -n "$relink_command"; then @@ -2965,7 +4288,7 @@ func_mode_install () # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ - func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" + func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. @@ -2974,29 +4297,36 @@ func_mode_install () relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi - func_warning "relinking \`$file'" + func_warning "relinking '$file'" func_show_eval "$relink_command" \ - 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' + 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then - realname="$1" + realname=$1 shift - srcname="$realname" - test -n "$relink_command" && srcname="$realname"T + srcname=$realname + test -n "$relink_command" && srcname=${realname}T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' - tstripme="$stripme" + tstripme=$stripme case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) - tstripme="" + tstripme= + ;; + esac + ;; + os2*) + case $realname in + *_dll.a) + tstripme= ;; esac ;; @@ -3007,7 +4337,7 @@ func_mode_install () if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. - # Try `ln -sf' first, because the `ln' binary might depend on + # Try 'ln -sf' first, because the 'ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname @@ -3018,14 +4348,14 @@ func_mode_install () fi # Do each command in the postinstall commands. - lib="$destdir/$realname" + lib=$destdir/$realname func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" - name="$func_basename_result" - instname="$dir/$name"i + name=$func_basename_result + instname=$dir/${name}i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. @@ -3037,11 +4367,11 @@ func_mode_install () # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then - destfile="$destdir/$destname" + destfile=$destdir/$destname else func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" + destfile=$func_basename_result + destfile=$destdir/$destfile fi # Deduce the name of the destination old-style object file. @@ -3051,11 +4381,11 @@ func_mode_install () staticdest=$func_lo2o_result ;; *.$objext) - staticdest="$destfile" + staticdest=$destfile destfile= ;; *) - func_fatal_help "cannot copy a libtool object to \`$destfile'" + func_fatal_help "cannot copy a libtool object to '$destfile'" ;; esac @@ -3064,7 +4394,7 @@ func_mode_install () func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. - if test "$build_old_libs" = yes; then + if test yes = "$build_old_libs"; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result @@ -3076,23 +4406,23 @@ func_mode_install () *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then - destfile="$destdir/$destname" + destfile=$destdir/$destname else func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" + destfile=$func_basename_result + destfile=$destdir/$destfile fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install - stripped_ext="" + stripped_ext= case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result - stripped_ext=".exe" + stripped_ext=.exe fi ;; esac @@ -3120,19 +4450,19 @@ func_mode_install () # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ - func_fatal_error "invalid libtool wrapper script \`$wrapper'" + func_fatal_error "invalid libtool wrapper script '$wrapper'" - finalize=yes + finalize=: for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi - libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test + libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` if test -n "$libdir" && test ! -f "$libfile"; then - func_warning "\`$lib' has not been installed in \`$libdir'" - finalize=no + func_warning "'$lib' has not been installed in '$libdir'" + finalize=false fi done @@ -3140,29 +4470,29 @@ func_mode_install () func_source "$wrapper" outputname= - if test "$fast_install" = no && test -n "$relink_command"; then + if test no = "$fast_install" && test -n "$relink_command"; then $opt_dry_run || { - if test "$finalize" = yes; then + if $finalize; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" - file="$func_basename_result" - outputname="$tmpdir/$file" + file=$func_basename_result + outputname=$tmpdir/$file # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` - $opt_silent || { + $opt_quiet || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else - func_error "error: relink \`$file' with the above command before installing it" + func_error "error: relink '$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi - file="$outputname" + file=$outputname else - func_warning "cannot relink \`$file'" + func_warning "cannot relink '$file'" fi } else @@ -3199,10 +4529,10 @@ func_mode_install () for file in $staticlibs; do func_basename "$file" - name="$func_basename_result" + name=$func_basename_result # Set up the ranlib parameters. - oldlib="$destdir/$name" + oldlib=$destdir/$name func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result @@ -3217,18 +4547,18 @@ func_mode_install () done test -n "$future_libdirs" && \ - func_warning "remember to run \`$progname --finish$future_libdirs'" + func_warning "remember to run '$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" - exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } -test "$opt_mode" = install && func_mode_install ${1+"$@"} +test install = "$opt_mode" && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p @@ -3236,16 +4566,17 @@ test "$opt_mode" = install && func_mode_install ${1+"$@"} # a dlpreopen symbol table. func_generate_dlsyms () { - $opt_debug - my_outputname="$1" - my_originator="$2" - my_pic_p="${3-no}" - my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` + $debug_cmd + + my_outputname=$1 + my_originator=$2 + my_pic_p=${3-false} + my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then if test -n "$NM" && test -n "$global_symbol_pipe"; then - my_dlsyms="${my_outputname}S.c" + my_dlsyms=${my_outputname}S.c else func_error "not configured to extract global symbols from dlpreopened files" fi @@ -3256,7 +4587,7 @@ func_generate_dlsyms () "") ;; *.c) # Discover the nlist of each of the dlfiles. - nlist="$output_objdir/${my_outputname}.nm" + nlist=$output_objdir/$my_outputname.nm func_show_eval "$RM $nlist ${nlist}S ${nlist}T" @@ -3264,34 +4595,36 @@ func_generate_dlsyms () func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ -/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ -/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ +/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif -#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST -#elif defined(__osf__) +#elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + /* External symbol declarations for the compiler. */\ " - if test "$dlself" = yes; then - func_verbose "generating symbol list for \`$output'" + if test yes = "$dlself"; then + func_verbose "generating symbol list for '$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" @@ -3299,7 +4632,7 @@ extern \"C\" { progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 - func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" + func_verbose "extracting global C symbols from '$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done @@ -3319,10 +4652,10 @@ extern \"C\" { # Prepare the list of exported symbols if test -z "$export_symbols"; then - export_symbols="$output_objdir/$outputname.exp" + export_symbols=$output_objdir/$outputname.exp $opt_dry_run || { $RM $export_symbols - eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' @@ -3332,7 +4665,7 @@ extern \"C\" { } else $opt_dry_run || { - eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in @@ -3346,22 +4679,22 @@ extern \"C\" { fi for dlprefile in $dlprefiles; do - func_verbose "extracting global C symbols from \`$dlprefile'" + func_verbose "extracting global C symbols from '$dlprefile'" func_basename "$dlprefile" - name="$func_basename_result" + name=$func_basename_result case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" - dlprefile_dlbasename="" + dlprefile_dlbasename= if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` - if test -n "$dlprefile_dlname" ; then + if test -n "$dlprefile_dlname"; then func_basename "$dlprefile_dlname" - dlprefile_dlbasename="$func_basename_result" + dlprefile_dlbasename=$func_basename_result else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" @@ -3369,7 +4702,7 @@ extern \"C\" { fi fi $opt_dry_run || { - if test -n "$dlprefile_dlbasename" ; then + if test -n "$dlprefile_dlbasename"; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" @@ -3425,6 +4758,11 @@ extern \"C\" { echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi + func_show_eval '$RM "${nlist}I"' + if test -n "$global_symbol_to_import"; then + eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' + fi + echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ @@ -3433,11 +4771,30 @@ typedef struct { void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[]; +lt_${my_prefix}_LTX_preloaded_symbols[];\ +" + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ +static void lt_syminit(void) +{ + LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; + for (; symbol->name; ++symbol) + {" + $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" + echo >> "$output_objdir/$my_dlsyms" "\ + } +}" + fi + echo >> "$output_objdir/$my_dlsyms" "\ LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = -{\ - { \"$my_originator\", (void *) 0 }," +{ {\"$my_originator\", (void *) 0}," + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ + {\"@INIT@\", (void *) <_syminit}," + fi case $need_lib_prefix in no) @@ -3479,9 +4836,7 @@ static const void *lt_preloaded_setup() { *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) - if test "X$my_pic_p" != Xno; then - pic_flag_for_symtable=" $pic_flag" - fi + $my_pic_p && pic_flag_for_symtable=" $pic_flag" ;; esac ;; @@ -3498,10 +4853,10 @@ static const void *lt_preloaded_setup() { func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. - func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' # Transform the symbol file into the correct name. - symfileobj="$output_objdir/${my_outputname}S.$objext" + symfileobj=$output_objdir/${my_outputname}S.$objext case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then @@ -3519,7 +4874,7 @@ static const void *lt_preloaded_setup() { esac ;; *) - func_fatal_error "unknown suffix for \`$my_dlsyms'" + func_fatal_error "unknown suffix for '$my_dlsyms'" ;; esac else @@ -3533,6 +4888,32 @@ static const void *lt_preloaded_setup() { fi } +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` + test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` + test -n "$func_cygming_ms_implib_tmp" +} + # func_win32_libid arg # return the library type of file 'arg' # @@ -3542,8 +4923,9 @@ static const void *lt_preloaded_setup() { # Despite the name, also deal with 64 bit binaries. func_win32_libid () { - $opt_debug - win32_libid_type="unknown" + $debug_cmd + + win32_libid_type=unknown win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import @@ -3553,16 +4935,29 @@ func_win32_libid () # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then - func_to_tool_file "$1" func_convert_file_msys_to_w32 - win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | - $SED -n -e ' + case $nm_interface in + "MS dumpbin") + if func_cygming_ms_implib_p "$1" || + func_cygming_gnu_implib_p "$1" + then + win32_nmres=import + else + win32_nmres= + fi + ;; + *) + func_to_tool_file "$1" func_convert_file_msys_to_w32 + win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | + $SED -n -e ' 1,100{ / I /{ - s,.*,import, + s|.*|import| p q } }'` + ;; + esac case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; @@ -3594,7 +4989,8 @@ func_win32_libid () # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { - $opt_debug + $debug_cmd + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } @@ -3611,7 +5007,8 @@ func_cygming_dll_for_implib () # specified import library. func_cygming_dll_for_implib_fallback_core () { - $opt_debug + $debug_cmd + match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ @@ -3647,8 +5044,8 @@ func_cygming_dll_for_implib_fallback_core () /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the - # archive which possess that section. Heuristic: eliminate - # all those which have a first or second character that is + # archive that possess that section. Heuristic: eliminate + # all those that have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually @@ -3659,30 +5056,6 @@ func_cygming_dll_for_implib_fallback_core () $SED -e '/^\./d;/^.\./d;q' } -# func_cygming_gnu_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is a GNU/binutils-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_gnu_implib_p () -{ - $opt_debug - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` - test -n "$func_cygming_gnu_implib_tmp" -} - -# func_cygming_ms_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is an MS-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_ms_implib_p () -{ - $opt_debug - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` - test -n "$func_cygming_ms_implib_tmp" -} - # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified @@ -3696,16 +5069,17 @@ func_cygming_ms_implib_p () # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { - $opt_debug - if func_cygming_gnu_implib_p "$1" ; then + $debug_cmd + + if func_cygming_gnu_implib_p "$1"; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` - elif func_cygming_ms_implib_p "$1" ; then + elif func_cygming_ms_implib_p "$1"; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown - sharedlib_from_linklib_result="" + sharedlib_from_linklib_result= fi } @@ -3713,10 +5087,11 @@ func_cygming_dll_for_implib_fallback () # func_extract_an_archive dir oldlib func_extract_an_archive () { - $opt_debug - f_ex_an_ar_dir="$1"; shift - f_ex_an_ar_oldlib="$1" - if test "$lock_old_archive_extraction" = yes; then + $debug_cmd + + f_ex_an_ar_dir=$1; shift + f_ex_an_ar_oldlib=$1 + if test yes = "$lock_old_archive_extraction"; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" @@ -3725,7 +5100,7 @@ func_extract_an_archive () fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' - if test "$lock_old_archive_extraction" = yes; then + if test yes = "$lock_old_archive_extraction"; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then @@ -3739,22 +5114,23 @@ func_extract_an_archive () # func_extract_archives gentop oldlib ... func_extract_archives () { - $opt_debug - my_gentop="$1"; shift + $debug_cmd + + my_gentop=$1; shift my_oldlibs=${1+"$@"} - my_oldobjs="" - my_xlib="" - my_xabs="" - my_xdir="" + my_oldobjs= + my_xlib= + my_xabs= + my_xdir= for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in - [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" - my_xlib="$func_basename_result" + my_xlib=$func_basename_result my_xlib_u=$my_xlib while :; do case " $extracted_archives " in @@ -3766,7 +5142,7 @@ func_extract_archives () esac done extracted_archives="$extracted_archives $my_xlib_u" - my_xdir="$my_gentop/$my_xlib_u" + my_xdir=$my_gentop/$my_xlib_u func_mkdir_p "$my_xdir" @@ -3779,22 +5155,23 @@ func_extract_archives () cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` - darwin_base_archive=`basename "$darwin_archive"` + func_basename "$darwin_archive" + darwin_base_archive=$func_basename_result darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" - for darwin_arch in $darwin_arches ; do - func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" - $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" - cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" - func_extract_an_archive "`pwd`" "${darwin_base_archive}" + for darwin_arch in $darwin_arches; do + func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" + $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" + cd "unfat-$$/$darwin_base_archive-$darwin_arch" + func_extract_an_archive "`pwd`" "$darwin_base_archive" cd "$darwin_curdir" - $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) - darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do @@ -3816,7 +5193,7 @@ func_extract_archives () my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done - func_extract_archives_result="$my_oldobjs" + func_extract_archives_result=$my_oldobjs } @@ -3831,7 +5208,7 @@ func_extract_archives () # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script -# will assume that the directory in which it is stored is +# will assume that the directory where it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () @@ -3842,7 +5219,7 @@ func_emit_wrapper () #! $SHELL # $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. @@ -3899,9 +5276,9 @@ _LTECHO_EOF' # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper -# /script/ and the wrapper /executable/ which is used only on +# /script/ and the wrapper /executable/ that is used only on # windows platforms, and (c) all begin with the string "--lt-" -# (application programs are unlikely to have options which match +# (application programs are unlikely to have options that match # this pattern). # # There are only two supported options: --lt-debug and @@ -3934,7 +5311,7 @@ func_parse_lt_options () # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then - echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 + echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 fi } @@ -3945,7 +5322,7 @@ func_lt_dump_args () lt_dump_args_N=1; for lt_arg do - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" + \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } @@ -3959,7 +5336,7 @@ func_exec_program_core () *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} @@ -3969,7 +5346,7 @@ func_exec_program_core () *) $ECHO "\ if test -n \"\$lt_option_debug\"; then - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} @@ -4044,13 +5421,13 @@ func_exec_program () test -n \"\$absdir\" && thisdir=\"\$absdir\" " - if test "$fast_install" = yes; then + if test yes = "$fast_install"; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || - { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" @@ -4067,7 +5444,7 @@ func_exec_program () if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else - $ECHO \"\$relink_command_output\" >&2 + \$ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi @@ -4102,7 +5479,7 @@ func_exec_program () fi # Export our shlibpath_var if we have one. - if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" @@ -4122,7 +5499,7 @@ func_exec_program () fi else # The program doesn't exist. - \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 @@ -4141,7 +5518,7 @@ func_emit_cwrapperexe_src () cat < #include +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + /* declarations of non-ANSI functions */ -#if defined(__MINGW32__) +#if defined __MINGW32__ # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif -#elif defined(__CYGWIN__) +#elif defined __CYGWIN__ # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif -/* #elif defined (other platforms) ... */ +/* #elif defined other_platform || defined ... */ #endif /* portability defines, excluding path handling macros */ -#if defined(_MSC_VER) +#if defined _MSC_VER # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC -# ifndef _INTPTR_T_DEFINED -# define _INTPTR_T_DEFINED -# define intptr_t int -# endif -#elif defined(__MINGW32__) +#elif defined __MINGW32__ # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv -#elif defined(__CYGWIN__) +#elif defined __CYGWIN__ # define HAVE_SETENV # define FOPEN_WB "wb" -/* #elif defined (other platforms) ... */ +/* #elif defined other platforms ... */ #endif -#if defined(PATH_MAX) +#if defined PATH_MAX # define LT_PATHMAX PATH_MAX -#elif defined(MAXPATHLEN) +#elif defined MAXPATHLEN # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 @@ -4235,8 +5610,8 @@ int setenv (const char *, const char *, int); # define PATH_SEPARATOR ':' #endif -#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ - defined (__OS2__) +#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ + defined __OS2__ # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 @@ -4269,10 +5644,10 @@ int setenv (const char *, const char *, int); #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ - if (stale) { free ((void *) stale); stale = 0; } \ + if (stale) { free (stale); stale = 0; } \ } while (0) -#if defined(LT_DEBUGWRAPPER) +#if defined LT_DEBUGWRAPPER static int lt_debug = 1; #else static int lt_debug = 0; @@ -4301,11 +5676,16 @@ void lt_dump_script (FILE *f); EOF cat < 0) && IS_PATH_SEPARATOR (new_value[len-1])) + size_t len = strlen (new_value); + while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { - new_value[len-1] = '\0'; + new_value[--len] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); @@ -5083,27 +6463,47 @@ EOF # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { - $opt_debug + $debug_cmd + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } +# func_suncc_cstd_abi +# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! +# Several compiler flags select an ABI that is incompatible with the +# Cstd library. Avoid specifying it if any are in CXXFLAGS. +func_suncc_cstd_abi () +{ + $debug_cmd + + case " $compile_command " in + *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) + suncc_use_cstd_abi=no + ;; + *) + suncc_use_cstd_abi=yes + ;; + esac +} + # func_mode_link arg... func_mode_link () { - $opt_debug + $debug_cmd + case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out - # which system we are compiling for in order to pass an extra + # what system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying - # to make a dll which has undefined symbols, in which case not + # to make a dll that has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. @@ -5147,10 +6547,11 @@ func_mode_link () module=no no_install=no objs= + os2dllname= non_pic_objects= precious_files_regex= prefer_static_libs=no - preload=no + preload=false prev= prevarg= release= @@ -5162,7 +6563,7 @@ func_mode_link () vinfo= vinfo_number=no weak_libs= - single_module="${wl}-single_module" + single_module=$wl-single_module func_infer_tag $base_compile # We need to know -static, to get the right output filenames. @@ -5170,15 +6571,15 @@ func_mode_link () do case $arg in -shared) - test "$build_libtool_libs" != yes && \ - func_fatal_configuration "can not build a shared library" + test yes != "$build_libtool_libs" \ + && func_fatal_configuration "cannot build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) - if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then @@ -5211,7 +6612,7 @@ func_mode_link () # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do - arg="$1" + arg=$1 shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result @@ -5228,21 +6629,21 @@ func_mode_link () case $prev in bindir) - bindir="$arg" + bindir=$arg prev= continue ;; dlfiles|dlprefiles) - if test "$preload" = no; then + $preload || { # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" - preload=yes - fi + preload=: + } case $arg in *.la | *.lo) ;; # We handle these cases below. force) - if test "$dlself" = no; then + if test no = "$dlself"; then dlself=needless export_dynamic=yes fi @@ -5250,9 +6651,9 @@ func_mode_link () continue ;; self) - if test "$prev" = dlprefiles; then + if test dlprefiles = "$prev"; then dlself=yes - elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then dlself=yes else dlself=needless @@ -5262,7 +6663,7 @@ func_mode_link () continue ;; *) - if test "$prev" = dlfiles; then + if test dlfiles = "$prev"; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" @@ -5273,14 +6674,14 @@ func_mode_link () esac ;; expsyms) - export_symbols="$arg" + export_symbols=$arg test -f "$arg" \ - || func_fatal_error "symbol file \`$arg' does not exist" + || func_fatal_error "symbol file '$arg' does not exist" prev= continue ;; expsyms_regex) - export_symbols_regex="$arg" + export_symbols_regex=$arg prev= continue ;; @@ -5298,7 +6699,13 @@ func_mode_link () continue ;; inst_prefix) - inst_prefix_dir="$arg" + inst_prefix_dir=$arg + prev= + continue + ;; + mllvm) + # Clang does not use LLVM to link, so we can simply discard any + # '-mllvm $arg' options when doing the link step. prev= continue ;; @@ -5322,21 +6729,21 @@ func_mode_link () if test -z "$pic_object" || test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" - xdir="$func_dirname_result" + xdir=$func_dirname_result - if test "$pic_object" != none; then + if test none != "$pic_object"; then # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" + pic_object=$xdir$pic_object - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue @@ -5347,7 +6754,7 @@ func_mode_link () fi # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then + if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= @@ -5355,23 +6762,23 @@ func_mode_link () # A PIC object. func_append libobjs " $pic_object" - arg="$pic_object" + arg=$pic_object fi # Non-PIC object. - if test "$non_pic_object" != none; then + if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" + non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" + non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else @@ -5379,7 +6786,7 @@ func_mode_link () if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" - xdir="$func_dirname_result" + xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result @@ -5387,24 +6794,29 @@ func_mode_link () func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else - func_fatal_error "\`$arg' is not a valid libtool object" + func_fatal_error "'$arg' is not a valid libtool object" fi fi done else - func_fatal_error "link input file \`$arg' does not exist" + func_fatal_error "link input file '$arg' does not exist" fi arg=$save_arg prev= continue ;; + os2dllname) + os2dllname=$arg + prev= + continue + ;; precious_regex) - precious_files_regex="$arg" + precious_files_regex=$arg prev= continue ;; release) - release="-$arg" + release=-$arg prev= continue ;; @@ -5416,7 +6828,7 @@ func_mode_link () func_fatal_error "only absolute run-paths are allowed" ;; esac - if test "$prev" = rpath; then + if test rpath = "$prev"; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; @@ -5431,7 +6843,7 @@ func_mode_link () continue ;; shrext) - shrext_cmds="$arg" + shrext_cmds=$arg prev= continue ;; @@ -5471,7 +6883,7 @@ func_mode_link () esac fi # test -n "$prev" - prevarg="$arg" + prevarg=$arg case $arg in -all-static) @@ -5485,7 +6897,7 @@ func_mode_link () -allow-undefined) # FIXME: remove this flag sometime in the future. - func_fatal_error "\`-allow-undefined' must not be used because it is the default" + func_fatal_error "'-allow-undefined' must not be used because it is the default" ;; -avoid-version) @@ -5517,7 +6929,7 @@ func_mode_link () if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi - if test "X$arg" = "X-export-symbols"; then + if test X-export-symbols = "X$arg"; then prev=expsyms else prev=expsyms_regex @@ -5551,9 +6963,9 @@ func_mode_link () func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then - func_fatal_error "require no space between \`-L' and \`$1'" + func_fatal_error "require no space between '-L' and '$1'" else - func_fatal_error "need path for \`-L' option" + func_fatal_error "need path for '-L' option" fi fi func_resolve_sysroot "$func_stripname_result" @@ -5564,8 +6976,8 @@ func_mode_link () *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ - func_fatal_error "cannot determine absolute directory name of \`$dir'" - dir="$absdir" + func_fatal_error "cannot determine absolute directory name of '$dir'" + dir=$absdir ;; esac case "$deplibs " in @@ -5600,7 +7012,7 @@ func_mode_link () ;; -l*) - if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + if test X-lc = "X$arg" || test X-lm = "X$arg"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) @@ -5608,11 +7020,11 @@ func_mode_link () ;; *-*-os2*) # These systems don't actually have a C library (as such) - test "X$arg" = "X-lc" && continue + test X-lc = "X$arg" && continue ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc due to us having libc/libc_r. - test "X$arg" = "X-lc" && continue + test X-lc = "X$arg" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework @@ -5621,16 +7033,16 @@ func_mode_link () ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype - test "X$arg" = "X-lc" && continue + test X-lc = "X$arg" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work - test "X$arg" = "X-lc" && continue + test X-lc = "X$arg" && continue ;; esac - elif test "X$arg" = "X-lc_r"; then + elif test X-lc_r = "X$arg"; then case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc_r directly, use -pthread flag. continue ;; @@ -5640,6 +7052,11 @@ func_mode_link () continue ;; + -mllvm) + prev=mllvm + continue + ;; + -module) module=yes continue @@ -5669,7 +7086,7 @@ func_mode_link () ;; -multi_module) - single_module="${wl}-multi_module" + single_module=$wl-multi_module continue ;; @@ -5683,8 +7100,8 @@ func_mode_link () *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. - func_warning "\`-no-install' is ignored for $host" - func_warning "assuming \`-no-fast-install' instead" + func_warning "'-no-install' is ignored for $host" + func_warning "assuming '-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; @@ -5702,6 +7119,11 @@ func_mode_link () continue ;; + -os2dllname) + prev=os2dllname + continue + ;; + -o) prev=output ;; -precious-files-regex) @@ -5789,14 +7211,14 @@ func_mode_link () func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= - save_ifs="$IFS"; IFS=',' + save_ifs=$IFS; IFS=, for flag in $args; do - IFS="$save_ifs" + IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done - IFS="$save_ifs" + IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; @@ -5805,15 +7227,15 @@ func_mode_link () func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= - save_ifs="$IFS"; IFS=',' + save_ifs=$IFS; IFS=, for flag in $args; do - IFS="$save_ifs" + IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done - IFS="$save_ifs" + IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; @@ -5836,7 +7258,7 @@ func_mode_link () # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" + arg=$func_quote_for_eval_result ;; # Flags to be passed through unchanged, with rationale: @@ -5848,25 +7270,46 @@ func_mode_link () # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # -fstack-protector* stack protector flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support - # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + # -stdlib=* select c++ std lib with clang -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ - -O*|-flto*|-fwhopr*|-fuse-linker-plugin) + -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*) func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" + arg=$func_quote_for_eval_result func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; + -Z*) + if test os2 = "`expr $host : '.*\(os2\)'`"; then + # OS/2 uses -Zxxx to specify OS/2-specific options + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case $arg in + -Zlinker | -Zstack) + prev=xcompiler + ;; + esac + continue + else + # Otherwise treat like 'Some other compiler flag' below + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + fi + ;; + # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" + arg=$func_quote_for_eval_result ;; *.$objext) @@ -5887,21 +7330,21 @@ func_mode_link () if test -z "$pic_object" || test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" - xdir="$func_dirname_result" + xdir=$func_dirname_result - if test "$pic_object" != none; then + test none = "$pic_object" || { # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" + pic_object=$xdir$pic_object - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue @@ -5912,7 +7355,7 @@ func_mode_link () fi # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then + if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= @@ -5920,23 +7363,23 @@ func_mode_link () # A PIC object. func_append libobjs " $pic_object" - arg="$pic_object" - fi + arg=$pic_object + } # Non-PIC object. - if test "$non_pic_object" != none; then + if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" + non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" + non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else @@ -5944,7 +7387,7 @@ func_mode_link () if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" - xdir="$func_dirname_result" + xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result @@ -5952,7 +7395,7 @@ func_mode_link () func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else - func_fatal_error "\`$arg' is not a valid libtool object" + func_fatal_error "'$arg' is not a valid libtool object" fi fi ;; @@ -5968,11 +7411,11 @@ func_mode_link () # A libtool-controlled library. func_resolve_sysroot "$arg" - if test "$prev" = dlfiles; then + if test dlfiles = "$prev"; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= - elif test "$prev" = dlprefiles; then + elif test dlprefiles = "$prev"; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= @@ -5987,7 +7430,7 @@ func_mode_link () # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" + arg=$func_quote_for_eval_result ;; esac # arg @@ -5999,9 +7442,9 @@ func_mode_link () done # argument parsing loop test -n "$prev" && \ - func_fatal_help "the \`$prevarg' option requires an argument" + func_fatal_help "the '$prevarg' option requires an argument" - if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" @@ -6010,20 +7453,23 @@ func_mode_link () oldlibs= # calculate the name of the file, without its directory func_basename "$output" - outputname="$func_basename_result" - libobjs_save="$libobjs" + outputname=$func_basename_result + libobjs_save=$libobjs if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var - eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` + eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + # Definition is injected by LT_CONFIG during libtool generation. + func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" + func_dirname "$output" "/" "" - output_objdir="$func_dirname_result$objdir" + output_objdir=$func_dirname_result$objdir func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. @@ -6046,7 +7492,7 @@ func_mode_link () # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do - if $opt_preserve_dup_deps ; then + if $opt_preserve_dup_deps; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac @@ -6054,7 +7500,7 @@ func_mode_link () func_append libs " $deplib" done - if test "$linkmode" = lib; then + if test lib = "$linkmode"; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps @@ -6086,7 +7532,7 @@ func_mode_link () case $file in *.la) ;; *) - func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" + func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" ;; esac done @@ -6094,7 +7540,7 @@ func_mode_link () prog) compile_deplibs= finalize_deplibs= - alldeplibs=no + alldeplibs=false newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" @@ -6106,29 +7552,29 @@ func_mode_link () for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... - if test "$linkmode,$pass" = "lib,link"; then + if test lib,link = "$linkmode,$pass"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done - deplibs="$tmp_deplibs" + deplibs=$tmp_deplibs fi - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan"; then - libs="$deplibs" + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass"; then + libs=$deplibs deplibs= fi - if test "$linkmode" = prog; then + if test prog = "$linkmode"; then case $pass in - dlopen) libs="$dlfiles" ;; - dlpreopen) libs="$dlprefiles" ;; + dlopen) libs=$dlfiles ;; + dlpreopen) libs=$dlprefiles ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi - if test "$linkmode,$pass" = "lib,dlpreopen"; then + if test lib,dlpreopen = "$linkmode,$pass"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs @@ -6149,26 +7595,26 @@ func_mode_link () esac done done - libs="$dlprefiles" + libs=$dlprefiles fi - if test "$pass" = dlopen; then + if test dlopen = "$pass"; then # Collect dlpreopened libraries - save_deplibs="$deplibs" + save_deplibs=$deplibs deplibs= fi for deplib in $libs; do lib= - found=no + found=false case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) - if test "$linkmode,$pass" = "prog,link"; then + if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" - if test "$linkmode" = lib ; then + if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; @@ -6178,13 +7624,13 @@ func_mode_link () continue ;; -l*) - if test "$linkmode" != lib && test "$linkmode" != prog; then - func_warning "\`-l' is ignored for archives/objects" + if test lib != "$linkmode" && test prog != "$linkmode"; then + func_warning "'-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result - if test "$linkmode" = lib; then + if test lib = "$linkmode"; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" @@ -6192,31 +7638,22 @@ func_mode_link () for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library - lib="$searchdir/lib${name}${search_ext}" + lib=$searchdir/lib$name$search_ext if test -f "$lib"; then - if test "$search_ext" = ".la"; then - found=yes + if test .la = "$search_ext"; then + found=: else - found=no + found=false fi break 2 fi done done - if test "$found" != yes; then - # deplib doesn't seem to be a libtool library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - else # deplib is a libtool library + if $found; then + # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then @@ -6224,19 +7661,19 @@ func_mode_link () old_library= func_source "$lib" for l in $old_library $library_names; do - ll="$l" + ll=$l done - if test "X$ll" = "X$old_library" ; then # only static version available - found=no + if test "X$ll" = "X$old_library"; then # only static version available + found=false func_dirname "$lib" "" "." - ladir="$func_dirname_result" + ladir=$func_dirname_result lib=$ladir/$old_library - if test "$linkmode,$pass" = "prog,link"; then + if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi @@ -6245,15 +7682,25 @@ func_mode_link () *) ;; esac fi + else + # deplib doesn't seem to be a libtool library + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" + fi + continue fi ;; # -l *.ltframework) - if test "$linkmode,$pass" = "prog,link"; then + if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" - if test "$linkmode" = lib ; then + if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; @@ -6266,18 +7713,18 @@ func_mode_link () case $linkmode in lib) deplibs="$deplib $deplibs" - test "$pass" = conv && continue + test conv = "$pass" && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) - if test "$pass" = conv; then + if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi - if test "$pass" = scan; then + if test scan = "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" @@ -6288,13 +7735,13 @@ func_mode_link () func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) - func_warning "\`-L' is ignored for archives/objects" + func_warning "'-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) - if test "$pass" = link; then + if test link = "$pass"; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result @@ -6312,7 +7759,7 @@ func_mode_link () lib=$func_resolve_sysroot_result ;; *.$libext) - if test "$pass" = conv; then + if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi @@ -6323,21 +7770,26 @@ func_mode_link () case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) - valid_a_lib=no + valid_a_lib=false case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then - valid_a_lib=yes + valid_a_lib=: fi ;; pass_all) - valid_a_lib=yes + valid_a_lib=: ;; esac - if test "$valid_a_lib" != yes; then + if $valid_a_lib; then + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + else echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" @@ -6345,18 +7797,13 @@ func_mode_link () echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." - else - echo - $ECHO "*** Warning: Linking the shared library $output against the" - $ECHO "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) - if test "$pass" != link; then + if test link != "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" @@ -6367,10 +7814,10 @@ func_mode_link () esac # linkmode ;; # *.$libext *.lo | *.$objext) - if test "$pass" = conv; then + if test conv = "$pass"; then deplibs="$deplib $deplibs" - elif test "$linkmode" = prog; then - if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + elif test prog = "$linkmode"; then + if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" @@ -6383,22 +7830,20 @@ func_mode_link () continue ;; %DEPLIBS%) - alldeplibs=yes + alldeplibs=: continue ;; esac # case $deplib - if test "$found" = yes || test -f "$lib"; then : - else - func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" - fi + $found || test -f "$lib" \ + || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ - || func_fatal_error "\`$lib' is not a valid libtool archive" + || func_fatal_error "'$lib' is not a valid libtool archive" func_dirname "$lib" "" "." - ladir="$func_dirname_result" + ladir=$func_dirname_result dlname= dlopen= @@ -6428,30 +7873,30 @@ func_mode_link () done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan" || - { test "$linkmode" != prog && test "$linkmode" != lib; }; then + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass" || + { test prog != "$linkmode" && test lib != "$linkmode"; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi - if test "$pass" = conv; then + if test conv = "$pass"; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then - func_fatal_error "cannot find name of link library for \`$lib'" + func_fatal_error "cannot find name of link library for '$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" - elif test "$linkmode" != prog && test "$linkmode" != lib; then - func_fatal_error "\`$lib' is not a convenience library" + elif test prog != "$linkmode" && test lib != "$linkmode"; then + func_fatal_error "'$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" - if $opt_preserve_dup_deps ; then + if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac @@ -6465,26 +7910,26 @@ func_mode_link () # Get the name of the library we link against. linklib= if test -n "$old_library" && - { test "$prefer_static_libs" = yes || - test "$prefer_static_libs,$installed" = "built,no"; }; then + { test yes = "$prefer_static_libs" || + test built,no = "$prefer_static_libs,$installed"; }; then linklib=$old_library else for l in $old_library $library_names; do - linklib="$l" + linklib=$l done fi if test -z "$linklib"; then - func_fatal_error "cannot find name of link library for \`$lib'" + func_fatal_error "cannot find name of link library for '$lib'" fi # This library was specified with -dlopen. - if test "$pass" = dlopen; then - if test -z "$libdir"; then - func_fatal_error "cannot -dlopen a convenience library: \`$lib'" - fi + if test dlopen = "$pass"; then + test -z "$libdir" \ + && func_fatal_error "cannot -dlopen a convenience library: '$lib'" if test -z "$dlname" || - test "$dlopen_support" != yes || - test "$build_libtool_libs" = no; then + test yes != "$dlopen_support" || + test no = "$build_libtool_libs" + then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't @@ -6498,40 +7943,40 @@ func_mode_link () # We need an absolute path. case $ladir in - [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then - func_warning "cannot determine absolute directory name of \`$ladir'" + func_warning "cannot determine absolute directory name of '$ladir'" func_warning "passing it literally to the linker, although it might fail" - abs_ladir="$ladir" + abs_ladir=$ladir fi ;; esac func_basename "$lib" - laname="$func_basename_result" + laname=$func_basename_result # Find the relevant object directory and library name. - if test "X$installed" = Xyes; then + if test yes = "$installed"; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - func_warning "library \`$lib' was moved." - dir="$ladir" - absdir="$abs_ladir" - libdir="$abs_ladir" + func_warning "library '$lib' was moved." + dir=$ladir + absdir=$abs_ladir + libdir=$abs_ladir else - dir="$lt_sysroot$libdir" - absdir="$lt_sysroot$libdir" + dir=$lt_sysroot$libdir + absdir=$lt_sysroot$libdir fi - test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + test yes = "$hardcode_automatic" && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then - dir="$ladir" - absdir="$abs_ladir" + dir=$ladir + absdir=$abs_ladir # Remove this search path later func_append notinst_path " $abs_ladir" else - dir="$ladir/$objdir" - absdir="$abs_ladir/$objdir" + dir=$ladir/$objdir + absdir=$abs_ladir/$objdir # Remove this search path later func_append notinst_path " $abs_ladir" fi @@ -6540,11 +7985,11 @@ func_mode_link () name=$func_stripname_result # This library was specified with -dlpreopen. - if test "$pass" = dlpreopen; then - if test -z "$libdir" && test "$linkmode" = prog; then - func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" + if test dlpreopen = "$pass"; then + if test -z "$libdir" && test prog = "$linkmode"; then + func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" fi - case "$host" in + case $host in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both @@ -6588,9 +8033,9 @@ func_mode_link () if test -z "$libdir"; then # Link the convenience library - if test "$linkmode" = lib; then + if test lib = "$linkmode"; then deplibs="$dir/$old_library $deplibs" - elif test "$linkmode,$pass" = "prog,link"; then + elif test prog,link = "$linkmode,$pass"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else @@ -6600,14 +8045,14 @@ func_mode_link () fi - if test "$linkmode" = prog && test "$pass" != link; then + if test prog = "$linkmode" && test link != "$pass"; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" - linkalldeplibs=no - if test "$link_all_deplibs" != no || test -z "$library_names" || - test "$build_libtool_libs" = no; then - linkalldeplibs=yes + linkalldeplibs=false + if test no != "$link_all_deplibs" || test -z "$library_names" || + test no = "$build_libtool_libs"; then + linkalldeplibs=: fi tmp_libs= @@ -6619,14 +8064,14 @@ func_mode_link () ;; esac # Need to link against all dependency_libs? - if test "$linkalldeplibs" = yes; then + if $linkalldeplibs; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi - if $opt_preserve_dup_deps ; then + if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac @@ -6636,15 +8081,15 @@ func_mode_link () continue fi # $linkmode = prog... - if test "$linkmode,$pass" = "prog,link"; then + if test prog,link = "$linkmode,$pass"; then if test -n "$library_names" && - { { test "$prefer_static_libs" = no || - test "$prefer_static_libs,$installed" = "built,yes"; } || + { { test no = "$prefer_static_libs" || + test built,yes = "$prefer_static_libs,$installed"; } || test -z "$old_library"; }; then # We need to hardcode the library path - if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then # Make sure the rpath contains only unique directories. - case "$temp_rpath:" in + case $temp_rpath: in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac @@ -6673,9 +8118,9 @@ func_mode_link () esac fi # $linkmode,$pass = prog,link... - if test "$alldeplibs" = yes && - { test "$deplibs_check_method" = pass_all || - { test "$build_libtool_libs" = yes && + if $alldeplibs && + { test pass_all = "$deplibs_check_method" || + { test yes = "$build_libtool_libs" && test -n "$library_names"; }; }; then # We only need to search for static libraries continue @@ -6684,19 +8129,19 @@ func_mode_link () link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs - if test "$use_static_libs" = built && test "$installed" = yes; then + if test built = "$use_static_libs" && test yes = "$installed"; then use_static_libs=no fi if test -n "$library_names" && - { test "$use_static_libs" = no || test -z "$old_library"; }; then + { test no = "$use_static_libs" || test -z "$old_library"; }; then case $host in - *cygwin* | *mingw* | *cegcc*) + *cygwin* | *mingw* | *cegcc* | *os2*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) - if test "$installed" = no; then + if test no = "$installed"; then func_append notinst_deplibs " $lib" need_relink=yes fi @@ -6706,24 +8151,24 @@ func_mode_link () # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! - dlopenmodule="" + dlopenmodule= for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then - dlopenmodule="$dlpremoduletest" + dlopenmodule=$dlpremoduletest break fi done - if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then + if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then echo - if test "$linkmode" = prog; then + if test prog = "$linkmode"; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi - if test "$linkmode" = lib && - test "$hardcode_into_libs" = yes; then + if test lib = "$linkmode" && + test yes = "$hardcode_into_libs"; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. @@ -6751,43 +8196,43 @@ func_mode_link () # figure out the soname set dummy $library_names shift - realname="$1" + realname=$1 shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then - soname="$dlname" + soname=$dlname elif test -n "$soname_spec"; then # bleh windows case $host in - *cygwin* | mingw* | *cegcc*) + *cygwin* | mingw* | *cegcc* | *os2*) func_arith $current - $age major=$func_arith_result - versuffix="-$major" + versuffix=-$major ;; esac eval soname=\"$soname_spec\" else - soname="$realname" + soname=$realname fi # Make a new name for the extract_expsyms_cmds to use - soroot="$soname" + soroot=$soname func_basename "$soroot" - soname="$func_basename_result" + soname=$func_basename_result func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else - func_verbose "extracting exported symbol list from \`$soname'" + func_verbose "extracting exported symbol list from '$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else - func_verbose "generating import library for \`$soname'" + func_verbose "generating import library for '$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library @@ -6795,58 +8240,58 @@ func_mode_link () linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" - if test "$linkmode" = prog || test "$opt_mode" != relink; then + if test prog = "$linkmode" || test relink != "$opt_mode"; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) - if test "$hardcode_direct" = no; then - add="$dir/$linklib" + if test no = "$hardcode_direct"; then + add=$dir/$linklib case $host in - *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; - *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; + *-*-sysv4*uw2*) add_dir=-L$dir ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ - *-*-unixware7*) add_dir="-L$dir" ;; + *-*-unixware7*) add_dir=-L$dir ;; *-*-darwin* ) - # if the lib is a (non-dlopened) module then we can not + # if the lib is a (non-dlopened) module then we cannot # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | - $GREP ": [^:]* bundle" >/dev/null ; then + $GREP ": [^:]* bundle" >/dev/null; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" - if test -z "$old_library" ; then + if test -z "$old_library"; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else - add="$dir/$old_library" + add=$dir/$old_library fi elif test -n "$old_library"; then - add="$dir/$old_library" + add=$dir/$old_library fi fi esac - elif test "$hardcode_minus_L" = no; then + elif test no = "$hardcode_minus_L"; then case $host in - *-*-sunos*) add_shlibpath="$dir" ;; + *-*-sunos*) add_shlibpath=$dir ;; esac - add_dir="-L$dir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = no; then - add_shlibpath="$dir" - add="-l$name" + add_dir=-L$dir + add=-l$name + elif test no = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name else lib_linked=no fi ;; relink) - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$dir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$absdir" + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$dir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$absdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in @@ -6855,10 +8300,10 @@ func_mode_link () ;; esac fi - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - add_shlibpath="$dir" - add="-l$name" + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name else lib_linked=no fi @@ -6866,7 +8311,7 @@ func_mode_link () *) lib_linked=no ;; esac - if test "$lib_linked" != yes; then + if test yes != "$lib_linked"; then func_fatal_configuration "unsupported hardcode properties" fi @@ -6876,15 +8321,15 @@ func_mode_link () *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi - if test "$linkmode" = prog; then + if test prog = "$linkmode"; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" - if test "$hardcode_direct" != yes && - test "$hardcode_minus_L" != yes && - test "$hardcode_shlibpath_var" = yes; then + if test yes != "$hardcode_direct" && + test yes != "$hardcode_minus_L" && + test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; @@ -6893,37 +8338,37 @@ func_mode_link () fi fi - if test "$linkmode" = prog || test "$opt_mode" = relink; then + if test prog = "$linkmode" || test relink = "$opt_mode"; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then if test -f "$inst_prefix_dir$libdir/$linklib"; then - add="$inst_prefix_dir$libdir/$linklib" - else - add="$libdir/$linklib" - fi - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$libdir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) func_append finalize_shlibpath "$libdir:" ;; - esac - add="-l$name" - elif test "$hardcode_automatic" = yes; then - if test -n "$inst_prefix_dir" && - test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$libdir + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + add=-l$name + elif test yes = "$hardcode_automatic"; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib"; then + add=$inst_prefix_dir$libdir/$linklib + else + add=$libdir/$linklib + fi else # We cannot seem to hardcode it, guess we'll fake it. - add_dir="-L$libdir" + add_dir=-L$libdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in @@ -6932,10 +8377,10 @@ func_mode_link () ;; esac fi - add="-l$name" + add=-l$name fi - if test "$linkmode" = prog; then + if test prog = "$linkmode"; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else @@ -6943,43 +8388,43 @@ func_mode_link () test -n "$add" && deplibs="$add $deplibs" fi fi - elif test "$linkmode" = prog; then + elif test prog = "$linkmode"; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. - if test "$hardcode_direct" != unsupported; then - test -n "$old_library" && linklib="$old_library" + if test unsupported != "$hardcode_direct"; then + test -n "$old_library" && linklib=$old_library compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi - elif test "$build_libtool_libs" = yes; then + elif test yes = "$build_libtool_libs"; then # Not a shared library - if test "$deplibs_check_method" != pass_all; then + if test pass_all != "$deplibs_check_method"; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo - $ECHO "*** Warning: This system can not link to static lib archive $lib." + $ECHO "*** Warning: This system cannot link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." - if test "$module" = yes; then + if test yes = "$module"; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." - echo "*** \`nm' from GNU binutils and a full rebuild may help." + echo "*** 'nm' from GNU binutils and a full rebuild may help." fi - if test "$build_old_libs" = no; then + if test no = "$build_old_libs"; then build_libtool_libs=module build_old_libs=yes else @@ -6992,11 +8437,11 @@ func_mode_link () fi fi # link shared/static library? - if test "$linkmode" = lib; then + if test lib = "$linkmode"; then if test -n "$dependency_libs" && - { test "$hardcode_into_libs" != yes || - test "$build_old_libs" = yes || - test "$link_static" = yes; }; then + { test yes != "$hardcode_into_libs" || + test yes = "$build_old_libs" || + test yes = "$link_static"; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do @@ -7010,12 +8455,12 @@ func_mode_link () *) func_append temp_deplibs " $libdir";; esac done - dependency_libs="$temp_deplibs" + dependency_libs=$temp_deplibs fi func_append newlib_search_path " $absdir" # Link against this library - test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do @@ -7025,7 +8470,7 @@ func_mode_link () func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac - if $opt_preserve_dup_deps ; then + if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; @@ -7034,12 +8479,12 @@ func_mode_link () func_append tmp_libs " $func_resolve_sysroot_result" done - if test "$link_all_deplibs" != no; then + if test no != "$link_all_deplibs"; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in - -L*) path="$deplib" ;; + -L*) path=$deplib ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result @@ -7047,12 +8492,12 @@ func_mode_link () dir=$func_dirname_result # We need an absolute path. case $dir in - [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then - func_warning "cannot determine absolute directory name of \`$dir'" - absdir="$dir" + func_warning "cannot determine absolute directory name of '$dir'" + absdir=$dir fi ;; esac @@ -7060,35 +8505,35 @@ func_mode_link () case $host in *-*-darwin*) depdepl= - eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` - if test -n "$deplibrary_names" ; then - for tmp in $deplibrary_names ; do + eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names"; then + for tmp in $deplibrary_names; do depdepl=$tmp done - if test -f "$absdir/$objdir/$depdepl" ; then - depdepl="$absdir/$objdir/$depdepl" - darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -f "$absdir/$objdir/$depdepl"; then + depdepl=$absdir/$objdir/$depdepl + darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then - darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi - func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" - func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" + func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" + func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" path= fi fi ;; *) - path="-L$absdir/$objdir" + path=-L$absdir/$objdir ;; esac else - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" + func_fatal_error "'$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ - func_warning "\`$deplib' seems to be moved" + func_warning "'$deplib' seems to be moved" - path="-L$absdir" + path=-L$absdir fi ;; esac @@ -7100,23 +8545,23 @@ func_mode_link () fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs - if test "$pass" = link; then - if test "$linkmode" = "prog"; then + if test link = "$pass"; then + if test prog = "$linkmode"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi - dependency_libs="$newdependency_libs" - if test "$pass" = dlpreopen; then + dependency_libs=$newdependency_libs + if test dlpreopen = "$pass"; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi - if test "$pass" != dlopen; then - if test "$pass" != conv; then + if test dlopen != "$pass"; then + test conv = "$pass" || { # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do @@ -7126,12 +8571,12 @@ func_mode_link () esac done newlib_search_path= - fi + } - if test "$linkmode,$pass" != "prog,link"; then - vars="deplibs" - else + if test prog,link = "$linkmode,$pass"; then vars="compile_deplibs finalize_deplibs" + else + vars=deplibs fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order @@ -7189,62 +8634,93 @@ func_mode_link () eval $var=\"$tmp_libs\" done # for var fi + + # Add Sun CC postdeps if required: + test CXX = "$tagname" && { + case $host_os in + linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C++ 5.9 + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + + solaris*) + func_cc_basename "$CC" + case $func_cc_basename_result in + CC* | sunCC*) + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + esac + } + # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= - for i in $dependency_libs ; do + for i in $dependency_libs; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) - i="" + i= ;; esac - if test -n "$i" ; then + if test -n "$i"; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass - if test "$linkmode" = prog; then - dlfiles="$newdlfiles" + if test prog = "$linkmode"; then + dlfiles=$newdlfiles fi - if test "$linkmode" = prog || test "$linkmode" = lib; then - dlprefiles="$newdlprefiles" + if test prog = "$linkmode" || test lib = "$linkmode"; then + dlprefiles=$newdlprefiles fi case $linkmode in oldlib) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for archives" + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for archives" ;; + func_warning "'-l' and '-L' are ignored for archives" ;; esac test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for archives" + func_warning "'-rpath' is ignored for archives" test -n "$xrpath" && \ - func_warning "\`-R' is ignored for archives" + func_warning "'-R' is ignored for archives" test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for archives" + func_warning "'-version-info/-version-number' is ignored for archives" test -n "$release" && \ - func_warning "\`-release' is ignored for archives" + func_warning "'-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ - func_warning "\`-export-symbols' is ignored for archives" + func_warning "'-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no - oldlibs="$output" + oldlibs=$output func_append objs "$old_deplibs" ;; lib) - # Make sure we only generate libraries of the form `libNAME.la'. + # Make sure we only generate libraries of the form 'libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" @@ -7253,10 +8729,10 @@ func_mode_link () eval libname=\"$libname_spec\" ;; *) - test "$module" = no && \ - func_fatal_help "libtool library \`$output' must begin with \`lib'" + test no = "$module" \ + && func_fatal_help "libtool library '$output' must begin with 'lib'" - if test "$need_lib_prefix" != no; then + if test no != "$need_lib_prefix"; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result @@ -7270,8 +8746,8 @@ func_mode_link () esac if test -n "$objs"; then - if test "$deplibs_check_method" != pass_all; then - func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" + if test pass_all != "$deplibs_check_method"; then + func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" @@ -7280,21 +8756,21 @@ func_mode_link () fi fi - test "$dlself" != no && \ - func_warning "\`-dlopen self' is ignored for libtool libraries" + test no = "$dlself" \ + || func_warning "'-dlopen self' is ignored for libtool libraries" set dummy $rpath shift - test "$#" -gt 1 && \ - func_warning "ignoring multiple \`-rpath's for a libtool library" + test 1 -lt "$#" \ + && func_warning "ignoring multiple '-rpath's for a libtool library" - install_libdir="$1" + install_libdir=$1 oldlibs= if test -z "$rpath"; then - if test "$build_libtool_libs" = yes; then + if test yes = "$build_libtool_libs"; then # Building a libtool convenience library. - # Some compilers have problems with a `.al' extension so + # Some compilers have problems with a '.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" @@ -7303,20 +8779,20 @@ func_mode_link () fi test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for convenience libraries" + func_warning "'-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ - func_warning "\`-release' is ignored for convenience libraries" + func_warning "'-release' is ignored for convenience libraries" else # Parse the version information argument. - save_ifs="$IFS"; IFS=':' + save_ifs=$IFS; IFS=: set dummy $vinfo 0 0 0 shift - IFS="$save_ifs" + IFS=$save_ifs test -n "$7" && \ - func_fatal_help "too many parameters to \`-version-info'" + func_fatal_help "too many parameters to '-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts @@ -7324,42 +8800,42 @@ func_mode_link () case $vinfo_number in yes) - number_major="$1" - number_minor="$2" - number_revision="$3" + number_major=$1 + number_minor=$2 + number_revision=$3 # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix - # which has an extra 1 added just for fun + # that has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor - darwin|linux|osf|windows|none) + darwin|freebsd-elf|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result - age="$number_minor" - revision="$number_revision" + age=$number_minor + revision=$number_revision ;; - freebsd-aout|freebsd-elf|qnx|sunos) - current="$number_major" - revision="$number_minor" - age="0" + freebsd-aout|qnx|sunos) + current=$number_major + revision=$number_minor + age=0 ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result - age="$number_minor" - revision="$number_minor" + age=$number_minor + revision=$number_minor lt_irix_increment=no ;; esac ;; no) - current="$1" - revision="$2" - age="$3" + current=$1 + revision=$2 + age=$3 ;; esac @@ -7367,30 +8843,30 @@ func_mode_link () case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) - func_error "CURRENT \`$current' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" + func_error "CURRENT '$current' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) - func_error "REVISION \`$revision' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" + func_error "REVISION '$revision' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) - func_error "AGE \`$age' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" + func_error "AGE '$age' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then - func_error "AGE \`$age' is greater than the current interface number \`$current'" - func_fatal_error "\`$vinfo' is not valid version information" + func_error "AGE '$age' is greater than the current interface number '$current'" + func_fatal_error "'$vinfo' is not valid version information" fi # Calculate the version variables. @@ -7406,26 +8882,36 @@ func_mode_link () # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result - versuffix="$major.$age.$revision" + versuffix=$major.$age.$revision # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result - xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + # On Darwin other compilers + case $CC in + nagfor*) + verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + ;; + *) + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + esac ;; freebsd-aout) - major=".$current" - versuffix=".$current.$revision"; + major=.$current + versuffix=.$current.$revision ;; freebsd-elf) - major=".$current" - versuffix=".$current" + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision ;; irix | nonstopux) - if test "X$lt_irix_increment" = "Xno"; then + if test no = "$lt_irix_increment"; then func_arith $current - $age else func_arith $current - $age + 1 @@ -7436,70 +8922,75 @@ func_mode_link () nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac - verstring="$verstring_prefix$major.$revision" + verstring=$verstring_prefix$major.$revision # Add in all the interfaces that we are compatible with. loop=$revision - while test "$loop" -ne 0; do + while test 0 -ne "$loop"; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result - verstring="$verstring_prefix$major.$iface:$verstring" + verstring=$verstring_prefix$major.$iface:$verstring done - # Before this point, $major must not contain `.'. + # Before this point, $major must not contain '.'. major=.$major - versuffix="$major.$revision" + versuffix=$major.$revision ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result - versuffix="$major.$age.$revision" - versuffix2="$major.$age" + versuffix=$major.$age.$revision + versuffix2=$major.$age ;; osf) func_arith $current - $age major=.$func_arith_result - versuffix=".$current.$age.$revision" - verstring="$current.$age.$revision" + versuffix=.$current.$age.$revision + verstring=$current.$age.$revision # Add in all the interfaces that we are compatible with. loop=$age - while test "$loop" -ne 0; do + while test 0 -ne "$loop"; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result - verstring="$verstring:${iface}.0" + verstring=$verstring:$iface.0 done # Make executables depend on our current version. - func_append verstring ":${current}.0" + func_append verstring ":$current.0" ;; qnx) - major=".$current" - versuffix=".$current" + major=.$current + versuffix=.$current + ;; + + sco) + major=.$current + versuffix=.$current ;; sunos) - major=".$current" - versuffix=".$current.$revision" + major=.$current + versuffix=.$current.$revision ;; windows) # Use '-' rather than '.', since we only want one - # extension on DOS 8.3 filesystems. + # extension on DOS 8.3 file systems. func_arith $current - $age major=$func_arith_result - versuffix="-$major" + versuffix=-$major ;; *) - func_fatal_configuration "unknown library version type \`$version_type'" + func_fatal_configuration "unknown library version type '$version_type'" ;; esac @@ -7513,45 +9004,48 @@ func_mode_link () verstring= ;; *) - verstring="0.0" + verstring=0.0 ;; esac - if test "$need_version" = no; then + if test no = "$need_version"; then versuffix= versuffix2= else - versuffix=".0.0" - versuffix2=".0.0" + versuffix=.0.0 + versuffix2=.0.0 fi fi # Remove version info from name if versioning should be avoided - if test "$avoid_version" = yes && test "$need_version" = no; then + if test yes,no = "$avoid_version,$need_version"; then major= versuffix= versuffix2= - verstring="" + verstring= fi # Check to see if the archive will have undefined symbols. - if test "$allow_undefined" = yes; then - if test "$allow_undefined_flag" = unsupported; then - func_warning "undefined symbols not allowed in $host shared libraries" - build_libtool_libs=no - build_old_libs=yes + if test yes = "$allow_undefined"; then + if test unsupported = "$allow_undefined_flag"; then + if test yes = "$build_old_libs"; then + func_warning "undefined symbols not allowed in $host shared libraries; building static only" + build_libtool_libs=no + else + func_fatal_error "can't build $host shared library unless -no-undefined is specified" + fi fi else # Don't allow undefined symbols. - allow_undefined_flag="$no_undefined_flag" + allow_undefined_flag=$no_undefined_flag fi fi - func_generate_dlsyms "$libname" "$libname" "yes" + func_generate_dlsyms "$libname" "$libname" : func_append libobjs " $symfileobj" - test "X$libobjs" = "X " && libobjs= + test " " = "$libobjs" && libobjs= - if test "$opt_mode" != relink; then + if test relink != "$opt_mode"; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= @@ -7560,8 +9054,8 @@ func_mode_link () case $p in *.$objext | *.gcno) ;; - $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) - if test "X$precious_files_regex" != "X"; then + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) + if test -n "$precious_files_regex"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue @@ -7577,11 +9071,11 @@ func_mode_link () fi # Now set the variables for building old libraries. - if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. - oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. @@ -7602,13 +9096,13 @@ func_mode_link () *) func_append finalize_rpath " $libdir" ;; esac done - if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened - old_dlfiles="$dlfiles" + old_dlfiles=$dlfiles dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in @@ -7618,7 +9112,7 @@ func_mode_link () done # Make sure dlprefiles contains only unique files - old_dlprefiles="$dlprefiles" + old_dlprefiles=$dlprefiles dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in @@ -7627,7 +9121,7 @@ func_mode_link () esac done - if test "$build_libtool_libs" = yes; then + if test yes = "$build_libtool_libs"; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) @@ -7640,7 +9134,7 @@ func_mode_link () *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; - *-*-openbsd* | *-*-mirbsd* | *-*-freebsd* | *-*-dragonfly*) + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-mirbsd*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) @@ -7651,7 +9145,7 @@ func_mode_link () ;; *) # Add libc to deplibs on all other systems if necessary. - if test "$build_libtool_need_lc" = "yes"; then + if test yes = "$build_libtool_need_lc"; then func_append deplibs " -lc" fi ;; @@ -7668,10 +9162,10 @@ func_mode_link () # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? - release="" - versuffix="" - versuffix2="" - major="" + release= + versuffix= + versuffix2= + major= newdeplibs= droppeddeps=no case $deplibs_check_method in @@ -7700,20 +9194,20 @@ EOF -l*) func_stripname -l '' "$i" name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $i "*) func_append newdeplibs " $i" - i="" + i= ;; esac fi - if test -n "$i" ; then + if test -n "$i"; then libname=`eval "\\$ECHO \"$libname_spec\""` deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` set dummy $deplib_matches; shift deplib_match=$1 - if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then + if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then func_append newdeplibs " $i" else droppeddeps=yes @@ -7743,20 +9237,20 @@ EOF $opt_dry_run || $RM conftest if $LTCC $LTCFLAGS -o conftest conftest.c $i; then ldd_output=`ldd conftest` - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $i "*) func_append newdeplibs " $i" - i="" + i= ;; esac fi - if test -n "$i" ; then + if test -n "$i"; then libname=`eval "\\$ECHO \"$libname_spec\""` deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` set dummy $deplib_matches; shift deplib_match=$1 - if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then + if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then func_append newdeplibs " $i" else droppeddeps=yes @@ -7793,24 +9287,24 @@ EOF -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" - a_deplib="" + a_deplib= ;; esac fi - if test -n "$a_deplib" ; then + if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` if test -n "$file_magic_glob"; then libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` else libnameglob=$libname fi - test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob` + test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - if test "$want_nocaseglob" = yes; then + if test yes = "$want_nocaseglob"; then shopt -s nocaseglob potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` $nocaseglob @@ -7828,25 +9322,25 @@ EOF # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? - potlib="$potent_lib" + potlib=$potent_lib while test -h "$potlib" 2>/dev/null; do - potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + potliblink=`ls -ld $potlib | $SED 's/.* -> //'` case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; - *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; + [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; + *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" - a_deplib="" + a_deplib= break 2 fi done done fi - if test -n "$a_deplib" ; then + if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." @@ -7854,7 +9348,7 @@ EOF echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then + if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" @@ -7877,30 +9371,30 @@ EOF -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" - a_deplib="" + a_deplib= ;; esac fi - if test -n "$a_deplib" ; then + if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do - potlib="$potent_lib" # see symlink-check above in file_magic test + potlib=$potent_lib # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" - a_deplib="" + a_deplib= break 2 fi done done fi - if test -n "$a_deplib" ; then + if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." @@ -7908,7 +9402,7 @@ EOF echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then + if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" @@ -7924,18 +9418,18 @@ EOF done # Gone through all deplibs. ;; none | unknown | *) - newdeplibs="" + newdeplibs= tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - for i in $predeps $postdeps ; do + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + for i in $predeps $postdeps; do # can't use Xsed below, because $i might contain '/' - tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` done fi case $tmp_deplibs in *[!\ \ ]*) echo - if test "X$deplibs_check_method" = "Xnone"; then + if test none = "$deplibs_check_method"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." @@ -7960,8 +9454,8 @@ EOF ;; esac - if test "$droppeddeps" = yes; then - if test "$module" = yes; then + if test yes = "$droppeddeps"; then + if test yes = "$module"; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" @@ -7970,12 +9464,12 @@ EOF if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." - echo "*** \`nm' from GNU binutils and a full rebuild may help." + echo "*** 'nm' from GNU binutils and a full rebuild may help." fi - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else @@ -7986,14 +9480,14 @@ EOF echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." - if test "$allow_undefined" = no; then + if test no = "$allow_undefined"; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else @@ -8039,7 +9533,7 @@ EOF *) func_append new_libs " $deplib" ;; esac done - deplibs="$new_libs" + deplibs=$new_libs # All the library-specific variables (install_libdir is set above). library_names= @@ -8047,25 +9541,25 @@ EOF dlname= # Test again, we may have decided not to build it any more - if test "$build_libtool_libs" = yes; then - # Remove ${wl} instances when linking with ld. + if test yes = "$build_libtool_libs"; then + # Remove $wl instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac - if test "$hardcode_into_libs" = yes; then + if test yes = "$hardcode_into_libs"; then # Hardcode the library paths hardcode_libdirs= dep_rpath= - rpath="$finalize_rpath" - test "$opt_mode" != relink && rpath="$compile_rpath$rpath" + rpath=$finalize_rpath + test relink = "$opt_mode" || rpath=$compile_rpath$rpath for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" + hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in @@ -8090,7 +9584,7 @@ EOF # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" + libdir=$hardcode_libdirs eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then @@ -8104,8 +9598,8 @@ EOF test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi - shlibpath="$finalize_shlibpath" - test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + shlibpath=$finalize_shlibpath + test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi @@ -8115,19 +9609,19 @@ EOF eval library_names=\"$library_names_spec\" set dummy $library_names shift - realname="$1" + realname=$1 shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else - soname="$realname" + soname=$realname fi if test -z "$dlname"; then dlname=$soname fi - lib="$output_objdir/$realname" + lib=$output_objdir/$realname linknames= for link do @@ -8141,7 +9635,7 @@ EOF delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" - export_symbols="$output_objdir/$libname.uexp" + export_symbols=$output_objdir/$libname.uexp func_append delfiles " $export_symbols" fi @@ -8150,31 +9644,31 @@ EOF cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile - if test "x`$SED 1q $export_symbols`" != xEXPORTS; then + func_dll_def_p "$export_symbols" || { # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. - orig_export_symbols="$export_symbols" + orig_export_symbols=$export_symbols export_symbols= always_export_symbols=yes - fi + } fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then - if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" + if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds - save_ifs="$IFS"; IFS='~' + save_ifs=$IFS; IFS='~' for cmd1 in $cmds; do - IFS="$save_ifs" + IFS=$save_ifs # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in @@ -8188,7 +9682,7 @@ EOF try_normal_branch=no ;; esac - if test "$try_normal_branch" = yes \ + if test yes = "$try_normal_branch" \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then @@ -8199,7 +9693,7 @@ EOF output_la=$func_basename_result save_libobjs=$libobjs save_output=$output - output=${output_objdir}/${output_la}.nm + output=$output_objdir/$output_la.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" @@ -8222,8 +9716,8 @@ EOF break fi done - IFS="$save_ifs" - if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then + IFS=$save_ifs + if test -n "$export_symbols_regex" && test : != "$skipped_export"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi @@ -8231,16 +9725,16 @@ EOF fi if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi - if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then + if test : != "$skipped_export" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine + # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. @@ -8259,11 +9753,11 @@ EOF ;; esac done - deplibs="$tmp_deplibs" + deplibs=$tmp_deplibs if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && - test "$compiler_needs_object" = yes && + test yes = "$compiler_needs_object" && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. @@ -8274,7 +9768,7 @@ EOF eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else - gentop="$output_objdir/${outputname}x" + gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $convenience @@ -8283,18 +9777,18 @@ EOF fi fi - if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking - if test "$opt_mode" = relink; then + if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then + if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds @@ -8312,7 +9806,7 @@ EOF fi fi - if test "X$skipped_export" != "X:" && + if test : != "$skipped_export" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then @@ -8345,8 +9839,8 @@ EOF last_robj= k=1 - if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then - output=${output_objdir}/${output_la}.lnkscript + if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then + output=$output_objdir/$output_la.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs @@ -8358,14 +9852,14 @@ EOF func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result - elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then - output=${output_objdir}/${output_la}.lnk + elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then + output=$output_objdir/$output_la.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= - if test "$compiler_needs_object" = yes; then + if test yes = "$compiler_needs_object"; then firstobj="$1 " shift fi @@ -8380,7 +9874,7 @@ EOF else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." - output=$output_objdir/$output_la-${k}.$objext + output=$output_objdir/$output_la-$k.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result @@ -8392,13 +9886,13 @@ EOF func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result - if test "X$objlist" = X || + if test -z "$objlist" || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. - if test "$k" -eq 1 ; then + if test 1 -eq "$k"; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" @@ -8408,10 +9902,10 @@ EOF reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi - last_robj=$output_objdir/$output_la-${k}.$objext + last_robj=$output_objdir/$output_la-$k.$objext func_arith $k + 1 k=$func_arith_result - output=$output_objdir/$output_la-${k}.$objext + output=$output_objdir/$output_la-$k.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result @@ -8423,9 +9917,9 @@ EOF # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" - eval concat_cmds=\"\${concat_cmds}$reload_cmds\" + eval concat_cmds=\"\$concat_cmds$reload_cmds\" if test -n "$last_robj"; then - eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi func_append delfiles " $output" @@ -8433,9 +9927,9 @@ EOF output= fi - if ${skipped_export-false}; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" + ${skipped_export-false} && { + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. @@ -8444,16 +9938,16 @@ EOF if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi - fi + } test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. - save_ifs="$IFS"; IFS='~' + save_ifs=$IFS; IFS='~' for cmd in $concat_cmds; do - IFS="$save_ifs" - $opt_silent || { + IFS=$save_ifs + $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } @@ -8461,7 +9955,7 @@ EOF lt_exit=$? # Restore the uninstalled library and exit - if test "$opt_mode" = relink; then + if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) @@ -8470,7 +9964,7 @@ EOF exit $lt_exit } done - IFS="$save_ifs" + IFS=$save_ifs if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' @@ -8478,18 +9972,18 @@ EOF fi fi - if ${skipped_export-false}; then + ${skipped_export-false} && { if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine + # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. @@ -8498,7 +9992,7 @@ EOF export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi - fi + } libobjs=$output # Restore the value of output. @@ -8512,7 +10006,7 @@ EOF # value of $libobjs for piecewise linking. # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then + if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else @@ -8534,7 +10028,7 @@ EOF # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" + gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles @@ -8542,11 +10036,12 @@ EOF test "X$libobjs" = "X " && libobjs= fi - save_ifs="$IFS"; IFS='~' + save_ifs=$IFS; IFS='~' for cmd in $cmds; do - IFS="$save_ifs" + IFS=$sp$nl eval cmd=\"$cmd\" - $opt_silent || { + IFS=$save_ifs + $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } @@ -8554,7 +10049,7 @@ EOF lt_exit=$? # Restore the uninstalled library and exit - if test "$opt_mode" = relink; then + if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) @@ -8563,10 +10058,10 @@ EOF exit $lt_exit } done - IFS="$save_ifs" + IFS=$save_ifs # Restore the uninstalled library and exit - if test "$opt_mode" = relink; then + if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then @@ -8586,39 +10081,39 @@ EOF done # If -module or -export-dynamic was specified, set the dlname. - if test "$module" = yes || test "$export_dynamic" = yes; then + if test yes = "$module" || test yes = "$export_dynamic"; then # On all known operating systems, these are identical. - dlname="$soname" + dlname=$soname fi fi ;; obj) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for objects" + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for objects" ;; + func_warning "'-l' and '-L' are ignored for objects" ;; esac test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for objects" + func_warning "'-rpath' is ignored for objects" test -n "$xrpath" && \ - func_warning "\`-R' is ignored for objects" + func_warning "'-R' is ignored for objects" test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for objects" + func_warning "'-version-info' is ignored for objects" test -n "$release" && \ - func_warning "\`-release' is ignored for objects" + func_warning "'-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ - func_fatal_error "cannot build library object \`$output' from non-libtool objects" + func_fatal_error "cannot build library object '$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" @@ -8626,7 +10121,7 @@ EOF ;; *) libobj= - obj="$output" + obj=$output ;; esac @@ -8639,17 +10134,19 @@ EOF # the extraction. reload_conv_objs= gentop= - # reload_cmds runs $LD directly, so let us get rid of - # -Wl from whole_archive_flag_spec and hope we can get by with - # turning comma into space.. - wl= - + # if reload_cmds runs $LD directly, get rid of -Wl from + # whole_archive_flag_spec and hope we can get by with turning comma + # into space. + case $reload_cmds in + *\$LD[\ \$]*) wl= ;; + esac if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" - reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags else - gentop="$output_objdir/${obj}x" + gentop=$output_objdir/${obj}x func_append generated " $gentop" func_extract_archives $gentop $convenience @@ -8658,12 +10155,12 @@ EOF fi # If we're not building shared, we need to use non_pic_objs - test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" + test yes = "$build_libtool_libs" || libobjs=$non_pic_objects # Create the old-style object. - reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs - output="$obj" + output=$obj func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. @@ -8675,7 +10172,7 @@ EOF exit $EXIT_SUCCESS fi - if test "$build_libtool_libs" != yes; then + test yes = "$build_libtool_libs" || { if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi @@ -8685,12 +10182,12 @@ EOF # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS - fi + } - if test -n "$pic_flag" || test "$pic_mode" != default; then + if test -n "$pic_flag" || test default != "$pic_mode"; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" - output="$libobj" + output=$libobj func_execute_cmds "$reload_cmds" 'exit $?' fi @@ -8707,16 +10204,14 @@ EOF output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for programs" + func_warning "'-version-info' is ignored for programs" test -n "$release" && \ - func_warning "\`-release' is ignored for programs" + func_warning "'-release' is ignored for programs" - test "$preload" = yes \ - && test "$dlopen_support" = unknown \ - && test "$dlopen_self" = unknown \ - && test "$dlopen_self_static" = unknown && \ - func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." + $preload \ + && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ + && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) @@ -8730,11 +10225,11 @@ EOF *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). - if test "$tagname" = CXX ; then + if test CXX = "$tagname"; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) - func_append compile_command " ${wl}-bind_at_load" - func_append finalize_command " ${wl}-bind_at_load" + func_append compile_command " $wl-bind_at_load" + func_append finalize_command " $wl-bind_at_load" ;; esac fi @@ -8770,7 +10265,7 @@ EOF *) func_append new_libs " $deplib" ;; esac done - compile_deplibs="$new_libs" + compile_deplibs=$new_libs func_append compile_command " $compile_deplibs" @@ -8794,7 +10289,7 @@ EOF if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" + hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in @@ -8817,7 +10312,7 @@ EOF fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` + testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; @@ -8834,10 +10329,10 @@ EOF # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" + libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi - compile_rpath="$rpath" + compile_rpath=$rpath rpath= hardcode_libdirs= @@ -8845,7 +10340,7 @@ EOF if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" + hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in @@ -8870,45 +10365,43 @@ EOF # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" + libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi - finalize_rpath="$rpath" + finalize_rpath=$rpath - if test -n "$libobjs" && test "$build_old_libs" = yes; then + if test -n "$libobjs" && test yes = "$build_old_libs"; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi - func_generate_dlsyms "$outputname" "@PROGRAM@" "no" + func_generate_dlsyms "$outputname" "@PROGRAM@" false # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi - wrappers_required=yes + wrappers_required=: case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. - wrappers_required=no + wrappers_required=false ;; *cygwin* | *mingw* ) - if test "$build_libtool_libs" != yes; then - wrappers_required=no - fi + test yes = "$build_libtool_libs" || wrappers_required=false ;; *) - if test "$need_relink" = no || test "$build_libtool_libs" != yes; then - wrappers_required=no + if test no = "$need_relink" || test yes != "$build_libtool_libs"; then + wrappers_required=false fi ;; esac - if test "$wrappers_required" = no; then + $wrappers_required || { # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` - link_command="$compile_command$compile_rpath" + link_command=$compile_command$compile_rpath # We have no uninstalled library dependencies, so finalize right now. exit_status=0 @@ -8921,12 +10414,12 @@ EOF fi # Delete the generated files. - if test -f "$output_objdir/${outputname}S.${objext}"; then - func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' + if test -f "$output_objdir/${outputname}S.$objext"; then + func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' fi exit $exit_status - fi + } if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" @@ -8956,9 +10449,9 @@ EOF fi fi - if test "$no_install" = yes; then + if test yes = "$no_install"; then # We don't need to create a wrapper script. - link_command="$compile_var$compile_command$compile_rpath" + link_command=$compile_var$compile_command$compile_rpath # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. @@ -8975,27 +10468,28 @@ EOF exit $EXIT_SUCCESS fi - if test "$hardcode_action" = relink; then - # Fast installation is not supported - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" + case $hardcode_action,$fast_install in + relink,*) + # Fast installation is not supported + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath - func_warning "this platform does not like uninstalled shared libraries" - func_warning "\`$output' will be relinked during installation" - else - if test "$fast_install" != no; then - link_command="$finalize_var$compile_command$finalize_rpath" - if test "$fast_install" = yes; then - relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` - else - # fast_install is set to needless - relink_command= - fi - else - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - fi - fi + func_warning "this platform does not like uninstalled shared libraries" + func_warning "'$output' will be relinked during installation" + ;; + *,yes) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + ;; + *,no) + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath + ;; + *,needless) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command= + ;; + esac # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` @@ -9052,8 +10546,8 @@ EOF func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result - cwrappersource="$output_path/$objdir/lt-$output_name.c" - cwrapper="$output_path/$output_name.exe" + cwrappersource=$output_path/$objdir/lt-$output_name.c + cwrapper=$output_path/$output_name.exe $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 @@ -9074,7 +10568,7 @@ EOF trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. - if test "x$build" = "x$host" ; then + if test "x$build" = "x$host"; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result @@ -9097,25 +10591,27 @@ EOF # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do - if test "$build_libtool_libs" = convenience; then - oldobjs="$libobjs_save $symfileobj" - addlibs="$convenience" - build_libtool_libs=no - else - if test "$build_libtool_libs" = module; then - oldobjs="$libobjs_save" + case $build_libtool_libs in + convenience) + oldobjs="$libobjs_save $symfileobj" + addlibs=$convenience build_libtool_libs=no - else + ;; + module) + oldobjs=$libobjs_save + addlibs=$old_convenience + build_libtool_libs=no + ;; + *) oldobjs="$old_deplibs $non_pic_objects" - if test "$preload" = yes && test -f "$symfileobj"; then - func_append oldobjs " $symfileobj" - fi - fi - addlibs="$old_convenience" - fi + $preload && test -f "$symfileobj" \ + && func_append oldobjs " $symfileobj" + addlibs=$old_convenience + ;; + esac if test -n "$addlibs"; then - gentop="$output_objdir/${outputname}x" + gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $addlibs @@ -9123,13 +10619,13 @@ EOF fi # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" + gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles @@ -9150,7 +10646,7 @@ EOF : else echo "copying selected object files to avoid basename conflicts..." - gentop="$output_objdir/${outputname}x" + gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs @@ -9159,7 +10655,7 @@ EOF for obj in $save_oldobjs do func_basename "$obj" - objbase="$func_basename_result" + objbase=$func_basename_result case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) @@ -9228,18 +10724,18 @@ EOF else # the above command should be used before it gets too long oldobjs=$objlist - if test "$obj" = "$last_oldobj" ; then + if test "$obj" = "$last_oldobj"; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist - if test "X$oldobjs" = "X" ; then + if test -z "$oldobjs"; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" @@ -9256,7 +10752,7 @@ EOF case $output in *.la) old_library= - test "$build_old_libs" = yes && old_library="$libname.$libext" + test yes = "$build_old_libs" && old_library=$libname.$libext func_verbose "creating $output" # Preserve any variables that may affect compiler behavior @@ -9271,31 +10767,31 @@ EOF fi done # Quote the link command for shipping. - relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` - if test "$hardcode_automatic" = yes ; then + if test yes = "$hardcode_automatic"; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do - if test "$installed" = yes; then + if test yes = "$installed"; then if test -z "$install_libdir"; then break fi - output="$output_objdir/$outputname"i + output=$output_objdir/${outputname}i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" - name="$func_basename_result" + name=$func_basename_result func_resolve_sysroot "$deplib" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" + func_fatal_error "'$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) @@ -9311,23 +10807,23 @@ EOF *) func_append newdependency_libs " $deplib" ;; esac done - dependency_libs="$newdependency_libs" + dependency_libs=$newdependency_libs newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" + func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done - dlfiles="$newdlfiles" + dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in @@ -9337,34 +10833,34 @@ EOF # didn't already link the preopened objects directly into # the library: func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" + func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done - dlprefiles="$newdlprefiles" + dlprefiles=$newdlprefiles else newdlfiles= for lib in $dlfiles; do case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done - dlfiles="$newdlfiles" + dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done - dlprefiles="$newdlprefiles" + dlprefiles=$newdlprefiles fi $RM $output # place dlname in correct position for cygwin @@ -9380,10 +10876,9 @@ EOF case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. - if test "x$bindir" != x ; - then + if test -n "$bindir"; then func_relative_path "$install_libdir" "$bindir" - tdlname=$func_relative_path_result$dlname + tdlname=$func_relative_path_result/$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname @@ -9392,7 +10887,7 @@ EOF esac $ECHO > $output "\ # $outputname - a libtool library file -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. @@ -9406,7 +10901,7 @@ library_names='$library_names' # The name of the static archive. old_library='$old_library' -# Linker flags that can not go in dependency_libs. +# Linker flags that cannot go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. @@ -9432,8 +10927,7 @@ dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" - if test "$installed" = no && test "$need_relink" = yes && \ - test -n "$relink_command"; then + if test no,yes = "$installed,$need_relink" && test -n "$relink_command"; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi @@ -9448,27 +10942,29 @@ relink_command=\"$relink_command\"" exit $EXIT_SUCCESS } -{ test "$opt_mode" = link || test "$opt_mode" = relink; } && - func_mode_link ${1+"$@"} +if test link = "$opt_mode" || test relink = "$opt_mode"; then + func_mode_link ${1+"$@"} +fi # func_mode_uninstall arg... func_mode_uninstall () { - $opt_debug - RM="$nonopt" + $debug_cmd + + RM=$nonopt files= - rmforce= + rmforce=false exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. - libtool_install_magic="$magic" + libtool_install_magic=$magic for arg do case $arg in - -f) func_append RM " $arg"; rmforce=yes ;; + -f) func_append RM " $arg"; rmforce=: ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac @@ -9481,18 +10977,18 @@ func_mode_uninstall () for file in $files; do func_dirname "$file" "" "." - dir="$func_dirname_result" - if test "X$dir" = X.; then - odir="$objdir" + dir=$func_dirname_result + if test . = "$dir"; then + odir=$objdir else - odir="$dir/$objdir" + odir=$dir/$objdir fi func_basename "$file" - name="$func_basename_result" - test "$opt_mode" = uninstall && odir="$dir" + name=$func_basename_result + test uninstall = "$opt_mode" && odir=$dir # Remember odir for removal later, being careful to avoid duplicates - if test "$opt_mode" = clean; then + if test clean = "$opt_mode"; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; @@ -9507,11 +11003,11 @@ func_mode_uninstall () elif test -d "$file"; then exit_status=1 continue - elif test "$rmforce" = yes; then + elif $rmforce; then continue fi - rmfiles="$file" + rmfiles=$file case $name in *.la) @@ -9525,7 +11021,7 @@ func_mode_uninstall () done test -n "$old_library" && func_append rmfiles " $odir/$old_library" - case "$opt_mode" in + case $opt_mode in clean) case " $library_names " in *" $dlname "*) ;; @@ -9536,12 +11032,12 @@ func_mode_uninstall () uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. - func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. - func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; @@ -9557,21 +11053,19 @@ func_mode_uninstall () func_source $dir/$name # Add PIC object to the list of files to remove. - if test -n "$pic_object" && - test "$pic_object" != none; then + if test -n "$pic_object" && test none != "$pic_object"; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. - if test -n "$non_pic_object" && - test "$non_pic_object" != none; then + if test -n "$non_pic_object" && test none != "$non_pic_object"; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) - if test "$opt_mode" = clean ; then + if test clean = "$opt_mode"; then noexename=$name case $file in *.exe) @@ -9598,12 +11092,12 @@ func_mode_uninstall () # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles - func_append rmfiles " $odir/$name $odir/${name}S.${objext}" - if test "$fast_install" = yes && test -n "$relink_command"; then + func_append rmfiles " $odir/$name $odir/${name}S.$objext" + if test yes = "$fast_install" && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi - if test "X$noexename" != "X$name" ; then - func_append rmfiles " $odir/lt-${noexename}.c" + if test "X$noexename" != "X$name"; then + func_append rmfiles " $odir/lt-$noexename.c" fi fi fi @@ -9612,7 +11106,7 @@ func_mode_uninstall () func_show_eval "$RM $rmfiles" 'exit_status=1' done - # Try to remove the ${objdir}s in the directories where we deleted files + # Try to remove the $objdir's in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" @@ -9622,16 +11116,17 @@ func_mode_uninstall () exit $exit_status } -{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && - func_mode_uninstall ${1+"$@"} +if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then + func_mode_uninstall ${1+"$@"} +fi test -z "$opt_mode" && { - help="$generic_help" + help=$generic_help func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ - func_fatal_help "invalid operation mode \`$opt_mode'" + func_fatal_help "invalid operation mode '$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" @@ -9642,7 +11137,7 @@ exit $exit_status # The TAGs below are defined such that we never get into a situation -# in which we disable both kinds of libraries. Given conflicting +# where we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support @@ -9665,5 +11160,3 @@ build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # mode:shell-script # sh-indentation:2 # End: -# vi:sw=2 - diff --git a/m4/libtool.m4 b/m4/libtool.m4 index 44e0ecff11e..a3bc337b79a 100644 --- a/m4/libtool.m4 +++ b/m4/libtool.m4 @@ -1,8 +1,6 @@ # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. +# Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives @@ -10,36 +8,30 @@ # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of of the License, or +# (at your option) any later version. # -# This file is part of GNU Libtool. +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. # -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# along with this program. If not, see . ]) -# serial 57 LT_INIT +# serial 58 LT_INIT # LT_PREREQ(VERSION) @@ -67,7 +59,7 @@ esac # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], -[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +[AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl @@ -91,7 +83,7 @@ dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" +LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' @@ -111,26 +103,43 @@ dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) +# _LT_PREPARE_CC_BASENAME +# ----------------------- +m4_defun([_LT_PREPARE_CC_BASENAME], [ +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in @S|@*""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} +])# _LT_PREPARE_CC_BASENAME + + # _LT_CC_BASENAME(CC) # ------------------- -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +# It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, +# but that macro is also expanded into generated libtool script, which +# arranges for $SED and $ECHO to be set by different means. m4_defun([_LT_CC_BASENAME], -[for cc_temp in $1""; do - case $cc_temp in - compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; - distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +[m4_require([_LT_PREPARE_CC_BASENAME])dnl +AC_REQUIRE([_LT_DECL_SED])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl +func_cc_basename $1 +cc_basename=$func_cc_basename_result ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set -# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. +# sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} @@ -177,15 +186,16 @@ m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl +m4_require([_LT_CMD_TRUNCATE])dnl _LT_CONFIG_LIBTOOL_INIT([ -# See if we are running on zsh, and set the options which allow our +# See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then +if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi ]) -if test -n "${ZSH_VERSION+set}" ; then +if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi @@ -198,7 +208,7 @@ aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then + if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi @@ -209,14 +219,14 @@ esac ofile=libtool can_build_shared=yes -# All known linkers require a `.a' archive for static linking (except MSVC, +# All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a -with_gnu_ld="$lt_cv_prog_gnu_ld" +with_gnu_ld=$lt_cv_prog_gnu_ld -old_CC="$CC" -old_CFLAGS="$CFLAGS" +old_CC=$CC +old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc @@ -269,14 +279,14 @@ no_glob_subst='s/\*/\\\*/g' # _LT_PROG_LTMAIN # --------------- -# Note that this code is called both from `configure', and `config.status' +# Note that this code is called both from 'configure', and 'config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, -# `config.status' has no value for ac_aux_dir unless we are using Automake, +# 'config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) -ltmain="$ac_aux_dir/ltmain.sh" +ltmain=$ac_aux_dir/ltmain.sh ])# _LT_PROG_LTMAIN @@ -286,7 +296,7 @@ ltmain="$ac_aux_dir/ltmain.sh" # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS -# in macros and then make a single call at the end using the `libtool' +# in macros and then make a single call at the end using the 'libtool' # label. @@ -421,8 +431,8 @@ m4_define([_lt_decl_all_varnames], # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ -# Quote a variable value, and forward it to `config.status' so that its -# declaration there will have the same value as in `configure'. VARNAME +# Quote a variable value, and forward it to 'config.status' so that its +# declaration there will have the same value as in 'configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) @@ -446,7 +456,7 @@ m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl -available_tags="_LT_TAGS"dnl +available_tags='_LT_TAGS'dnl ]) @@ -474,7 +484,7 @@ m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables -# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' +# suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], @@ -500,8 +510,8 @@ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations -# into `config.status', and then the shell code to quote escape them in -# for loops in `config.status'. Finally, any additional code accumulated +# into 'config.status', and then the shell code to quote escape them in +# for loops in 'config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], @@ -547,7 +557,7 @@ for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" @@ -560,7 +570,7 @@ for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" @@ -576,7 +586,7 @@ _LT_OUTPUT_LIBTOOL_INIT # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the -# `#!' sequence but before initialization text begins. After this +# '#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). @@ -598,7 +608,7 @@ AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF -test $lt_write_fail = 0 && chmod +x $1[]dnl +test 0 = "$lt_write_fail" && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT @@ -621,7 +631,7 @@ exec AS_MESSAGE_LOG_FD>>config.log } >&AS_MESSAGE_LOG_FD lt_cl_help="\ -\`$as_me' creates a local libtool stub from the current configuration, +'$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. @@ -643,7 +653,7 @@ Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." -while test $[#] != 0 +while test 0 != $[#] do case $[1] in --version | --v* | -V ) @@ -656,10 +666,10 @@ do lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] -Try \`$[0] --help' for more information.]) ;; +Try '$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] -Try \`$[0] --help' for more information.]) ;; +Try '$[0] --help' for more information.]) ;; esac shift done @@ -685,7 +695,7 @@ chmod +x "$CONFIG_LT" # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: -test "$silent" = yes && +test yes = "$silent" && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false @@ -705,32 +715,47 @@ m4_defun([_LT_CONFIG], _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ - # See if we are running on zsh, and set the options which allow our + # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then + if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi - cfgfile="${ofile}T" + cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Generated automatically by $as_me ($PACKAGE) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. -# + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + _LT_COPYING _LT_LIBTOOL_TAGS +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +_LT_PREPARE_MUNGE_PATH_LIST +_LT_PREPARE_CC_BASENAME + +# ### END FUNCTIONS SHARED WITH CONFIGURE + _LT_EOF case $host_os in @@ -739,7 +764,7 @@ _LT_EOF # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then +if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi @@ -756,8 +781,6 @@ _LT_EOF sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) - _LT_PROG_REPLACE_SHELLFNS - mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" @@ -775,7 +798,6 @@ _LT_EOF [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS @@ -974,7 +996,7 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then + if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the @@ -992,7 +1014,7 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. - elif test -f libconftest.dylib && test $_lt_result -eq 0; then + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD @@ -1010,7 +1032,7 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) - LDFLAGS="$save_LDFLAGS" + LDFLAGS=$save_LDFLAGS ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], @@ -1032,7 +1054,7 @@ _LT_EOF _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD - elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD @@ -1042,32 +1064,32 @@ _LT_EOF ]) case $host_os in rhapsody* | darwin1.[[012]]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[[012]]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + 10.[[012]][[,.]]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then + if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi - if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= @@ -1087,29 +1109,29 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES], _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - if test "$lt_cv_ld_force_load" = "yes"; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + if test yes = "$lt_cv_ld_force_load"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" + _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; + ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac - if test "$_lt_dar_can_shared" = "yes"; then + if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all - _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" m4_if([$1], [CXX], -[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then - _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" +[ if test yes != "$lt_cv_apple_cc_single_mod"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi ],[]) else @@ -1129,7 +1151,7 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES], # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl -if test "${lt_cv_aix_libpath+set}" = set; then +if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], @@ -1147,7 +1169,7 @@ else _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) @@ -1167,8 +1189,8 @@ m4_define([_LT_SHELL_INIT], # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start -# of the generated configure script which will find a shell with a builtin -# printf (which we can use as an echo command). +# of the generated configure script that will find a shell with a builtin +# printf (that we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO @@ -1196,10 +1218,10 @@ fi # Invoke $ECHO with all args, space-separated. func_echo_all () { - $ECHO "$*" + $ECHO "$*" } -case "$ECHO" in +case $ECHO in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; @@ -1225,16 +1247,17 @@ _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], -[ --with-sysroot[=DIR] Search for dependent libraries within DIR - (or the compiler's sysroot if not specified).], +[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], + [Search for dependent libraries within DIR (or the compiler's sysroot + if not specified).])], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= -case ${with_sysroot} in #( +case $with_sysroot in #( yes) - if test "$GCC" = yes; then + if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( @@ -1244,14 +1267,14 @@ case ${with_sysroot} in #( no|'') ;; #( *) - AC_MSG_RESULT([${with_sysroot}]) + AC_MSG_RESULT([$with_sysroot]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl -[dependent libraries, and in which our libraries should be installed.])]) +[dependent libraries, and where our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- @@ -1259,31 +1282,33 @@ m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes +test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) - # Find out which ABI we are using. + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) - HPUX_IA64_MODE="32" + HPUX_IA64_MODE=32 ;; *ELF-64*) - HPUX_IA64_MODE="64" + HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) - # Find out which ABI we are using. + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then - if test "$lt_cv_prog_gnu_ld" = yes; then + if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" @@ -1312,9 +1337,46 @@ ia64-*-hpux*) rm -rf conftest* ;; -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + emul=elf + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # not appear in the list. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in @@ -1324,9 +1386,19 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) - LD="${LD-ld} -m elf_i386" + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac ;; - ppc64-*linux*|powerpc64-*linux*) + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) @@ -1345,7 +1417,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; - ppc*-*linux*|powerpc*-*linux*) + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) @@ -1363,19 +1438,20 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" + SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) - if test x"$lt_cv_cc_needs_belf" != x"yes"; then + if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" + CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) - # Find out which ABI we are using. + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in @@ -1383,7 +1459,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) case $lt_cv_prog_gnu_ld in yes*) case $host in - i?86-*-solaris*) + i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) @@ -1392,7 +1468,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then - LD="${LD-ld}_sol2" + LD=${LD-ld}_sol2 fi ;; *) @@ -1408,7 +1484,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) ;; esac -need_locks="$enable_libtool_lock" +need_locks=$enable_libtool_lock ])# _LT_ENABLE_LOCK @@ -1427,11 +1503,11 @@ AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) - if test "$ac_status" -eq 0; then + if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) - if test "$ac_status" -ne 0; then + if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi @@ -1439,7 +1515,7 @@ AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], ]) ]) -if test "x$lt_cv_ar_at_file" = xno; then +if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file @@ -1470,7 +1546,7 @@ old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in - openbsd*) + bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) @@ -1506,7 +1582,7 @@ AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$3" + lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins @@ -1533,7 +1609,7 @@ AC_CACHE_CHECK([$1], [$2], $RM conftest* ]) -if test x"[$]$2" = xyes; then +if test yes = "[$]$2"; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) @@ -1555,7 +1631,7 @@ AC_DEFUN([_LT_LINKER_OPTION], m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no - save_LDFLAGS="$LDFLAGS" + save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then @@ -1574,10 +1650,10 @@ AC_CACHE_CHECK([$1], [$2], fi fi $RM -r conftest* - LDFLAGS="$save_LDFLAGS" + LDFLAGS=$save_LDFLAGS ]) -if test x"[$]$2" = xyes; then +if test yes = "[$]$2"; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) @@ -1598,7 +1674,7 @@ AC_DEFUN([LT_CMD_MAX_LEN], AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 - teststring="ABCD" + teststring=ABCD case $build_os in msdosdjgpp*) @@ -1638,7 +1714,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl lt_cv_sys_max_cmd_len=8192; ;; - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` @@ -1688,22 +1764,23 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do + for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. - while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough + test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring @@ -1719,7 +1796,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl ;; esac ]) -if test -n $lt_cv_sys_max_cmd_len ; then +if test -n "$lt_cv_sys_max_cmd_len"; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) @@ -1747,7 +1824,7 @@ m4_defun([_LT_HEADER_DLFCN], # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl -if test "$cross_compiling" = yes; then : +if test yes = "$cross_compiling"; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 @@ -1794,9 +1871,9 @@ else # endif #endif -/* When -fvisbility=hidden is used, assume the code has been annotated +/* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif @@ -1822,7 +1899,7 @@ int main () return status; }] _LT_EOF - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in @@ -1843,7 +1920,7 @@ rm -fr conftest* # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl -if test "x$enable_dlopen" != xyes; then +if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown @@ -1853,44 +1930,52 @@ else case $host_os in beos*) - lt_cv_dlopen="load_add_on" + lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) - lt_cv_dlopen="dlopen" + lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) - # if libdl is installed we need to link against it + # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ - lt_cv_dlopen="dyld" + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ + lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + *) AC_CHECK_FUNC([shl_load], - [lt_cv_dlopen="shl_load"], + [lt_cv_dlopen=shl_load], [AC_CHECK_LIB([dld], [shl_load], - [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], [AC_CHECK_FUNC([dlopen], - [lt_cv_dlopen="dlopen"], + [lt_cv_dlopen=dlopen], [AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], [AC_CHECK_LIB([svld], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], [AC_CHECK_LIB([dld], [dld_link], - [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) + [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) ]) ]) ]) @@ -1899,21 +1984,21 @@ else ;; esac - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else + if test no = "$lt_cv_dlopen"; then enable_dlopen=no + else + enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - save_LDFLAGS="$LDFLAGS" + save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - save_LIBS="$LIBS" + save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], @@ -1923,7 +2008,7 @@ else lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) - if test "x$lt_cv_dlopen_self" = xyes; then + if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl @@ -1933,9 +2018,9 @@ else ]) fi - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS ;; esac @@ -2027,8 +2112,8 @@ m4_defun([_LT_COMPILER_FILE_LOCKS], m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) -hard_links="nottested" -if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then +hard_links=nottested +if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes @@ -2038,8 +2123,8 @@ if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) - if test "$hard_links" = no; then - AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + if test no = "$hard_links"; then + AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) need_locks=warn fi else @@ -2066,8 +2151,8 @@ objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl -AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", - [Define to the sub-directory in which libtool stores uninstalled libraries.]) +AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", + [Define to the sub-directory where libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR @@ -2079,15 +2164,15 @@ m4_defun([_LT_LINKER_HARDCODE_LIBPATH], _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || - test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then # We can hardcode non-existent directories. - if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && + if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && - test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && + test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else @@ -2101,12 +2186,12 @@ else fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) -if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || - test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then +if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || + test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then # Fast installation is not supported enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi @@ -2130,7 +2215,7 @@ else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) - if test -n "$STRIP" ; then + if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) @@ -2148,6 +2233,47 @@ _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB +# _LT_PREPARE_MUNGE_PATH_LIST +# --------------------------- +# Make sure func_munge_path_list() is defined correctly. +m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], +[[# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x@S|@2 in + x) + ;; + *:) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" + ;; + x:*) + eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" + ;; + *) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + esac +} +]])# _LT_PREPARE_PATH_LIST + + # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics @@ -2158,17 +2284,18 @@ m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ -if test "$GCC" = yes; then +if test yes = "$GCC"; then case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in - mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; - *) lt_sed_strip_eq="s,=/,/,g" ;; + mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in @@ -2184,28 +2311,35 @@ if test "$GCC" = yes; then ;; esac # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. + # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; + lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } @@ -2219,7 +2353,7 @@ BEGIN {RS=" "; FS="/|\n";} { # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ - $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; + $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else @@ -2228,7 +2362,7 @@ fi]) library_names_spec= libname_spec='lib$name' soname_spec= -shrext_cmds=".so" +shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= @@ -2245,14 +2379,17 @@ hardcode_into_libs=no # flags to be left without arguments need_version=unknown +AC_ARG_VAR([LT_SYS_LIBRARY_PATH], +[User-defined run-time library search path.]) + case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' + soname_spec='$libname$release$shared_ext$major' ;; aix[[4-9]]*) @@ -2260,41 +2397,91 @@ aix[[4-9]]*) need_lib_prefix=no need_version=no hardcode_into_libs=yes - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a[(]lib.so.V[)]' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac shlibpath_var=LIBPATH fi ;; @@ -2304,18 +2491,18 @@ amigaos*) powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) - library_names_spec='${libname}${shared_ext}' + library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; @@ -2323,8 +2510,8 @@ beos*) bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" @@ -2336,7 +2523,7 @@ bsdi[[45]]*) cygwin* | mingw* | pw32* | cegcc*) version_type=windows - shrext_cmds=".dll" + shrext_cmds=.dll need_version=no need_lib_prefix=no @@ -2345,8 +2532,8 @@ cygwin* | mingw* | pw32* | cegcc*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ @@ -2362,17 +2549,17 @@ cygwin* | mingw* | pw32* | cegcc*) case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' @@ -2381,8 +2568,8 @@ m4_if([$1], [],[ *,cl*) # Native MSVC libname_spec='$name' - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - library_names_spec='${libname}.dll.lib' + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' case $build_os in mingw*) @@ -2409,7 +2596,7 @@ m4_if([$1], [],[ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) - sys_lib_search_path_spec="$LIB" + sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` @@ -2422,8 +2609,8 @@ m4_if([$1], [],[ esac # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' @@ -2436,7 +2623,7 @@ m4_if([$1], [],[ *) # Assume MSVC wrapper - library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac @@ -2449,8 +2636,8 @@ darwin* | rhapsody*) version_type=darwin need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' @@ -2463,8 +2650,8 @@ dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; @@ -2482,12 +2669,13 @@ freebsd* | dragonfly*) version_type=freebsd-$objformat case $version_type in freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac @@ -2512,26 +2700,15 @@ freebsd* | dragonfly*) esac ;; -gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=yes + shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; @@ -2549,14 +2726,15 @@ hpux9* | hpux10* | hpux11*) dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' @@ -2564,8 +2742,8 @@ hpux9* | hpux10* | hpux11*) dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; @@ -2574,8 +2752,8 @@ hpux9* | hpux10* | hpux11*) dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... @@ -2588,8 +2766,8 @@ interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no @@ -2600,7 +2778,7 @@ irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) - if test "$lt_cv_prog_gnu_ld" = yes; then + if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix @@ -2608,8 +2786,8 @@ irix5* | irix6* | nonstopux*) esac need_lib_prefix=no need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= @@ -2628,8 +2806,8 @@ irix5* | irix6* | nonstopux*) esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; @@ -2638,13 +2816,33 @@ linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + ;; + # This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no @@ -2669,7 +2867,12 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu) # before this can be enabled. hardcode_into_libs=yes - # Append ld.so.conf contents to the search path + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" @@ -2689,12 +2892,12 @@ netbsd*) need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH @@ -2704,7 +2907,7 @@ netbsd*) newsos6) version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; @@ -2713,58 +2916,68 @@ newsos6) version_type=qnx need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; -openbsd*) +openbsd* | bitrig*) version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" + sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[[89]] | openbsd2.[[89]].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi + shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' - shrext_cmds=".dll" + version_type=windows + shrext_cmds=.dll + need_version=no need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) @@ -2775,8 +2988,8 @@ solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes @@ -2786,11 +2999,11 @@ solaris*) sunos4*) version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then + if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes @@ -2798,8 +3011,8 @@ sunos4*) sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) @@ -2820,24 +3033,24 @@ sysv4 | sysv4.3*) ;; sysv4*MP*) - if test -d /usr/nec ;then + if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf + version_type=sco need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then + if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' @@ -2855,7 +3068,7 @@ tpf*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes @@ -2863,8 +3076,8 @@ tpf*) uts4*) version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; @@ -2873,20 +3086,30 @@ uts4*) ;; esac AC_MSG_RESULT([$dynamic_linker]) -test "$dynamic_linker" = no && can_build_shared=no +test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then +if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) @@ -2919,39 +3142,41 @@ _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) -_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], - [Run-time system search path for libraries]) +_LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], + [Detected run-time system search path for libraries]) +_LT_DECL([], [configure_time_lt_sys_library_path], [2], + [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- -# find a file program which can recognize shared library +# find a file program that can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$1; then - lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -f "$ac_dir/$1"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : @@ -2974,11 +3199,11 @@ _LT_EOF break fi done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac]) -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else @@ -2996,7 +3221,7 @@ dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- -# find a file program which can recognize a shared library +# find a file program that can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then @@ -3023,16 +3248,16 @@ m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], - [test "$withval" = no || with_gnu_ld=yes], + [test no = "$withval" || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld -if test "$GCC" = yes; then +if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw + # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; @@ -3046,7 +3271,7 @@ if test "$GCC" = yes; then while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done - test -z "$LD" && LD="$ac_prog" + test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. @@ -3057,37 +3282,37 @@ if test "$GCC" = yes; then with_gnu_ld=unknown ;; esac -elif test "$with_gnu_ld" = yes; then +elif test yes = "$with_gnu_ld"; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" + lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], +[if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi]) +rm -f conftest.i conftest2.i conftest.out]) +])# _LT_PATH_DD + + +# _LT_CMD_TRUNCATE +# ---------------- +# find command to truncate a binary pipe +m4_defun([_LT_CMD_TRUNCATE], +[m4_require([_LT_PATH_DD]) +AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], +[printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) +_LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], + [Command to truncate a binary pipe]) +])# _LT_CMD_TRUNCATE + + # _LT_CHECK_MAGIC_METHOD # ---------------------- # how to check for library dependencies @@ -3173,13 +3435,13 @@ lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. +# 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[[4-9]]*) @@ -3206,8 +3468,7 @@ mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. - # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. - if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then + if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else @@ -3243,10 +3504,6 @@ freebsd* | dragonfly*) fi ;; -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - haiku*) lt_cv_deplibs_check_method=pass_all ;; @@ -3285,7 +3542,7 @@ irix5* | irix6* | nonstopux*) ;; # This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; @@ -3307,8 +3564,8 @@ newos6*) lt_cv_deplibs_check_method=pass_all ;; -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' @@ -3361,6 +3618,9 @@ sysv4 | sysv4.3*) tpf*) lt_cv_deplibs_check_method=pass_all ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; esac ]) @@ -3401,33 +3661,38 @@ AC_DEFUN([LT_PATH_NM], AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. - lt_cv_path_NM="$NM" + lt_cv_path_NM=$NM else - lt_nm_to_check="${ac_tool_prefix}nm" + lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" - break + break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" - break + break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but @@ -3438,21 +3703,21 @@ else esac fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi]) -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) - case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) - DUMPBIN="$DUMPBIN -symbols" + DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: @@ -3460,8 +3725,8 @@ else esac fi AC_SUBST([DUMPBIN]) - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" + if test : != "$DUMPBIN"; then + NM=$DUMPBIN fi fi test -z "$NM" && NM=nm @@ -3507,8 +3772,8 @@ lt_cv_sharedlib_from_linklib_cmd, case $host_os in cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh - # decide which to use based on capabilities of $DLLTOOL + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib @@ -3520,7 +3785,7 @@ cygwin* | mingw* | pw32* | cegcc*) ;; *) # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd="$ECHO" + lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac ]) @@ -3547,13 +3812,28 @@ AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) -if test "x$lt_cv_path_mainfest_tool" != xyes; then +if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL +# _LT_DLL_DEF_P([FILE]) +# --------------------- +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with func_dll_def_p in the libtool script +AC_DEFUN([_LT_DLL_DEF_P], +[dnl + test DEF = "`$SED -n dnl + -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace + -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments + -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl + -e q dnl Only consider the first "real" line + $1`" dnl +])# _LT_DLL_DEF_P + + # LT_LIB_M # -------- # check for math library @@ -3565,11 +3845,11 @@ case $host in # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) - AC_CHECK_LIB(m, cos, LIBM="-lm") + AC_CHECK_LIB(m, cos, LIBM=-lm) ;; esac AC_SUBST([LIBM]) @@ -3588,7 +3868,7 @@ m4_defun([_LT_COMPILER_NO_RTTI], _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= -if test "$GCC" = yes; then +if test yes = "$GCC"; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; @@ -3640,7 +3920,7 @@ cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then symcode='[[ABCDEGRST]]' fi ;; @@ -3673,14 +3953,44 @@ case `$NM -V 2>&1` in symcode='[[ABCDGIRSTW]]' ;; esac +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Gets list of data symbols to import. + lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + # Adjust the below global symbol transforms to fixup imported variables. + lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" + lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +else + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= +fi + # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" +lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +$lt_cdecl_hook\ +" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +$lt_c_name_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" + +# Transform an extracted symbol line into symbol name with lib prefix and +# symbol address. +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +$lt_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= @@ -3698,21 +4008,24 @@ for ac_symprfx in "" "_"; do # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. + # Fake it for dumpbin and say T for any non-static function, + # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" @@ -3752,11 +4065,11 @@ _LT_EOF if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST -#elif defined(__osf__) +#elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else @@ -3782,7 +4095,7 @@ lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; @@ -3802,9 +4115,9 @@ _LT_EOF mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS - LIBS="conftstm.$ac_objext" + LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS @@ -3825,7 +4138,7 @@ _LT_EOF rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then + if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= @@ -3852,12 +4165,16 @@ _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], + [Transform the output of nm into a list of symbols to manually relocate]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) +_LT_DECL([nm_interface], [lt_cv_nm_interface], [1], + [The name lister interface]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS @@ -3873,17 +4190,18 @@ _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then + if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) @@ -3894,8 +4212,8 @@ m4_if([$1], [CXX], [ ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac @@ -3911,6 +4229,11 @@ m4_if([$1], [CXX], [ # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac ;; darwin* | rhapsody*) # PIC is the default on this platform @@ -3960,7 +4283,7 @@ m4_if([$1], [CXX], [ case $host_os in aix[[4-9]]*) # All AIX code is PIC. - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else @@ -4001,14 +4324,14 @@ m4_if([$1], [CXX], [ case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + if test ia64 != "$host_cpu"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default @@ -4037,7 +4360,7 @@ m4_if([$1], [CXX], [ ;; esac ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler @@ -4045,7 +4368,7 @@ m4_if([$1], [CXX], [ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) - # old Intel C++ for x86_64 which still supported -KPIC. + # old Intel C++ for x86_64, which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' @@ -4190,17 +4513,18 @@ m4_if([$1], [CXX], [ fi ], [ - if test "$GCC" = yes; then + if test yes = "$GCC"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) @@ -4211,8 +4535,8 @@ m4_if([$1], [CXX], [ ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac @@ -4229,6 +4553,11 @@ m4_if([$1], [CXX], [ # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac ;; darwin* | rhapsody*) @@ -4299,7 +4628,7 @@ m4_if([$1], [CXX], [ case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else @@ -4307,11 +4636,30 @@ m4_if([$1], [CXX], [ fi ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac ;; hpux9* | hpux10* | hpux11*) @@ -4327,7 +4675,7 @@ m4_if([$1], [CXX], [ ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) @@ -4336,9 +4684,9 @@ m4_if([$1], [CXX], [ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. + # old Intel for x86_64, which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' @@ -4363,6 +4711,12 @@ m4_if([$1], [CXX], [ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) @@ -4460,7 +4814,7 @@ m4_if([$1], [CXX], [ ;; sysv4*MP*) - if test -d /usr/nec ;then + if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi @@ -4489,7 +4843,7 @@ m4_if([$1], [CXX], [ fi ]) case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: + # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; @@ -4555,17 +4909,21 @@ m4_if([$1], [CXX], [ case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global defined - # symbols, whereas GNU nm marks them as "W". + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi ;; pw32*) - _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds ;; cygwin* | mingw* | cegcc*) case $cc_basename in @@ -4611,9 +4969,9 @@ m4_if([$1], [CXX], [ # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if @@ -4629,7 +4987,7 @@ dnl Note also adjust exclude_expsyms for C++ above. # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. - if test "$GCC" != yes; then + if test yes != "$GCC"; then with_gnu_ld=no fi ;; @@ -4637,7 +4995,7 @@ dnl Note also adjust exclude_expsyms for C++ above. # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; - openbsd*) + openbsd* | bitrig*) with_gnu_ld=no ;; esac @@ -4647,7 +5005,7 @@ dnl Note also adjust exclude_expsyms for C++ above. # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no - if test "$with_gnu_ld" = yes; then + if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility @@ -4669,24 +5027,24 @@ dnl Note also adjust exclude_expsyms for C++ above. esac fi - if test "$lt_use_gnu_ld_interface" = yes; then + if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' + wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no - case `$LD -v 2>&1` in + case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... @@ -4699,7 +5057,7 @@ dnl Note also adjust exclude_expsyms for C++ above. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then + if test ia64 != "$host_cpu"; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 @@ -4718,7 +5076,7 @@ _LT_EOF case $host_cpu in powerpc) # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) @@ -4734,7 +5092,7 @@ _LT_EOF _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi @@ -4744,7 +5102,7 @@ _LT_EOF # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes @@ -4752,61 +5110,89 @@ _LT_EOF _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no - if test "$host_os" = linux-dietlibc; then + if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no + && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; @@ -4817,42 +5203,47 @@ _LT_EOF lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac - _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then + if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in + tcc*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' + ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then + if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac @@ -4866,8 +5257,8 @@ _LT_EOF _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; @@ -4885,8 +5276,8 @@ _LT_EOF _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi @@ -4898,7 +5289,7 @@ _LT_EOF _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify @@ -4913,9 +5304,9 @@ _LT_EOF # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi @@ -4932,15 +5323,15 @@ _LT_EOF *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac - if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then + if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= @@ -4956,7 +5347,7 @@ _LT_EOF # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported @@ -4964,34 +5355,57 @@ _LT_EOF ;; aix[[4-9]]*) - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' - no_entry_flag="" + no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global - # defined symbols, whereas GNU nm marks them as "W". + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi ;; esac @@ -5010,13 +5424,21 @@ _LT_EOF _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + _LT_TAGVAR(file_list_spec, $1)='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + ;; + esac - if test "$GCC" = yes; then + if test yes = "$GCC"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` + collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then @@ -5035,61 +5457,80 @@ _LT_EOF ;; esac shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' else # not using gcc - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' else - shared_flag='${wl}-bM:SRE' + shared_flag='$wl-bM:SRE' fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' fi fi - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + if test ia64 = "$host_cpu"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' + if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; @@ -5098,7 +5539,7 @@ _LT_EOF case $host_cpu in powerpc) # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) @@ -5128,16 +5569,17 @@ _LT_EOF # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" + shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes @@ -5146,18 +5588,18 @@ _LT_EOF # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' ;; *) # Assume MSVC wrapper @@ -5166,7 +5608,7 @@ _LT_EOF # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" + shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. @@ -5216,33 +5658,33 @@ _LT_EOF ;; hpux9*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; hpux10*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + if test yes,no = "$GCC,$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes @@ -5250,25 +5692,25 @@ _LT_EOF ;; hpux11*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then + if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ @@ -5276,14 +5718,14 @@ _LT_EOF # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], - [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], - [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in @@ -5294,7 +5736,7 @@ _LT_EOF *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. @@ -5305,16 +5747,16 @@ _LT_EOF ;; irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], - [save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + [save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], @@ -5327,21 +5769,31 @@ _LT_EOF end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) - LDFLAGS="$save_LDFLAGS"]) - if test "$lt_cv_irix_exported_symbol" = yes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + LDFLAGS=$save_LDFLAGS]) + if test yes = "$lt_cv_irix_exported_symbol"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; + linux*) + case $cc_basename in + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + _LT_TAGVAR(ld_shlibs, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out @@ -5356,7 +5808,7 @@ _LT_EOF newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; @@ -5364,27 +5816,19 @@ _LT_EOF *nto* | *qnx*) ;; - openbsd*) + openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' else - case $host_os in - openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - ;; - esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' fi else _LT_TAGVAR(ld_shlibs, $1)=no @@ -5395,33 +5839,53 @@ _LT_EOF _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; osf3*) - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + if test yes = "$GCC"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + if test yes = "$GCC"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' @@ -5432,24 +5896,24 @@ _LT_EOF solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + if test yes = "$GCC"; then + wlarc='$wl' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' - _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + wlarc='$wl' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi @@ -5459,11 +5923,11 @@ _LT_EOF solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', + # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + if test yes = "$GCC"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi @@ -5473,10 +5937,10 @@ _LT_EOF ;; sunos4*) - if test "x$host_vendor" = xsequent; then + if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi @@ -5525,43 +5989,43 @@ _LT_EOF ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not + # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; @@ -5576,17 +6040,17 @@ _LT_EOF ;; esac - if test x$host_vendor = xsni; then + if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) -test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no +test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld @@ -5603,7 +6067,7 @@ x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - if test "$enable_shared" = yes && test "$GCC" = yes; then + if test yes,yes = "$GCC,$enable_shared"; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. @@ -5683,12 +6147,12 @@ _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary and the resulting library dependency is - "absolute", i.e impossible to change by setting ${shlibpath_var} if the + "absolute", i.e impossible to change by setting $shlibpath_var if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR @@ -5729,10 +6193,10 @@ dnl [Compiler flag to generate thread safe objects]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. +# the compiler configuration to 'libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl -lt_save_CC="$CC" +lt_save_CC=$CC AC_LANG_PUSH(C) # Source file extension for C test sources. @@ -5772,18 +6236,18 @@ if test -n "$compiler"; then LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB - # Report which library types will actually be built + # Report what library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no + test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) - test "$enable_shared" = yes && enable_static=no + test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' @@ -5791,8 +6255,12 @@ if test -n "$compiler"; then ;; aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac fi ;; esac @@ -5800,13 +6268,13 @@ if test -n "$compiler"; then AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes + test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP -CC="$lt_save_CC" +CC=$lt_save_CC ])# _LT_LANG_C_CONFIG @@ -5814,14 +6282,14 @@ CC="$lt_save_CC" # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. +# the compiler configuration to 'libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then +if test -n "$CXX" && ( test no != "$CXX" && + ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || + (test g++ != "$CXX"))); then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes @@ -5863,7 +6331,7 @@ _LT_TAGVAR(objext, $1)=$objext # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_caught_CXX_error" != yes; then +if test yes != "$_lt_caught_CXX_error"; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" @@ -5905,35 +6373,35 @@ if test "$_lt_caught_CXX_error" != yes; then if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately - if test "$GXX" = yes; then + if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi - if test "$GXX" = yes; then + if test yes = "$GXX"; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + if test yes = "$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) - wlarc='${wl}' + wlarc='$wl' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi @@ -5969,18 +6437,30 @@ if test "$_lt_caught_CXX_error" != yes; then _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' - no_entry_flag="" + no_entry_flag= else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in @@ -5990,6 +6470,13 @@ if test "$_lt_caught_CXX_error" != yes; then ;; esac done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi ;; esac @@ -6008,13 +6495,21 @@ if test "$_lt_caught_CXX_error" != yes; then _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + _LT_TAGVAR(file_list_spec, $1)='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + ;; + esac - if test "$GXX" = yes; then + if test yes = "$GXX"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` + collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then @@ -6032,64 +6527,84 @@ if test "$_lt_caught_CXX_error" != yes; then fi esac shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' + if test yes = "$aix_use_runtimelinking"; then + shared_flag=$shared_flag' $wl-G' fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' else # not using gcc - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' else - shared_flag='${wl}-bM:SRE' + shared_flag='$wl-bM:SRE' fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' fi fi - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # The "-G" linker flag allows undefined symbols. + _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + if test ia64 = "$host_cpu"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' + if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared - # libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared + # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; @@ -6099,7 +6614,7 @@ if test "$_lt_caught_CXX_error" != yes; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi @@ -6127,57 +6642,58 @@ if test "$_lt_caught_CXX_error" != yes; then # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" + shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - func_to_tool_file "$lt_outputfile"~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi @@ -6188,6 +6704,34 @@ if test "$_lt_caught_CXX_error" != yes; then _LT_DARWIN_LINKER_FEATURES($1) ;; + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + dgux*) case $cc_basename in ec++*) @@ -6222,18 +6766,15 @@ if test "$_lt_caught_CXX_error" != yes; then _LT_TAGVAR(ld_shlibs, $1)=yes ;; - gnu*) - ;; - haiku*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default @@ -6245,7 +6786,7 @@ if test "$_lt_caught_CXX_error" != yes; then _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. @@ -6254,11 +6795,11 @@ if test "$_lt_caught_CXX_error" != yes; then # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) - if test "$GXX" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + if test yes = "$GXX"; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no @@ -6268,15 +6809,15 @@ if test "$_lt_caught_CXX_error" != yes; then ;; hpux10*|hpux11*) - if test $with_gnu_ld = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; esac fi @@ -6302,13 +6843,13 @@ if test "$_lt_caught_CXX_error" != yes; then aCC*) case $host_cpu in hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists @@ -6319,20 +6860,20 @@ if test "$_lt_caught_CXX_error" != yes; then # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then case $host_cpu in hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi @@ -6347,22 +6888,22 @@ if test "$_lt_caught_CXX_error" != yes; then interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is @@ -6371,22 +6912,22 @@ if test "$_lt_caught_CXX_error" != yes; then _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler @@ -6394,8 +6935,8 @@ if test "$_lt_caught_CXX_error" != yes; then # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. @@ -6404,10 +6945,10 @@ if test "$_lt_caught_CXX_error" != yes; then # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. @@ -6421,59 +6962,59 @@ if test "$_lt_caught_CXX_error" != yes; then # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac - _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ - compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ - $RANLIB $oldlib' + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ;; cxx*) # Compaq C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' @@ -6487,18 +7028,18 @@ if test "$_lt_caught_CXX_error" != yes; then # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) @@ -6506,10 +7047,10 @@ if test "$_lt_caught_CXX_error" != yes; then *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on @@ -6567,22 +7108,17 @@ if test "$_lt_caught_CXX_error" != yes; then _LT_TAGVAR(ld_shlibs, $1)=yes ;; - openbsd2*) - # C++ shared libraries are fairly broken - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - openbsd*) + openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else @@ -6598,9 +7134,9 @@ if test "$_lt_caught_CXX_error" != yes; then # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using @@ -6618,17 +7154,17 @@ if test "$_lt_caught_CXX_error" != yes; then cxx*) case $host in osf3*) - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ - $RM $lib.exp' + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ + $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac @@ -6643,21 +7179,21 @@ if test "$_lt_caught_CXX_error" != yes; then # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + if test yes,no = "$GXX,$with_gnu_ld"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' case $host in osf3*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; esac - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists @@ -6703,9 +7239,9 @@ if test "$_lt_caught_CXX_error" != yes; then # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no @@ -6713,7 +7249,7 @@ if test "$_lt_caught_CXX_error" != yes; then solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. + # but understands '-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; @@ -6730,30 +7266,30 @@ if test "$_lt_caught_CXX_error" != yes; then ;; gcx*) # Green Hills C++ Compiler - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if test yes,no = "$GXX,$with_gnu_ld"; then + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else - # g++ 2.7 appears to require `-G' NOT `-shared' on this + # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. - _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when @@ -6761,11 +7297,11 @@ if test "$_lt_caught_CXX_error" != yes; then output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' ;; esac fi @@ -6774,52 +7310,52 @@ if test "$_lt_caught_CXX_error" != yes; then ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not + # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ - '"$_LT_TAGVAR(old_archive_cmds, $1)" + '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ - '"$_LT_TAGVAR(reload_cmds, $1)" + '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; @@ -6850,10 +7386,10 @@ if test "$_lt_caught_CXX_error" != yes; then esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) - test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no - _LT_TAGVAR(GCC, $1)="$GXX" - _LT_TAGVAR(LD, $1)="$LD" + _LT_TAGVAR(GCC, $1)=$GXX + _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change @@ -6880,7 +7416,7 @@ if test "$_lt_caught_CXX_error" != yes; then lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test "$_lt_caught_CXX_error" != yes +fi # test yes != "$_lt_caught_CXX_error" AC_LANG_POP ])# _LT_LANG_CXX_CONFIG @@ -6902,13 +7438,14 @@ AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + case @S|@2 in + .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; + *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF + # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose @@ -6992,13 +7529,13 @@ if AC_TRY_EVAL(ac_compile); then pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do - case ${prev}${p} in + case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. - if test $p = "-L" || - test $p = "-R"; then + if test x-L = "$p" || + test x-R = "$p"; then prev=$p continue fi @@ -7014,16 +7551,16 @@ if AC_TRY_EVAL(ac_compile); then case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac - if test "$pre_test_object_deps_done" = no; then - case ${prev} in + if test no = "$pre_test_object_deps_done"; then + case $prev in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then - _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" + _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p else - _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" fi ;; # The "-l" case would never come before the object being @@ -7031,9 +7568,9 @@ if AC_TRY_EVAL(ac_compile); then esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then - _LT_TAGVAR(postdeps, $1)="${prev}${p}" + _LT_TAGVAR(postdeps, $1)=$prev$p else - _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" fi fi prev= @@ -7048,15 +7585,15 @@ if AC_TRY_EVAL(ac_compile); then continue fi - if test "$pre_test_object_deps_done" = no; then + if test no = "$pre_test_object_deps_done"; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then - _LT_TAGVAR(predep_objects, $1)="$p" + _LT_TAGVAR(predep_objects, $1)=$p else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then - _LT_TAGVAR(postdep_objects, $1)="$p" + _LT_TAGVAR(postdep_objects, $1)=$p else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi @@ -7087,51 +7624,6 @@ interix[[3-9]]*) _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC* | sunCC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; esac ]) @@ -7140,7 +7632,7 @@ case " $_LT_TAGVAR(postdeps, $1) " in esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then - _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) @@ -7160,10 +7652,10 @@ _LT_TAGDECL([], [compiler_lib_search_path], [1], # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. +# to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) -if test -z "$F77" || test "X$F77" = "Xno"; then +if test -z "$F77" || test no = "$F77"; then _lt_disable_F77=yes fi @@ -7200,7 +7692,7 @@ _LT_TAGVAR(objext, $1)=$objext # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_F77" != yes; then +if test yes != "$_lt_disable_F77"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t @@ -7222,7 +7714,7 @@ if test "$_lt_disable_F77" != yes; then _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. - lt_save_CC="$CC" + lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} @@ -7236,21 +7728,25 @@ if test "$_lt_disable_F77" != yes; then AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no + test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) - test "$enable_shared" = yes && enable_static=no + test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac fi ;; esac @@ -7258,11 +7754,11 @@ if test "$_lt_disable_F77" != yes; then AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes + test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) - _LT_TAGVAR(GCC, $1)="$G77" - _LT_TAGVAR(LD, $1)="$LD" + _LT_TAGVAR(GCC, $1)=$G77 + _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change @@ -7279,9 +7775,9 @@ if test "$_lt_disable_F77" != yes; then fi # test -n "$compiler" GCC=$lt_save_GCC - CC="$lt_save_CC" - CFLAGS="$lt_save_CFLAGS" -fi # test "$_lt_disable_F77" != yes + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test yes != "$_lt_disable_F77" AC_LANG_POP ])# _LT_LANG_F77_CONFIG @@ -7291,11 +7787,11 @@ AC_LANG_POP # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. +# to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) -if test -z "$FC" || test "X$FC" = "Xno"; then +if test -z "$FC" || test no = "$FC"; then _lt_disable_FC=yes fi @@ -7332,7 +7828,7 @@ _LT_TAGVAR(objext, $1)=$objext # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_FC" != yes; then +if test yes != "$_lt_disable_FC"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t @@ -7354,7 +7850,7 @@ if test "$_lt_disable_FC" != yes; then _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. - lt_save_CC="$CC" + lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} @@ -7370,21 +7866,25 @@ if test "$_lt_disable_FC" != yes; then AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no + test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) - test "$enable_shared" = yes && enable_static=no + test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac fi ;; esac @@ -7392,11 +7892,11 @@ if test "$_lt_disable_FC" != yes; then AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes + test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) - _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" - _LT_TAGVAR(LD, $1)="$LD" + _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu + _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change @@ -7416,7 +7916,7 @@ if test "$_lt_disable_FC" != yes; then GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS -fi # test "$_lt_disable_FC" != yes +fi # test yes != "$_lt_disable_FC" AC_LANG_POP ])# _LT_LANG_FC_CONFIG @@ -7426,7 +7926,7 @@ AC_LANG_POP # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. +# to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE @@ -7460,7 +7960,7 @@ CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)="$LD" +_LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. @@ -7497,7 +7997,7 @@ CFLAGS=$lt_save_CFLAGS # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. +# to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE @@ -7531,7 +8031,7 @@ CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)="$LD" +_LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. @@ -7568,7 +8068,7 @@ CFLAGS=$lt_save_CFLAGS # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. +# to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE @@ -7584,7 +8084,7 @@ _LT_TAGVAR(objext, $1)=$objext lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests -lt_simple_link_test_code="$lt_simple_compile_test_code" +lt_simple_link_test_code=$lt_simple_compile_test_code # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER @@ -7594,7 +8094,7 @@ _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. -lt_save_CC="$CC" +lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= @@ -7623,7 +8123,7 @@ AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) - test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) @@ -7734,7 +8234,7 @@ lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f $lt_ac_sed && continue + test ! -f "$lt_ac_sed" && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in @@ -7751,9 +8251,9 @@ for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break + test 10 -lt "$lt_ac_count" && break lt_ac_count=`expr $lt_ac_count + 1` - if test $lt_ac_count -gt $lt_ac_max; then + if test "$lt_ac_count" -gt "$lt_ac_max"; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi @@ -7777,27 +8277,7 @@ dnl AC_DEFUN([LT_AC_PROG_SED], []) # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], -[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,b/c, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -AC_MSG_RESULT([$xsi_shell]) -_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) - -AC_MSG_CHECKING([whether the shell understands "+="]) -lt_shell_append=no -( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -AC_MSG_RESULT([$lt_shell_append]) -_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then +[if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false @@ -7821,102 +8301,9 @@ _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES -# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) -# ------------------------------------------------------ -# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and -# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. -m4_defun([_LT_PROG_FUNCTION_REPLACE], -[dnl { -sed -e '/^$1 ()$/,/^} # $1 /c\ -$1 ()\ -{\ -m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) -} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: -]) - - -# _LT_PROG_REPLACE_SHELLFNS -# ------------------------- -# Replace existing portable implementations of several shell functions with -# equivalent extended shell implementations where those features are available.. -m4_defun([_LT_PROG_REPLACE_SHELLFNS], -[if test x"$xsi_shell" = xyes; then - _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac]) - - _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl - func_basename_result="${1##*/}"]) - - _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}"]) - - _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"}]) - - _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl - func_split_long_opt_name=${1%%=*} - func_split_long_opt_arg=${1#*=}]) - - _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl - func_split_short_opt_arg=${1#??} - func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) - - _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac]) - - _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) - - _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) - - _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) -fi - -if test x"$lt_shell_append" = xyes; then - _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) - - _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl - func_quote_for_eval "${2}" -dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ - eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) - - # Save a `func_append' function call where possible by direct use of '+=' - sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -else - # Save a `func_append' function call even when '+=' is not available - sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -fi - -if test x"$_lt_function_replace_fail" = x":"; then - AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) -fi -]) - # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- -# Determine which file name conversion functions should be used by +# Determine what file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4 index 5d9acd8e23b..94b08297666 100644 --- a/m4/ltoptions.m4 +++ b/m4/ltoptions.m4 @@ -1,14 +1,14 @@ # Helper functions for option handling. -*- Autoconf -*- # -# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, -# Inc. +# Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software +# Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. -# serial 7 ltoptions.m4 +# serial 8 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) @@ -29,7 +29,7 @@ m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), - [m4_warning([Unknown $1 option `$2'])])[]dnl + [m4_warning([Unknown $1 option '$2'])])[]dnl ]) @@ -75,13 +75,15 @@ m4_if([$1],[LT_INIT],[ dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither - dnl `shared' nor `disable-shared' was passed, we enable building of shared + dnl 'shared' nor 'disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], - [_LT_ENABLE_FAST_INSTALL]) + [_LT_ENABLE_FAST_INSTALL]) + _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], + [_LT_WITH_AIX_SONAME([aix])]) ]) ])# _LT_SET_OPTIONS @@ -112,7 +114,7 @@ AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `dlopen' option into LT_INIT's first parameter.]) +put the 'dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: @@ -148,7 +150,7 @@ AU_DEFUN([AC_LIBTOOL_WIN32_DLL], _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `win32-dll' option into LT_INIT's first parameter.]) +put the 'win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: @@ -157,9 +159,9 @@ dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- -# implement the --enable-shared flag, and supports the `shared' and -# `disable-shared' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +# implement the --enable-shared flag, and supports the 'shared' and +# 'disable-shared' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], @@ -172,14 +174,14 @@ AC_ARG_ENABLE([shared], *) enable_shared=no # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) @@ -211,9 +213,9 @@ dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- -# implement the --enable-static flag, and support the `static' and -# `disable-static' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +# implement the --enable-static flag, and support the 'static' and +# 'disable-static' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], @@ -226,14 +228,14 @@ AC_ARG_ENABLE([static], *) enable_static=no # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) @@ -265,9 +267,9 @@ dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- -# implement the --enable-fast-install flag, and support the `fast-install' -# and `disable-fast-install' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +# implement the --enable-fast-install flag, and support the 'fast-install' +# and 'disable-fast-install' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], @@ -280,14 +282,14 @@ AC_ARG_ENABLE([fast-install], *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) @@ -304,14 +306,14 @@ AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `fast-install' option into LT_INIT's first parameter.]) +the 'fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `disable-fast-install' option into LT_INIT's first parameter.]) +the 'disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: @@ -319,11 +321,64 @@ dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) +# _LT_WITH_AIX_SONAME([DEFAULT]) +# ---------------------------------- +# implement the --with-aix-soname flag, and support the `aix-soname=aix' +# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT +# is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. +m4_define([_LT_WITH_AIX_SONAME], +[m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl +shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[[5-9]]*,yes) + AC_MSG_CHECKING([which variant of shared library versioning to provide]) + AC_ARG_WITH([aix-soname], + [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], + [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], + [case $withval in + aix|svr4|both) + ;; + *) + AC_MSG_ERROR([Unknown argument to --with-aix-soname]) + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname], + [AC_CACHE_VAL([lt_cv_with_aix_soname], + [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) + with_aix_soname=$lt_cv_with_aix_soname]) + AC_MSG_RESULT([$with_aix_soname]) + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac + +_LT_DECL([], [shared_archive_member_spec], [0], + [Shared archive member basename, for filename based shared library versioning on AIX])dnl +])# _LT_WITH_AIX_SONAME + +LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) +LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) +LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) + + # _LT_WITH_PIC([MODE]) # -------------------- -# implement the --with-pic flag, and support the `pic-only' and `no-pic' +# implement the --with-pic flag, and support the 'pic-only' and 'no-pic' # LT_INIT options. -# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +# MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], @@ -334,19 +389,17 @@ m4_define([_LT_WITH_PIC], *) pic_mode=default # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs ;; esac], - [pic_mode=default]) - -test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) + [pic_mode=m4_default([$1], [default])]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC @@ -359,7 +412,7 @@ AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `pic-only' option into LT_INIT's first parameter.]) +put the 'pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4 index 9000a057d31..48bc9344a4d 100644 --- a/m4/ltsugar.m4 +++ b/m4/ltsugar.m4 @@ -1,6 +1,7 @@ # ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # -# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software +# Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives @@ -33,7 +34,7 @@ m4_define([_lt_join], # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support -# Autoconf-2.59 which quotes differently. +# Autoconf-2.59, which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], @@ -44,7 +45,7 @@ m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ -# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. +# Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different diff --git a/m4/ltversion.m4 b/m4/ltversion.m4 index 07a8602d48d..fa04b52a3bf 100644 --- a/m4/ltversion.m4 +++ b/m4/ltversion.m4 @@ -1,6 +1,6 @@ # ltversion.m4 -- version numbers -*- Autoconf -*- # -# Copyright (C) 2004 Free Software Foundation, Inc. +# Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives @@ -9,15 +9,15 @@ # @configure_input@ -# serial 3337 ltversion.m4 +# serial 4179 ltversion.m4 # This file is part of GNU Libtool -m4_define([LT_PACKAGE_VERSION], [2.4.2]) -m4_define([LT_PACKAGE_REVISION], [1.3337]) +m4_define([LT_PACKAGE_VERSION], [2.4.6]) +m4_define([LT_PACKAGE_REVISION], [2.4.6]) AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.4.2' -macro_revision='1.3337' +[macro_version='2.4.6' +macro_revision='2.4.6' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4 index c573da90c5c..c6b26f88f6c 100644 --- a/m4/lt~obsolete.m4 +++ b/m4/lt~obsolete.m4 @@ -1,6 +1,7 @@ # lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # -# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. +# Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software +# Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives @@ -11,7 +12,7 @@ # These exist entirely to fool aclocal when bootstrapping libtool. # -# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # @@ -25,7 +26,7 @@ # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. -# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until diff --git a/magic/Magdir/android b/magic/Magdir/android index a9cfb3575a1..1265d95925a 100644 --- a/magic/Magdir/android +++ b/magic/Magdir/android @@ -1,6 +1,6 @@ #------------------------------------------------------------ -# $File: android,v 1.12 2019/04/19 00:42:27 christos Exp $ +# $File: android,v 1.16 2019/11/15 21:03:14 christos Exp $ # Various android related magic entries #------------------------------------------------------------ @@ -18,8 +18,11 @@ # Android bootimg format # From https://android.googlesource.com/\ # platform/system/core/+/master/mkbootimg/bootimg.h +# https://github.com/djrbliss/loki/blob/master/loki.h#L43 0 string ANDROID! Android bootimg ->1024 string LOKI\01 \b, LOKI'd +>1024 string LOKI \b, LOKI'd +>>1028 lelong 0 \b (boot) +>>1028 lelong 1 \b (recovery) >8 lelong >0 \b, kernel >>12 lelong >0 \b (0x%x) >16 lelong >0 \b, ramdisk @@ -47,7 +50,7 @@ 0 string/b ANDROID\ BACKUP\n Android Backup # maybe look for some more characteristics like linefeed '\n' or version #>16 string \n -# No mime-type defined offically +# No mime-type defined officially !:mime application/x-google-ab !:ext ab # on 2nd line version (often 1, 2 on kitkat 4.4.3+, 4 on 7.1.2) @@ -178,3 +181,10 @@ # RES_XML_TYPE = 0x0003 followed by the size of the header (ResXMLTree_header), # which is 8 bytes (2 bytes type + 2 bytes header size + 4 bytes size). 0 lelong 0x00080003 Android binary XML + +# Android cryptfs footer +# From https://android.googlesource.com/\ +# platform/system/vold/+/refs/heads/master/cryptfs.h +0 lelong 0xd0b5b1c4 Android cryptfs footer +>4 leshort x \b, version: %d +>6 leshort x \b.%d diff --git a/magic/Magdir/animation b/magic/Magdir/animation index aaf32dd4c43..62145b976ed 100644 --- a/magic/Magdir/animation +++ b/magic/Magdir/animation @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: animation,v 1.71 2019/04/19 00:42:27 christos Exp $ +# $File: animation,v 1.74 2019/10/29 01:06:20 christos Exp $ # animation: file(1) magic for animation/movie formats # # animation formats @@ -445,52 +445,43 @@ # modified by Joerg Jenderek # GRR the original test are too common for many DOS files # so don't accept as MP3 until we've tested the rate +# But also beat GEMDOS fonts 0 beshort&0xFFFE 0xFFFA # rates ->2 byte&0xF0 0x10 MPEG ADTS, layer III, v1, 32 kbps -!:mime audio/mpeg ->2 byte&0xF0 0x20 MPEG ADTS, layer III, v1, 40 kbps -!:mime audio/mpeg ->2 byte&0xF0 0x30 MPEG ADTS, layer III, v1, 48 kbps -!:mime audio/mpeg ->2 byte&0xF0 0x40 MPEG ADTS, layer III, v1, 56 kbps -!:mime audio/mpeg ->2 byte&0xF0 0x50 MPEG ADTS, layer III, v1, 64 kbps -!:mime audio/mpeg ->2 byte&0xF0 0x60 MPEG ADTS, layer III, v1, 80 kbps -!:mime audio/mpeg ->2 byte&0xF0 0x70 MPEG ADTS, layer III, v1, 96 kbps -!:mime audio/mpeg ->2 byte&0xF0 0x80 MPEG ADTS, layer III, v1, 112 kbps -!:mime audio/mpeg ->2 byte&0xF0 0x90 MPEG ADTS, layer III, v1, 128 kbps -!:mime audio/mpeg ->2 byte&0xF0 0xA0 MPEG ADTS, layer III, v1, 160 kbps -!:mime audio/mpeg ->2 byte&0xF0 0xB0 MPEG ADTS, layer III, v1, 192 kbps -!:mime audio/mpeg ->2 byte&0xF0 0xC0 MPEG ADTS, layer III, v1, 224 kbps -!:mime audio/mpeg ->2 byte&0xF0 0xD0 MPEG ADTS, layer III, v1, 256 kbps -!:mime audio/mpeg ->2 byte&0xF0 0xE0 MPEG ADTS, layer III, v1, 320 kbps +>2 byte&0xF0 !0 +>>2 byte&0xF0 !0xF0 MPEG ADTS, layer III, v1 +!:strength +20 !:mime audio/mpeg +>2 byte&0xF0 0x10 \b, 32 kbps +>2 byte&0xF0 0x20 \b, 40 kbps +>2 byte&0xF0 0x30 \b, 48 kbps +>2 byte&0xF0 0x40 \b, 56 kbps +>2 byte&0xF0 0x50 \b, 64 kbps +>2 byte&0xF0 0x60 \b, 80 kbps +>2 byte&0xF0 0x70 \b, 96 kbps +>2 byte&0xF0 0x80 \b, 112 kbps +>2 byte&0xF0 0x90 \b, 128 kbps +>2 byte&0xF0 0xA0 \b, 160 kbps +>2 byte&0xF0 0xB0 \b, 192 kbps +>2 byte&0xF0 0xC0 \b, 224 kbps +>2 byte&0xF0 0xD0 \b, 256 kbps +>2 byte&0xF0 0xE0 \b, 320 kbps # timing ->2 byte&0x0C 0x00 \b, 44.1 kHz ->2 byte&0x0C 0x04 \b, 48 kHz ->2 byte&0x0C 0x08 \b, 32 kHz +>2 byte&0x0C 0x00 \b, 44.1 kHz +>2 byte&0x0C 0x04 \b, 48 kHz +>2 byte&0x0C 0x08 \b, 32 kHz # channels/options ->3 byte&0xC0 0x00 \b, Stereo ->3 byte&0xC0 0x40 \b, JntStereo ->3 byte&0xC0 0x80 \b, 2x Monaural ->3 byte&0xC0 0xC0 \b, Monaural -#>1 byte ^0x01 \b, Data Verify -#>2 byte &0x02 \b, Packet Pad -#>2 byte &0x01 \b, Custom Flag -#>3 byte &0x08 \b, Copyrighted -#>3 byte &0x04 \b, Original Source -#>3 byte&0x03 1 \b, NR: 50/15 ms -#>3 byte&0x03 3 \b, NR: CCIT J.17 +>3 byte&0xC0 0x00 \b, Stereo +>3 byte&0xC0 0x40 \b, JntStereo +>3 byte&0xC0 0x80 \b, 2x Monaural +>3 byte&0xC0 0xC0 \b, Monaural +#>1 byte ^0x01 \b, Data Verify +#>2 byte &0x02 \b, Packet Pad +#>2 byte &0x01 \b, Custom Flag +#>3 byte &0x08 \b, Copyrighted +#>3 byte &0x04 \b, Original Source +#>3 byte&0x03 1 \b, NR: 50/15 ms +#>3 byte&0x03 3 \b, NR: CCIT J.17 # MP2, M1A 0 beshort&0xFFFE 0xFFFC MPEG ADTS, layer II, v1 @@ -887,6 +878,9 @@ # Vivo video (Wolfram Kleff) 3 string \x0D\x0AVersion:Vivo Vivo video data +# ABC (alembic.io 3d models) +0 string 0gawa ABC 3d model + # VRML (Virtual Reality Modelling Language) 0 string/w #VRML\ V1.0\ ascii VRML 1 file !:mime model/vrml @@ -970,8 +964,7 @@ # Extension: .bik # URL: https://wiki.multimedia.cx/index.php?title=Bink_Container # From: 2008-07-18 -0 string BIK Bink Video ->3 regex =[a-z] rev.%s +0 name bik #>4 ulelong x size %d >20 ulelong x \b, %d >24 ulelong x \bx%d @@ -988,6 +981,14 @@ #>>51 byte&0x10 0 FFT #>>51 byte&0x10 !0 DCT +0 string BIK +>3 regex =[bdfghi] Bink Video rev.%s +>>0 use bik + +0 string KB2 +>3 regex =[adfghi] Bink Video 2 rev.%s +>>0 use bik + # Type: NUT Container # URL: https://wiki.multimedia.cx/index.php?title=NUT # From: Adam Buchbinder diff --git a/magic/Magdir/apple b/magic/Magdir/apple index 4ac10fc5be9..e0617454cd9 100644 --- a/magic/Magdir/apple +++ b/magic/Magdir/apple @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: apple,v 1.43 2019/04/19 00:42:27 christos Exp $ +# $File: apple,v 1.44 2019/10/18 15:21:02 christos Exp $ # apple: file(1) magic for Apple file formats # 0 search/1/t FiLeStArTfIlEsTaRt binscii (apple ][) text @@ -75,33 +75,45 @@ >>>>0xb06 pstring x \b, Volume %s: >>>>0xb0e leshort x \b, %u Blocks >>>>0xb10 leshort x \b, %u Files +# +# Diversi Dos boot loader? +0 string \x01\xA8\xAD\x81\xC0\xEE\x09\x08\xAD +>0x11001 string \x11\x0F\x03 Apple Diversi Dos Image +>>0x11006 byte x \b, Volume %u +>>0x11034 byte x \b, %u Tracks +>>0x11035 byte x \b, %u Sectors +>>0x11036 leshort x \b, %u bytes per sector # Type: Apple Emulator 2IMG format # From: Radek Vokal # Update: Greg Wildman -0 string 2IMG Apple ][ 2IMG Disk Image ->4 clear x ->4 string XGS! \b, XGS ->4 string CTKG \b, Catakig ->4 string ShIm \b, Sheppy's ImageMaker ->4 string SHEP \b, Sheppy's ImageMaker ->4 string WOOF \b, Sweet 16 ->4 string B2TR \b, Bernie ][ the Rescue ->4 string \!nfc \b, ASIMOV2 ->4 string \>BD\< \b, Brutal Deluxe's Cadius ->4 string CdrP \b, CiderPress ->4 string Vi][ \b, Virtual ][ ->4 string PRFS \b, ProFUSE ->4 string FISH \b, FishWings ->4 string RVLW \b, Revival for Windows ->4 default x ->>4 string x \b, Creator tag "%-4.4s" ->0xc byte 00 \b, DOS 3.3 sector order ->>0x10 byte 00 \b, Volume 254 ->>0x10 byte&0x7f x \b, Volume %u ->0xc byte 01 \b, ProDOS sector order ->>0x14 short x \b, %u Blocks ->0xc byte 02 \b, NIB data +0 string 2IMG Apple ][ 2IMG Disk Image +>4 clear x +>4 string XGS! \b, XGS +>4 string CTKG \b, Catakig +>4 string ShIm \b, Sheppy's ImageMaker +>4 string SHEP \b, Sheppy's ImageMaker +>4 string WOOF \b, Sweet 16 +>4 string B2TR \b, Bernie ][ the Rescue +>4 string \!nfc \b, ASIMOV2 +>4 string \>BD\< \b, Brutal Deluxe's Cadius +>4 string CdrP \b, CiderPress +>4 string Vi][ \b, Virtual ][ +>4 string PRFS \b, ProFUSE +>4 string FISH \b, FishWings +>4 string RVLW \b, Revival for Windows +>4 default x +>>4 string x \b, Creator tag "%-4.4s" +>0xc byte 00 \b, DOS 3.3 sector order +>>0x10 byte 00 \b, Volume 254 +>>0x10 byte&0x7f x \b, Volume %u +>0xc byte 01 \b, ProDOS sector order +# Detect Volume Directory block ($02) + 2mg header offset +>>0x440 string \x00\x00\x03\x00 +>>>0x444 byte &0xF0 +>>>>0x445 string x \b, Volume /%s +>>>>0x469 leshort x \b, %u Blocks +>0xc byte 02 \b, NIB data # magic for Newton PDA package formats # from Ruda Moura diff --git a/magic/Magdir/archive b/magic/Magdir/archive index cd0213fa9f3..6ec5b6d3c38 100644 --- a/magic/Magdir/archive +++ b/magic/Magdir/archive @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------ -# $File: archive,v 1.129 2019/05/09 18:58:02 christos Exp $ +# $File: archive,v 1.133 2019/11/15 21:03:14 christos Exp $ # archive: file(1) magic for archive formats (see also "msdos" for self- # extracting compressed archives) # @@ -263,7 +263,7 @@ # NL terminated original package length >>>>>&1 string x \b, unsplitted size %s # NL terminated part length ->>>>>>&1 string x \b, part lenght %s +>>>>>>&1 string x \b, part length %s # NL terminated package part like n/m >>>>>>>&1 string x \b, part %s # NL terminated package architecture like armhf since dpkg 1.16.1 or later @@ -439,6 +439,34 @@ # skip keyword with low entropy >12 default x TTComp archive, binary, 4K dictionary # (version 5.25) labeled the above entry as "TTComp archive data" +# From: Joerg Jenderek +# URL: https://wiki.68kmla.org/DiskCopy_4.2_format_specification +# reference: http://nulib.com/library/FTN.e00005.htm +0x52 ubeshort 0x0100 +# test for disk size equal or above 400k +>0x40 ubelong >409599 Apple DiskCopy 4.2 image +#!:mime application/octet-stream +!:apple dCpydImg +!:ext image/dc42 +# image pascal name padded with NULs like Microsoft Mail +>>00 pstring/B x %s +# data size in bytes like 409600 +>>0x40 ubelong x \b, %u bytes +# tag size in bytes +>>0x44 ubelong >0 \b, 0x%x tag size +# data checksum +#>>0x48 ubelong x \b, 0x%x checksum +# tag checksum +#>>0x4c ubelong x \b, 0x%x tag checksum +# disk encoding +>>0x50 ubyte 0 \b, GCR CLV ssdd (400k) +>>0x50 ubyte 1 \b, GCR CLV dsdd (800k) +>>0x50 ubyte 2 \b, MFM CAV dsdd (720k) +>>0x50 ubyte 3 \b, MFM CAV dshd (1440k) +>>0x50 ubyte >3 \b, 0x%x encoding +# format byte +>>0x51 ubyte x \b, 0x%x format +#>>0x54 ubequad x \b, data 0x%16.16llx # ESP, could this conflict with Easy Software Products' (e.g.ESP ghostscript) documentation? 0 string ESP ESP archive data # ZPack @@ -1168,17 +1196,31 @@ >>50 string epub+zip EPUB document !:mime application/epub+zip +# From: Joerg Jenderek +# URL: http://en.wikipedia.org/wiki/CorelDRAW +# NOTE: version; til 2 WL-based; from 3 til 13 by ./riff; from 14 zip based +>>50 string x-vnd.corel. Corel +>>>62 string draw.document+zip Draw drawing, version 14-16 +!:mime application/x-vnd.corel.draw.document+zip +!:ext cdr +>>>62 string draw.template+zip Draw template, version 14-16 +!:mime application/x-vnd.corel.draw.template+zip +!:ext cdrt +>>>62 string zcf.draw.document+zip Draw drawing, version 17-21 +!:mime application/x-vnd.corel.zcf.draw.document+zip +!:ext cdr +>>>62 string zcf.draw.template+zip Draw template, version 17-21 +!:mime application/x-vnd.corel.zcf.draw.template+zip +!:ext cdt/cdrt + # Catch other ZIP-with-mimetype formats # In a ZIP file, the bytes immediately after a member's contents are # always "PK". The 2 regex rules here print the "mimetype" member's # contents up to the first 'P'. Luckily, most MIME types don't contain # any capital 'P's. This is a kludge. # (mimetype contains "application/") ->>50 string !epub+zip ->>>50 string !vnd.oasis.opendocument. ->>>>50 string !vnd.sun.xml. ->>>>>50 string !vnd.kde. ->>>>>>38 regex [!-OQ-~]+ Zip data (MIME type "%s"?) +>>50 default x Zip data +>>>38 regex [!-OQ-~]+ (MIME type "%s"?) !:mime application/zip # (mimetype contents other than "application/*") >26 string \x8\0\0\0mimetype @@ -1290,6 +1332,10 @@ # Durval Menezes, 0 string d13:announce-list BitTorrent file !:mime application/x-bittorrent +0 string d7:comment BitTorrent file +!:mime application/x-bittorrent +0 string d4:info BitTorrent file +!:mime application/x-bittorrent # Atari MSA archive - Teemu Hukkanen 0 beshort 0x0e0f Atari MSA archive data diff --git a/magic/Magdir/audio b/magic/Magdir/audio index 5492635dfc1..448f000a38b 100644 --- a/magic/Magdir/audio +++ b/magic/Magdir/audio @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: audio,v 1.111 2019/05/08 18:02:45 christos Exp $ +# $File: audio,v 1.118 2019/11/19 05:30:07 christos Exp $ # audio: file(1) magic for sound formats (see also "iff") # # Jan Nicolai Langfeldt (janl@ifi.uio.no), Dan Quinlan (quinlan@yggdrasil.com), @@ -139,6 +139,11 @@ 0x2c string SCRM ScreamTracker III Module sound data >0 string >\0 Title: "%s" +!:mime audio/x-s3m + +# .stm before it got above .s3m extension +0x16 string \!Scream\! ScreamTracker Module sound data +>0 string >\0 Title: "%s" # Gravis UltraSound patches # From @@ -553,6 +558,8 @@ >21 byte x \b.%u >20 byte x \b.%u +0 string CC2x CheeseCutter 2 song + 0 string RAWADATA RdosPlay RAW 1068 string RoR AMUSIC Adlib Tracker @@ -614,7 +621,13 @@ 1 string [licq] LICQ configuration file # Atari ST audio files by Dirk Jagdmann -0 string ICE! SNDH Atari ST music +# NOTE: Most SNDH music is packed using ICE, which has +# magic numbers "ICE!" and "Ice!". Some SNDH music is +# not packed, so we check for both packed and unpacked. +12 string SNDH SNDH Atari ST music +0 belong&0xFFDFDFFF 0x49434521 +>14 search/40 NDH SNDH Atari ST music +>14 search/40 TITL SNDH Atari ST music 0 string SC68\ Music-file\ /\ (c)\ (BeN)jami sc68 Atari ST music # musepak support From: "Jiri Pejchal" @@ -743,6 +756,8 @@ >>>>0x78 ubyte 0x03 AY-3-8930, >>>>0x78 ubyte 0x10 YM2149, >>>>0x78 ubyte 0x11 YM3439, +>>>>0x78 ubyte 0x12 YMZ284, +>>>>0x78 ubyte 0x13 YMZ294, # VGM 1.61 >>0x34 ulelong >0x4C >>>0x80 ulelong >0 DMG, @@ -993,17 +1008,27 @@ # Used for audio rips for various consoles. # http://fileformats.archiveteam.org/wiki/Portable_Sound_Format # Added by David Korth -0 string PSF Portable Sound Format +0 string PSF +>3 byte 0x01 +>3 byte 0x02 +>3 byte 0x11 +>3 byte 0x12 +>3 byte 0x13 +>3 byte 0x21 +>3 byte 0x22 +>3 byte 0x23 +>3 byte 0x41 +>>0 string PSF Portable Sound Format !:mime audio/x-psf ->3 byte 0x01 (Sony PlayStation) ->3 byte 0x02 (Sony PlayStation 2) ->3 byte 0x11 (Sega Saturn) ->3 byte 0x12 (Sega Dreamcast) ->3 byte 0x13 (Sega Mega Drive) ->3 byte 0x21 (Nintendo 64) ->3 byte 0x22 (Game Boy Advance) ->3 byte 0x23 (Super NES) ->3 byte 0x41 (Capcom QSound) +>>>3 byte 0x01 (Sony PlayStation) +>>>3 byte 0x02 (Sony PlayStation 2) +>>>3 byte 0x11 (Sega Saturn) +>>>3 byte 0x12 (Sega Dreamcast) +>>>3 byte 0x13 (Sega Mega Drive) +>>>3 byte 0x21 (Nintendo 64) +>>>3 byte 0x22 (Game Boy Advance) +>>>3 byte 0x23 (Super NES) +>>>3 byte 0x41 (Capcom QSound) # Atari 8-bit SAP audio format # http://asap.sourceforge.net/sap-format.html diff --git a/magic/Magdir/bsi b/magic/Magdir/bsi index 51a62891c2c..20a17d9c2d0 100644 --- a/magic/Magdir/bsi +++ b/magic/Magdir/bsi @@ -1,4 +1,4 @@ -# Chiasmus is a encryption standard developed by the German Federal +# Chiasmus is an encryption standard developed by the German Federal # Office for Information Security (Bundesamt fuer Sicherheit in der # Informationstechnik). diff --git a/magic/Magdir/c-lang b/magic/Magdir/c-lang index becf6b02ecc..9356e82ed9e 100644 --- a/magic/Magdir/c-lang +++ b/magic/Magdir/c-lang @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------ -# $File: c-lang,v 1.27 2019/02/27 16:46:23 christos Exp $ +# $File: c-lang,v 1.28 2019/11/15 21:03:14 christos Exp $ # c-lang: file(1) magic for C and related languages programs # # The strength is to beat standard HTML @@ -11,7 +11,7 @@ !:mime text/x-bcpl # C -# Check for class if include is found, otherwise class is beaten by include becouse of lowered strength +# Check for class if include is found, otherwise class is beaten by include because of lowered strength 0 search/8192 #include >0 regex \^#include C >>0 regex \^class[[:space:]]+ diff --git a/magic/Magdir/cad b/magic/Magdir/cad index 48a76d14c97..509cab31984 100644 --- a/magic/Magdir/cad +++ b/magic/Magdir/cad @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: cad,v 1.19 2019/04/19 00:42:27 christos Exp $ +# $File: cad,v 1.20 2019/08/10 13:34:17 christos Exp $ # autocad: file(1) magic for cad files # @@ -18,29 +18,162 @@ # 3F86C928&method=display&p_objectid=97F351F5-9C35-4E5E-89C280A93F86C928 # https://www.bentley.com/products/default.cfm?objectid=A5C2FD43-3AC9-4C71-B682 # 721C479F&method=display&p_objectid=A5C2FD43-3AC9-4C71-B682C7BE721C479F -0 string \010\011\376 Microstation ->3 string \002 ->>30 string \026\105 DGNFile ->>30 string \034\105 DGNFile ->>30 string \073\107 DGNFile ->>30 string \073\110 DGNFile ->>30 string \106\107 DGNFile ->>30 string \110\103 DGNFile ->>30 string \120\104 DGNFile ->>30 string \172\104 DGNFile ->>30 string \172\105 DGNFile ->>30 string \172\106 DGNFile ->>30 string \234\106 DGNFile ->>30 string \273\105 DGNFile ->>30 string \306\106 DGNFile ->>30 string \310\104 DGNFile ->>30 string \341\104 DGNFile ->>30 string \372\103 DGNFile ->>30 string \372\104 DGNFile ->>30 string \372\106 DGNFile ->>30 string \376\103 DGNFile ->4 string \030\000\000 CITFile ->4 string \030\000\003 CITFile +# +# URL: https://en.wikipedia.org/wiki/MicroStation +# reference: http://dgnlib.maptools.org/dgn.html +# http://dgnlib.maptools.org/dl/ref18.pdf +# Update: Joerg Jenderek +# Note: verfied by command like `dgndump seed2d_b.dgn` +# test for level 8 and type 5 or 9 +0 beshort&0x3F73 0x0801 +# level of element like 8 +#>0 ubyte&0x3F x \b, level %u +#>0 ubyte &0x80 \b, complex +#>0 ubyte &0x40 \b, reserved +# type of element 9~TCB 8~Digitizer setup 5~Group Data Elements +#>1 ubyte&0x7F x \b, type %u +# words to follow in element: 17H~CEL libray 2FEh~DGN 9FEh,DFEh~CIT +#>2 uleshort x \b, words 0x%4.4x to follow +# test for 3 reserved 0 bytes in CIT or "conversion" in ViewInfo structure (DGN CEL) +#>508 ubelong x \b, RESERVED %8.8x +>508 ubelong&0xFFffFF00 =0 +# test for level 8 and type 9 for INGR raster image +>>0 beshort 0x0809 +# test for length of 1st element is multiple of blocks a 512 bytes +>>>2 ubyte 0xfe +>>>>0 use ingr-image +# test for DGN or CEL by jump words (uleshort) forward to next element +>(2.s*2) ulong x +# 2nd element type: 8~Digitizer~DesiGNfile 1~library cell header other~CIT +#>>&1 ubyte&0x7F x \b, 2nd type %u +# DGN +>>&1 ubyte&0x7F 8 +>>>2 uleshort =0x02FE Bentley/Intergraph Microstation CAD drawing +!:mime application/x-bentley-dgn +!:ext dgn +# The 0x40 bit of this byte is 1 if the file is 3D, otherwise 0 +>>>>1214 ubyte &0x40 3D +>>>>1214 ubyte ^0x40 2D +# 2 chars for name of subunits like ft FT in IN mu m mm '\0 '\040 +>>>>1120 string x \b, units %-.2s +# 2 chars for name of master unit like IN in ML SU tn th TH HU mm "\0 "\040 \0\0 +>>>>1122 string >\0 %-.2s +#>>>>1120 ubelong x \b, units 0x%8.8x +# element range low,high x y z like xlow=0 08010000h 01080000h +#>>>>4 ubelong !0 \b, xlow %8.8x +#>>>>8 ubelong !0 \b, ylow %8.8x +#>>>>12 ubelong !0 \b, zlow %8.8x +#>>>>16 ubelong !0 \b, xhigh %8.8x +#>>>>20 ubelong !0 \b, yhigh %8.8x +#>>>>24 ubelong !0 \b, zhigh %8.8x +# graphic group number; all other elements in that group have same non-0 number +#>>>>28 leshort x \b, grphgrp 0x%4.4x +# words to optional attribute linkage +#>>>>30 ubyte x \b, attindx \%o +#>>>>31 ubyte x \b\%o +# >>30 string \026\105 DGNFile +# >>30 string \034\105 DGNFile +# >>30 string \073\107 DGNFile +# >>30 string \073\110 DGNFile +# >>30 string \106\107 DGNFile +# >>30 string \110\103 DGNFile +# >>30 string \120\104 DGNFile +# >>30 string \172\104 DGNFile +# >>30 string \172\105 DGNFile +# >>30 string \172\106 DGNFile +# >>30 string \234\106 DGNFile +# >>30 string \273\105 DGNFile +# >>30 string \306\106 DGNFile +# >>30 string \310\104 DGNFile +# >>30 string \341\104 DGNFile +# >>30 string \372\103 DGNFile +# >>30 string \372\104 DGNFile +# >>30 string \372\106 DGNFile +# >>30 string \376\103 DGNFile +# elements properties indicator +#>>>>32 uleshort !0 \b, properties 0x%4.4x +# class 0~Primary +#>>>>>32 uleshort&0x000F !0 \b, class 0x%4.4x +# Symbology +#>>>>>34 uleshort x \b, Symbology 0x%4.4x +# test for 2nd element type 1~library cell header +>>&1 ubyte&0x7F 1 +# test for 1st element with level 8 and type 5 for cell library +>>>0 beshort 0x0805 Bentley/Intergraph Microstation CAD cell library +!:mime application/x-bentley-cel +!:ext cel +# +# URL: http://fileformats.archiveteam.org/wiki/Intergraph_Raster +# reference: https://web.archive.org/web/20140903185431/ +# http://oreilly.com/www/centers/gff/formats/ingr/index.htm +# note: verfied by command like `nconvert -fullinfo LONGLAT.CIT` +# display information for intergraph raster bitmap +0 name ingr-image +# in 5.37 "Microstation CITFile" "Bentley/Intergraph MicroStation CIT raster CAD" +# DataTypeCode indicates format, depth of the pixel data and used compression +>4 uleshort x Intergraph raster image +>>4 uleshort 0x0009 \b, Run-Length Encoded 1-bit +!:mime image/x-intergraph-rle +!:ext rel +>>4 uleshort 0x0018 \b, CCITT Group 4 1-bit +!:mime image/x-intergraph-cit +!:ext cit +>>4 uleshort 27 \b, Adaptive RLE RGB +!:mime image/x-intergraph-rgb +!:ext rgb +>>4 default x +>>>4 uleshort x \b, Type %u +!:mime image/x-intergraph +# TODO: +#>4 uleshort 0 \b, no data +# ... +#>4 uleshort 0x0045 \b, Continuous Tone CMKY (Uncompressed) +# ApplicationType: 0~generic raster image 3~drawing, scanning +# 8~I/IMAGE and MicroStation Imager 9~ModelView +>6 uleshort !0 \b, ApplicationType %u +#>6 uleshort x \b, ApplicationType %u +# XViewOrigin; Raster grid data X origin +#>8 ulequad !0 \b, XViewOrigin %llx +# PixelsPerLine is the number of pixels in a scan line of bitmapp +>184 ulelong x \b, %u x +# NumberOfLines is height of the raster data in scanlines +>188 ulelong x %u +# DeviceResolution; resolution of scanning device +# positive indicates number of micros between lines; negative indicates DPI +#>192 leshort x \b, DeviceResolution %d +# ScanlineOrient indicates the origin and the orientation of the scan lines +#>194 ubyte x \b, ScanlineOrient %x +>194 ubyte x \b, orientation +>194 ubyte &0x01 right +>194 ubyte ^0x01 left +>194 ubyte &0x02 down +>194 ubyte ^0x02 top +>194 ubyte &0x04 horizontal +>194 ubyte ^0x04 vertical +# ScannableFlag; Scanline indexing method used +#>195 ubyte !0 \b, ScannableFlag 0x%x +# RotationAngle; Rotation angle of raster data +#>196 ubequad !0 \b, RotationAngle 0x%llx +# SkewAngle; Skew angle of raster data +#>204 ubequad !0 \b, SkewAngle %llx +# DataTypeModifier; Additional raster data format info +#>212 uleshort !0 \b, DataTypeModifier 0x%4.4x +# DesignFile[66]; Name of the design file +>214 string >\0 \b, DesignFile %-.66s +# DatabaseFile[66]; Name of the database file +>280 string >\0 \b, DatabaseFile %-.66s +# ParentGridFile[66]; Name of parent grid file +>346 string >\0 \b, ParentGridFile %-.66s +# FileDescription[80]; Text description of file and contents +>412 string >\0 \b, FileDescription %-.80s +# MinValue +#>492 ubequad !0 \b, MinValue 0x%llx +# MaxValue +#>500 ubequad !0 \b, MaxValue 0x%llx +# Reserved[3]; Unused (always 0) +#>508 ubelong&0xFFffFF00 x \b, RESERVED %8.8x +# GridFileVersion; Grid File Version like 2 3 +#>511 ubyte x \b, GridFileVersion %x # AutoCAD # Merge of the different contributions and updates from https://en.wikipedia.org/wiki/Dwg @@ -140,12 +273,6 @@ # Phillip Griffith # AutoCAD magic taken from the Open Design Alliance's OpenDWG specifications. # -0 belong 0x08051700 Bentley/Intergraph MicroStation DGN cell library -0 belong 0x0809fe02 Bentley/Intergraph MicroStation DGN vector CAD -0 belong 0xc809fe02 Bentley/Intergraph MicroStation DGN vector CAD -0 beshort 0x0809 Bentley/Intergraph MicroStation ->0x02 byte 0xfe ->>0x04 beshort 0x1800 CIT raster CAD # 3DS (3d Studio files) 0 leshort 0x4d4d diff --git a/magic/Magdir/commands b/magic/Magdir/commands index 1120c7d06f6..faa94ae9869 100644 --- a/magic/Magdir/commands +++ b/magic/Magdir/commands @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: commands,v 1.60 2019/04/19 00:42:27 christos Exp $ +# $File: commands,v 1.61 2019/10/30 03:16:43 christos Exp $ # commands: file(1) magic for various shells and interpreters # #0 string/w : shell archive or script for antique kernel text @@ -35,6 +35,9 @@ !:mime text/x-shellscript 0 string/wt #!\ /usr/local/bin/zsh Paul Falstad's zsh script text executable !:mime text/x-shellscript +0 search/1 #!/usr/bin/env\ zsh Paul Falstad's zsh script text executable +!:mime text/x-shellscript + 0 string/wt #!\ /usr/local/bin/ash Neil Brown's ash script text executable !:mime text/x-shellscript 0 string/wt #!\ /usr/local/bin/ae Neil Brown's ae script text executable diff --git a/magic/Magdir/compress b/magic/Magdir/compress index 7520eb4ab0f..c700b5a4580 100644 --- a/magic/Magdir/compress +++ b/magic/Magdir/compress @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------ -# $File: compress,v 1.75 2019/04/19 00:42:27 christos Exp $ +# $File: compress,v 1.77 2019/10/08 20:25:13 christos Exp $ # compress: file(1) magic for pure-compression formats (no archives) # # compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, etc. @@ -58,11 +58,11 @@ >>>13 string 09 \b, version 9 # other gzipped binary like gzipped tar, VirtualBox extension package,... >>10 default x gzip compressed data +!:mime application/gzip >>>0 use gzip-info # size of the original (uncompressed) input data modulo 2^32 >>>-4 ulelong x \b, original size modulo 2^32 %u # gzipped TAR or VirtualBox extension package -!:mime application/gzip #!:mime application/x-compressed-tar #!:mime application/x-virtualbox-vbox-extpack # https://www.w3.org/TR/SVG/mimereg.html @@ -308,25 +308,25 @@ # Zstandard compressed data # https://github.com/facebook/zstd/blob/dev/zstd_compression_format.md 0 lelong 0xFD2FB522 Zstandard compressed data (v0.2) -!:mime application/x-zstd +!:mime application/zstd 0 lelong 0xFD2FB523 Zstandard compressed data (v0.3) -!:mime application/x-zstd +!:mime application/zstd 0 lelong 0xFD2FB524 Zstandard compressed data (v0.4) -!:mime application/x-zstd +!:mime application/zstd 0 lelong 0xFD2FB525 Zstandard compressed data (v0.5) -!:mime application/x-zstd +!:mime application/zstd 0 lelong 0xFD2FB526 Zstandard compressed data (v0.6) -!:mime application/x-zstd +!:mime application/zstd 0 lelong 0xFD2FB527 Zstandard compressed data (v0.7) -!:mime application/x-zstd +!:mime application/zstd >4 use zstd-dictionary-id 0 lelong 0xFD2FB528 Zstandard compressed data (v0.8+) -!:mime application/x-zstd +!:mime application/zstd >4 use zstd-dictionary-id # https://github.com/facebook/zstd/blob/dev/zstd_compression_format.md 0 lelong 0xEC30A437 Zstandard dictionary -!:mime application/x-zstd-dictionary +!:mime application/x-std-dictionary >4 lelong x (ID %u) # AFX compressed files (Wolfram Kleff) diff --git a/magic/Magdir/console b/magic/Magdir/console index 5e5e5816ecc..28cc3681d5e 100644 --- a/magic/Magdir/console +++ b/magic/Magdir/console @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: console,v 1.45 2019/04/19 00:42:27 christos Exp $ +# $File: console,v 1.49 2019/05/27 01:33:32 christos Exp $ # Console game magic # Toby Deshane @@ -508,6 +508,8 @@ #------------------------------------------------------------------------------ # Microsoft Xbox executables .xbe (Esa Hyytia ) 0 string XBEH Microsoft Xbox executable +!:mime audio/x-xbox-executable +!:ext xbe # expect base address of 0x10000 >0x0104 ulelong =0x10000 >>(0x0118.l-0x0FFF4) lestring16 x \b: "%.40s" @@ -546,25 +548,90 @@ 0 name xbox-360-xex-execution-id >(0.L+0xC) byte x (%c >(0.L+0xD) byte x \b%c ->(0.L+0xE) beshort x \b-%04u) +>(0.L+0xE) beshort x \b-%04u, media ID: +>(0.L) belong x %08X) + +# Region code (part of Security Info) +0 name xbox-360-xex-region-code +>0 ubelong 0xFFFFFFFF \b, all regions +>0 ubelong !0xFFFFFFFF +>>0 ubelong >0 (regions: +>>0 ubelong&0x000000FF 0x000000FF USA +>>0 ubelong&0x00000100 0x00000100 Japan +>>0 ubelong&0x00000200 0x00000200 China +>>0 ubelong&0x0000FC00 0x0000FC00 Asia +>>0 ubelong&0x00FF0000 0x00FF0000 PAL +>>0 ubelong&0x00FF0000 0x00FE0000 PAL [except AU/NZ] +>>0 ubelong&0x00FF0000 0x00010000 AU/NZ +>>0 ubelong&0xFF000000 0xFF000000 Other +>>0 ubelong >0 \b) 0 string XEX2 Microsoft Xbox 360 executable +!:mime audio/x-xbox360-executable +!:ext xex >0x18 search/0x100 \x00\x04\x00\x06 >>&0 use xbox-360-xex-execution-id ->(0x010.L+0x178) ubelong 0xFFFFFFFF \b, all regions ->(0x010.L+0x178) ubelong !0xFFFFFFFF ->>(0x010.L+0x178) ubelong >0 (regions: ->>(0x010.L+0x178) ubelong&0x000000FF 0x000000FF USA ->>(0x010.L+0x178) ubelong&0x00000100 0x00000100 Japan ->>(0x010.L+0x178) ubelong&0x00000200 0x00000200 China ->>(0x010.L+0x178) ubelong&0x0000FC00 0x0000FC00 Asia ->>(0x010.L+0x178) ubelong&0x00FF0000 0x00FF0000 PAL ->>(0x010.L+0x178) ubelong&0x00FF0000 0x00FE0000 PAL [except AU/NZ] ->>(0x010.L+0x178) ubelong&0x00FF0000 0x00010000 AU/NZ ->>(0x010.L+0x178) ubelong&0xFF000000 0xFF000000 Other ->>(0x010.L+0x178) ubelong >0 \b) +>(0x010.L+0x178) use xbox-360-xex-region-code +0 string XEX1 Microsoft Xbox 360 executable (XEX1) +!:mime audio/x-xbox360-executable +!:ext xex +>0x18 search/0x100 \x00\x04\x00\x06 +>>&0 use xbox-360-xex-execution-id +>(0x010.L+0x154) use xbox-360-xex-region-code +#------------------------------------------------------------------------------ +# Microsoft Xbox 360 packages +# From: David Korth +# References: +# - https://free60project.github.io/wiki/STFS.html +# - https://github.com/xenia-project/xenia/blob/HEAD/src/xenia/kernel/util/xex2_info.h + +# TODO: More information for console-signed packages. + +0 name xbox-360-package +>0x360 byte x (%c +>0x361 byte x \b%c +>0x362 beshort x \b-%04u, media ID: +>0x354 belong x %08X) +>0x344 belong x \b, content type: +>>0x344 belong 0x1 Saved Game +>>0x344 belong 0x2 Marketplace Content +>>0x344 belong 0x3 Publisher +>>0x344 belong 0x1000 Xbox 360 Title +>>0x344 belong 0x2000 IPTV Pause Buffer +>>0x344 belong 0x4000 Installed Game +>>0x344 belong 0x5000 Original Xbox Game +>>0x344 belong 0x9000 Avatar Item +>>0x344 belong 0x10000 Profile +>>0x344 belong 0x20000 Gamer Picture +>>0x344 belong 0x30000 Theme +>>0x344 belong 0x40000 Cache File +>>0x344 belong 0x50000 Storage Download +>>0x344 belong 0x60000 Xbox Saved Game +>>0x344 belong 0x70000 Xbox Download +>>0x344 belong 0x80000 Game Demo +>>0x344 belong 0x90000 Video +>>0x344 belong 0xA0000 Game +>>0x344 belong 0xB0000 Installer +>>0x344 belong 0xC0000 Game Trailer +>>0x344 belong 0xD0000 Arcade Title +>>0x344 belong 0xE0000 XNA +>>0x344 belong 0xF0000 License Store +>>0x344 belong 0x100000 Movie +>>0x344 belong 0x200000 TV +>>0x344 belong 0x300000 Music Video +>>0x344 belong 0x400000 Game Video +>>0x344 belong 0x500000 Podcast Video +>>0x344 belong 0x600000 Viral Video +>>0x344 belong 0x2000000 Community Game + +0 string CON\x20 Microsoft Xbox 360 package (console-signed) +>0 use xbox-360-package +0 string PIRS Microsoft Xbox 360 package (non-Xbox Live) +>0 use xbox-360-package +0 string LIVE Microsoft Xbox 360 package (Xbox Live) +>0 use xbox-360-package # Atari Lynx cartridge dump (EXE/BLL header) # From: "Stefan A. Haubenthal" diff --git a/magic/Magdir/database b/magic/Magdir/database index 071a1156485..9578c0fc332 100644 --- a/magic/Magdir/database +++ b/magic/Magdir/database @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: database,v 1.55 2019/04/19 00:42:27 christos Exp $ +# $File: database,v 1.56 2019/06/14 20:12:00 christos Exp $ # database: file(1) magic for various databases # # extracted from header/code files by Graeme Wilford (eep2gw@ee.surrey.ac.uk) @@ -149,7 +149,6 @@ # updated by Joerg Jenderek at Feb 2013 # https://www.dbase.com/Knowledgebase/INT/db7_file_fmt.htm # https://www.clicketyclick.dk/databases/xbase/format/dbf.html -# http://home.f1.htw-berlin.de/scheibl/db/intern/dBase.htm # inspect VVYYMMDD , where 1<= MM <= 12 and 1<= DD <= 31 0 ubelong&0x0000FFFF <0x00000C20 # skip Infocom game Z-machine @@ -339,7 +338,7 @@ # next free block index is positive >>>0 ulelong >0 # skip many JPG. ZIP, BZ2 by test for reserved bytes NULL , 0|2 , 0|1 , low byte of block size ->>>>17 ubelong&0xFFfdFE00 0x00000000 +>>>>17 ubelong&0xFFfdFEff 0x00000000 # skip many RAR by test for low byte 0 ,high byte 0|2|even of block size, 0|a|e|d7 , 0|64h >>>>>20 ubelong&0xFF01209B 0x00000000 # dBASE III @@ -355,36 +354,34 @@ >>>>>>>>>6 ubeshort >0 # skip emacs.PIF >>>>>>>>>>4 ushort 0 ->>>>>>>>>>>0 use foxpro-memo-print +# check for valid FoxPro field type +>>>>>>>>>>>512 ubelong <3 +>>>>>>>>>>>>0 use foxpro-memo-print # dBASE III DBT , garbage ->>>>>>>>>6 ubeshort 0 -# skip MM*DD*.bin by test for for reserved NULL byte ->>>>>>>>>>510 ubeshort 0 -# skip TK-DOS11.img image by looking for memo text ->>>>>>>>>>>512 ubelong <0xfeffff03 -# skip EFI executables by looking for memo text ->>>>>>>>>>>>512 ubelong >0x1F202020 ->>>>>>>>>>>>>513 ubyte >0 +# skip WORD1XW.DOC with improbably high free block index +>>>>>>>>>0 lelong <2205083 # unusual dBASE III DBT like adressen.dbt ->>>>>>>>>>>>>>0 use dbase3-memo-print +>>>>>>>>>>0 use dbase3-memo-print # dBASE III DBT like angest.dbt, or garbage PCX DBF >>>>>>>>8 ubelong !0 # skip PCX and some DBF by test for for reserved NULL bytes >>>>>>>>>510 ubeshort 0 -# skip some DBF by test of invalid version ->>>>>>>>>>0 ubyte >5 ->>>>>>>>>>>0 ubyte <48 ->>>>>>>>>>>>0 use dbase3-memo-print +# skip AI070GEP.EPS with improbably high free block index +>>>>>>>>>>0 lelong <458766 +>>>>>>>>>>>0 use dbase3-memo-print # dBASE IV DBT with positive block size >>>>>>>20 uleshort >0 # dBASE IV DBT with valid block length like 512, 1024 # multiple of 2 in between 16 and 16 K ,implies upper and lower bits are zero ->>>>>>>>20 uleshort&0x800f 0 +# skip also 3600h 3E00h size +>>>>>>>>20 uleshort&0xE00f 0 >>>>>>>>>0 use dbase4-memo-print # Print the information of dBase III DBT memo file 0 name dbase3-memo-print >0 ubyte x dBase III DBT +!:mime application/x-dbt +!:ext dbt # instead 3 as version number 0 for unusual examples like biblio.dbt >16 ubyte !3 \b, version number %u # Number of next available block for appending data @@ -395,6 +392,7 @@ >20 uleshort !0 \b, block length %u # dBase III memo field terminated by \032\032 >512 string >\0 \b, 1st item "%s" +# https://www.clicketyclick.dk/databases/xbase/format/dbt.html # Print the information of dBase IV DBT memo file 0 name dbase4-memo-print >0 lelong x dBase IV DBT @@ -433,9 +431,12 @@ # length of memo field >>4 lelong x \b, field length %d >>>8 string >\0 \b, 1st used item "%s" +# http://www.dbfree.org/webdocs/1-documentation/0018-developers_stuff_(advanced)/os_related_stuff/xbase_file_format.htm # Print the information of FoxPro FPT memo file 0 name foxpro-memo-print >0 belong x FoxPro FPT +!:mime application/x-fpt +!:ext fpt # Size of blocks for FoxPro ( 64,256 ) >6 ubeshort x \b, blocks size %u # next available block diff --git a/magic/Magdir/elf b/magic/Magdir/elf index 85eda78a293..b5a2e00b372 100644 --- a/magic/Magdir/elf +++ b/magic/Magdir/elf @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: elf,v 1.77 2019/01/16 19:33:35 christos Exp $ +# $File: elf,v 1.79 2019/12/16 04:24:01 christos Exp $ # elf: file(1) magic for ELF executables # # We have to check the byte order flag to see what byte order all the @@ -38,7 +38,7 @@ >0 lelong&0x3 2 relaxed memory ordering, 0 name elf-pa-risc ->2 leshort 0x0208 1.0 +>2 leshort 0x020b 1.0 >2 leshort 0x0210 1.1 >2 leshort 0x0214 2.0 >0 leshort &0x0008 (LP64) @@ -50,9 +50,8 @@ !:mime application/x-object >16 leshort 2 executable, !:mime application/x-executable ->16 leshort 3 ${x?pie executable:shared object}, - -!:mime application/x-${x?pie-executable:sharedlib} +>16 leshort 3 shared object, +!:mime application/x-sharedlib >16 leshort 4 core file, !:mime application/x-coredump # OS-specific diff --git a/magic/Magdir/espressif b/magic/Magdir/espressif index 72a0ec9b4f3..7a8616a1a48 100644 --- a/magic/Magdir/espressif +++ b/magic/Magdir/espressif @@ -1,5 +1,5 @@ -# $File: espressif,v 1.1 2018/11/20 18:57:17 christos Exp $ +# $File: espressif,v 1.2 2019/11/15 21:03:14 christos Exp $ # configuration dump of Tasmota firmware for ESP8266 based devices by Espressif # URL: https://github.com/arendst/Sonoff-Tasmota/ # Reference: https://codeload.github.com/arendst/Sonoff-Tasmota/zip/release-6.2/ @@ -8,7 +8,7 @@ # # cfg_holder=4617=0x1209 0 uleshort 4617 -# remainig settings normally 0x5A+offset XORed; free_1D5[20] empty since 5.12.0e +# remaining settings normally 0x5A+offset XORed; free_1D5[20] empty since 5.12.0e >0x1D5 ubequad 0x2f30313233343536 configuration of Tasmota firmware (ESP8266) !:mime application/x-tasmota-dmp !:ext dmp diff --git a/magic/Magdir/filesystems b/magic/Magdir/filesystems index 1920e562a67..b1c8d0bfb3c 100644 --- a/magic/Magdir/filesystems +++ b/magic/Magdir/filesystems @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------ -# $File: filesystems,v 1.128 2019/04/23 15:43:27 christos Exp $ +# $File: filesystems,v 1.131 2019/11/15 23:49:38 christos Exp $ # filesystems: file(1) magic for different filesystems # 0 name partid @@ -2057,10 +2057,6 @@ >0x10040 lelong 2 yura hash >0x10040 lelong 3 r5 hash -# JFFS - russell@coker.com.au -0 lelong 0x34383931 Linux Journalled Flash File system, little endian -0 belong 0x34383931 Linux Journalled Flash File system, big endian - # EST flat binary format (which isn't, but anyway) # From: Mark Brown 0 string ESTFBINR EST flat binary @@ -2122,6 +2118,7 @@ >29 byte 23 \bDesignWare ARC, >29 byte 24 \bx86_64, >29 byte 25 \bXtensa, +>29 byte 26 \bRISC-V, >30 byte 0 Invalid Image >30 byte 1 Standalone Program >30 byte 2 OS Kernel Image @@ -2144,55 +2141,48 @@ # JFFS2 file system 0 leshort 0x1984 Linux old jffs2 filesystem data little endian +0 beshort 0x1984 Linux old jffs2 filesystem data big endian 0 leshort 0x1985 Linux jffs2 filesystem data little endian +0 beshort 0x1985 Linux jffs2 filesystem data big endian # Squashfs -0 string sqsh Squashfs filesystem, big endian, +0 name squashfs >28 beshort x version %d. ->30 beshort x \b%d, +>30 beshort x \b%d, +>20 beshort 0 uncompressed, +>20 beshort 1 zlib +>20 beshort 2 lzma +>20 beshort 3 lzo +>20 beshort 4 xz +>20 beshort 5 lz4 +>20 beshort 6 zstd +>20 beshort >0 compressed, >28 beshort <3 >>8 belong x %d bytes, >28 beshort >2 ->>28 beshort <4 +>>28 beshort <4 >>>63 bequad x %lld bytes, ->>28 beshort >3 +>>28 beshort >3 >>>40 bequad x %lld bytes, #>>67 belong x %d bytes, >4 belong x %d inodes, >28 beshort <2 >>32 beshort x blocksize: %d bytes, >28 beshort >1 ->>28 beshort <4 +>>28 beshort <4 >>>51 belong x blocksize: %d bytes, ->>28 beshort >3 +>>28 beshort >3 >>>12 belong x blocksize: %d bytes, ->28 beshort <4 +>28 beshort <4 >>39 bedate x created: %s ->28 beshort >3 +>28 beshort >3 >>8 bedate x created: %s + +0 string sqsh Squashfs filesystem, big endian, +>0 use squashfs + 0 string hsqs Squashfs filesystem, little endian, ->28 leshort x version %d. ->30 leshort x \b%d, ->28 leshort <3 ->>8 lelong x %d bytes, ->28 leshort >2 ->>28 leshort <4 ->>>63 lequad x %lld bytes, ->>28 leshort >3 ->>>40 lequad x %lld bytes, -#>>63 lelong x %d bytes, ->4 lelong x %d inodes, ->28 leshort <2 ->>32 leshort x blocksize: %d bytes, ->28 leshort >1 ->>28 leshort <4 ->>>51 lelong x blocksize: %d bytes, ->>28 leshort >3 ->>>12 lelong x blocksize: %d bytes, ->28 leshort <4 ->>39 ledate x created: %s ->28 leshort >3 ->>8 ledate x created: %s +>0 use ^squashfs # AFS Dump Magic # From: Ty Sarna diff --git a/magic/Magdir/fonts b/magic/Magdir/fonts index f47736f4e4f..b0b40083a5d 100644 --- a/magic/Magdir/fonts +++ b/magic/Magdir/fonts @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: fonts,v 1.41 2019/05/05 16:44:04 christos Exp $ +# $File: fonts,v 1.43 2019/07/16 11:11:31 christos Exp $ # fonts: file(1) magic for font data # 0 search/1 FONT ASCII vfont text @@ -133,51 +133,55 @@ # Reference: http://cd.textfiles.com/ataricompendium/BOOK/HTML/APPENDC.HTM#cnt # # usual case with lightening mask and skewing mask 5555h~UU -62 ulelong 0x55555555 ->0 use gdos-font +#62 ulelong 0x55555555 +# skip cl8m8ocofedso.testfile by looking for face size lower/equal 72 +#>2 uleshort <73 +#>>0 use gdos-font # BOX18.GFT COWBOY30.GFT ROYALK30.GFT -62 ulelong 0 +#62 ulelong 0 # skip ISO 9660 CD-ROM ./filesystem by looking for low positive face size ->2 uleshort >2 -# skip DOS 2.0 backup id file ./msdos by looking for face size lower/equal 48 ->>2 uleshort <49 -# skip MS Windows ICO ./msdos by looking for valid face name ->>>4 ubeshort >0x1F00 -# skip DOS executable BACKM212.COM by looking for horizontal offset table after header -#>>>>68 ulelong >87 OFFSET_OK ->>>>0 use gdos-font +#>2 uleshort >2 +# skip DOS 2.0 backup id file ./msdos by looking for face size lower/equal 72 +#>>2 uleshort <73 +# skip MS oem.hlp, some Windows ICO ./msdos by looking for valid long name like WYE +#>>>4 ulelong >0x001F1f1F +# skip Microsoft WinWord 2.0 ./msdos by looking for positive offset to font data +#>>>>76 ulelong >83 +#>>>>>0 use gdos-font 0 name gdos-font >0 uleshort x GEM GDOS font !:mime application/x-font-gdos # also .eps found like AA070GEP.EPS AI360GEP.EPS !:ext fnt/gtf -# font name like University Bold +# font name like Big&Tall, Celtic #s, Courier, University Bold, WYE >4 string x %.32s -# face size in points 3-48 +# face size in points 3-72 SLSS03CG.FNT H1CELT72.FNT >2 uleshort x %u # face ID (must be unique) >0 uleshort x \b, ID 0x%4.4x -# lowest character index in face (usually 32 for disk-loaded fonts). -#>36 uleshort x \b, low character index %u -# width of the widest character +# lowest character index in face (4 but usually 32 for disk-loaded fonts) +#>36 uleshort !32 \b, unusual character index %u +# width of the widest character like 0 8 10 12 16 24 32 #>50 uleshort x \b, %u char width -# width of the widest character cell +# width of the widest character cell like 8 11 12 14 15 16 33 67 #>52 uleshort x \b, %u cell width -# thickening size +# thickening size in pixel like 0 1 2 3 4 5 6 7 8 #>58 uleshort x \b, %u thick # lightening mask to eliminate pixels, usually 5555h >62 uleshort !0x5555 \b, lightening mask 0x%x # skewing mask to determine when to perform additional rotation when skewing, usually 5555h >64 uleshort !0x5555 \b, skewing mask 0x%x -# offset to horizontal offset table 58h~88 5eh -#>68 ulelong >88 \b, 0x%x horizontal table offset -# offset character offset table +# offset to optional horizontal offset table 0 58h~88 5eh 252h +#>68 ulelong x \b, 0x%x horizontal table offset +# offset of character offset table 54h for many *.GFT 55h 58h 5Eh 120h 1D4h 202h 220h #>72 ulelong x \b, 0x%x coffset -# offset to font data -#>72 ulelong x \b, 0x%x foffset -# form width in bytes +# offset to font data like 116h 118h 158 20Ah 20Eh +>76 ulelong x \b, 0x%x foffset +# form width in bytes like 58 67 156 190 227 317 345 #>80 uleshort x \b, %u fwidth -# pointer to the next font, set by GDOS after loading +# form height in bytes like 4 8 11 17 26 56 70 90 120 146 150 +#>82 uleshort x \b, %u fheight +# pointer to the next font like 0 10000h 20000h 30000h 40000h 60000h 80000h E0000h D0000h #>84 ulelong x \b, 0x%x noffset # downloadable fonts for browser (prints type) anthon@mnt.org diff --git a/magic/Magdir/forth b/magic/Magdir/forth new file mode 100644 index 00000000000..cfbcef55482 --- /dev/null +++ b/magic/Magdir/forth @@ -0,0 +1,80 @@ + +#------------------------------------------------------------------------------ +# $File: forth,v 1.1 2019/06/06 19:14:20 christos Exp $ +# forth: file(1) magic for various Forth environments +# From: Lubomir Rintel +# + +# Has a FORTH stack diagram and something that looks very much like a FORTH +# multi-line word definition. Probably a FORTH source. +0 regex \[[:space:]]\\(([[:space:]].*)?\ --\ (.*[[:space:]])?\\) +>0 regex \^:\[[:space:]] +>>0 regex \^;$ FORTH program +!:mime text/x-forth + +# Inline word definition complete with a stack diagram +0 regex \^:[[:space:]].*[[:space:]]\\(([[:space:]].*)?\ --\ (.*[[:space:]])?\\)[[:space:]].*[[:space:]];$ FORTH program +!:mime text/x-forth + +# Various dictionary images used by OpenFirware FORTH environent + +0 lelong 0xe1a00000 +>8 lelong 0xe1a00000 ARM OpenFirmware FORTH Dictionary, +>>24 lelong x Text length: %d bytes, +>>28 lelong x Data length: %d bytes, +>>32 lelong x Text Relocation Table length: %d bytes, +>>36 lelong x Data Relocation Table length: %d bytes, +>>40 lelong x Entry Point: 0x%08X, +>>44 lelong x BSS length: %d bytes + +0 string MP +>28 lelong 1 x86 OpenFirmware FORTH Dictionary, +>>4 leshort x %d blocks +>>2 leshort x + %d bytes, +>>6 leshort x %d relocations, +>>8 leshort x Header length: %d paragraphs, +>>10 leshort x Data Size: %d +>>12 leshort x - %d 4K pages, +>>14 lelong x Initial Stack Pointer: 0x%08X, +>>20 lelong x Entry Point: 0x%08X, +>>24 lelong x First Relocation Item: %d, +>>26 lelong x Overlay Number: %d, +>>18 leshort x Checksum: 0x%08X + +0 belong 0x48000020 PowerPC OpenFirmware FORTH Dictionary, +>4 belong x Text length: %d bytes, +>8 belong x Data length: %d bytes, +>12 belong x BSS length: %d bytes, +>16 belong x Symbol Table length: %d bytes, +>20 belong x Entry Point: 0x%08X, +>24 belong x Text Relocation Table length: %d bytes, +>28 belong x Data Relocation Table length: %d bytes + +0 lelong 0x10000007 MIPS OpenFirmware FORTH Dictionary, +>4 lelong x Text length: %d bytes, +>8 lelong x Data length: %d bytes, +>12 lelong x BSS length: %d bytes, +>16 lelong x Symbol Table length: %d bytes, +>20 lelong x Entry Point: 0x%08X, +>24 lelong x Text Relocation Table length: %d bytes, +>28 lelong x Data Relocation Table length: %d bytes + +# Dictionary images used by minimal C FORTH environments, any platform, +# using native byte order. + +# Weak. +#0 short 0x5820 cForth 16-bit Dictionary, +#>2 short x Serial: 0x%08X, +#>4 short x Dictionary Start: 0x%08X, +#>6 short x Dictionary Size: %d bytes, +#>8 short x User Area Start: 0x%08X, +#>10 short x User Area Size: %d bytes, +#>12 short x Entry Point: 0x%08X + +0 long 0x581120 cForth 32-bit Dictionary, +>4 long x Serial: 0x%08X, +>8 long x Dictionary Start: 0x%08X, +>12 long x Dictionary Size: %d bytes, +>16 long x User Area Start: 0x%08X, +>20 long x User Area Size: %d bytes, +>24 long x Entry Point: 0x%08X diff --git a/magic/Magdir/frame b/magic/Magdir/frame index 08f884d0ea5..c0fd840a46f 100644 --- a/magic/Magdir/frame +++ b/magic/Magdir/frame @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: frame,v 1.13 2015/08/29 07:10:35 christos Exp $ +# $File: frame,v 1.14 2019/11/25 00:31:30 christos Exp $ # frame: file(1) magic for FrameMaker files # # This stuff came on a FrameMaker demo tape, most of which is @@ -18,12 +18,24 @@ >11 string 2.0 (2.0 >11 string 1.0 (1.0 >14 byte x %c) +# URL: http://fileformats.archiveteam.org/wiki/Maker_Interchange_Format +# Reference: https://help.adobe.com/en_US/framemaker/mifreference/mifref.pdf +# Update: Joerg Jenderek 2019 Nov 0 string \9 string 4.0 (4.0) ->9 string 3.0 (3.0) ->9 string 2.0 (2.0) ->9 string 1.0 (1.x) +# https://www.iana.org/assignments/media-types/application/vnd.mif +!:mime application/vnd.mif +# mif most but also find bookTOC.framemif +!:ext mif/framemif +# followed by space~20h +#>8 ubyte 0x20 \b, space before version +# 3 characters of version number of the MIF language like 1.0, 2.0 ... 2015 ... +>9 string x (%.3s +# if not greater sign then display 4th character of version +>12 ubyte =0x3e \b) +>12 ubyte !0x3e \b%c) +# comment starting with # shows the name+version number of generating program +>13 search/3 # +>>&0 string x "%s" 0 search/1 \17 string 3.0 (3.0) diff --git a/magic/Magdir/games b/magic/Magdir/games index 30e6159a174..f5506ae6573 100644 --- a/magic/Magdir/games +++ b/magic/Magdir/games @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: games,v 1.17 2019/04/19 00:42:27 christos Exp $ +# $File: games,v 1.18 2019/11/10 19:19:58 christos Exp $ # games: file(1) for games # Fabio Bonelli @@ -299,3 +299,7 @@ >12 lelong !0 \b, names: %i >28 lelong !0 \b, imports: %i >20 lelong !0 \b, exports: %i + +0 string ESVG +>4 lelong 0x00160000 +>10 string TOC\020 Empire Deluxe for DOS saved game diff --git a/magic/Magdir/gimp b/magic/Magdir/gimp index 516abb25a1f..e763cbec83a 100644 --- a/magic/Magdir/gimp +++ b/magic/Magdir/gimp @@ -1,22 +1,33 @@ #------------------------------------------------------------------------------ -# $File: gimp,v 1.9 2014/04/30 21:41:02 christos Exp $ +# $File: gimp,v 1.10 2019/10/15 18:19:40 christos Exp $ # GIMP Gradient: file(1) magic for the GIMP's gradient data files (.ggr) # by Federico Mena 0 string/t GIMP\ Gradient GIMP gradient data +#!:mime text/plain +!:mime text/x-gimp-ggr +!:ext ggr # GIMP palette (.gpl) # From: Markus Heidelberg 0 string/t GIMP\ Palette GIMP palette data +# URL: https://docs.gimp.org/en/gimp-concepts-palettes.html +# Reference: http://fileformats.archiveteam.org/wiki/GIMP_Palette +#!:mime text/plain +!:mime text/x-gimp-gpl +!:ext gpl #------------------------------------------------------------------------------ # XCF: file(1) magic for the XCF image format used in the GIMP (.xcf) developed # by Spencer Kimball and Peter Mattis # ('Bucky' LaDieu, nega@vt.edu) +# URL: https://en.wikipedia.org/wiki/XCF_(file_format) +# Reference: https://gitlab.gnome.org/GNOME/gimp/blob/master/devel-docs/xcf.txt 0 string gimp\ xcf GIMP XCF image data, !:mime image/x-xcf +!:ext xcf >9 string file version 0, >9 string v version >>10 string >\0 %s, @@ -32,8 +43,11 @@ # by Spencer Kimball and Peter Mattis # ('Bucky' LaDieu, nega@vt.edu) +# Reference: http://fileformats.archiveteam.org/wiki/GIMP_Pattern 20 string GPAT GIMP pattern data, >24 string x %s +!:mime image/x-gimp-pat +!:ext pat #------------------------------------------------------------------------------ # XCF: file(1) magic for the brushes used in the GIMP (.gbr), developed @@ -41,7 +55,23 @@ # ('Bucky' LaDieu, nega@vt.edu) 20 string GIMP GIMP brush data +# Reference: http://fileformats.archiveteam.org/wiki/GIMP_Brush +!:mime image/x-gimp-gbr +# some sources also list gpb +!:ext gbr + +# From: Joerg Jenderek +# URL: https://docs.gimp.org/en/gimp-using-animated-brushes.html +# Reference: http://fileformats.archiveteam.org/wiki/GIMP_Animated_Brush +# share\gimp\2.0\brushes\Legacy\confetti.gih +0 search/21/b \040ncells: GIMP animated brush data +!:mime image/x-gimp-gih +!:ext gih # GIMP Curves File # From: "Nelson A. de Oliveira" 0 string #\040GIMP\040Curves\040File GIMP curve file +#!:mime text/plain +!:mime text/x-gimp-curve +!:ext /txt + diff --git a/magic/Magdir/git b/magic/Magdir/git new file mode 100644 index 00000000000..4087fcd8de4 --- /dev/null +++ b/magic/Magdir/git @@ -0,0 +1,13 @@ + +#------------------------------------------------------------------------------ +# $File: git,v 1.1 2019/10/04 18:46:29 christos Exp $ +# git: file(1) magic for Git objects + +0 string blob\040 +>5 regex [0-9]+ Git blob %s + +0 string tree\040 +>5 regex [0-9]+ Git tree %s + +0 string commit\040 +>7 regex [0-9]+ Git commit %s diff --git a/magic/Magdir/icc b/magic/Magdir/icc index 55583b7b4f2..a8b57864bf0 100644 --- a/magic/Magdir/icc +++ b/magic/Magdir/icc @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: icc,v 1.5 2017/08/13 00:21:47 christos Exp $ +# $File: icc,v 1.6 2019/11/15 21:03:14 christos Exp $ # icc: file(1) magic for International Color Consortium file formats # @@ -54,7 +54,7 @@ !:mime application/vnd.iccprofile # for "ICM" extension only versions 2.x and for Kodak "CC" 2.0 is found >>>8 ubyte =2 -# do not use empty message text to a avoid error like +# do not use empty message text to avoid error like # icc, 82: Warning: Current entry does not yet have a description for adding a EXTENSION type # file.exe: could not find any valid magic files! >>>>9 ubyte !0 \ble diff --git a/magic/Magdir/images b/magic/Magdir/images index 0e314adecb1..08435eeaefe 100644 --- a/magic/Magdir/images +++ b/magic/Magdir/images @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: images,v 1.160 2019/04/19 00:42:27 christos Exp $ +# $File: images,v 1.171 2019/11/23 16:19:47 christos Exp $ # images: file(1) magic for image formats (see also "iff", and "c-lang" for # XPM bitmaps) # @@ -498,7 +498,31 @@ >12 lelong >0 %d-bit # Magick Image File Format -0 string id=ImageMagick MIFF image data +# URL: https://imagemagick.org/script/miff.php +# Reference: http://fileformats.archiveteam.org/wiki/MIFF +# Update: Joerg Jenderek +# http://www.nationalarchives.gov.uk/pronom/fmt/930 +0 search/256/bc id=imagemagick +# skip bad ASCII text by following new line~0x0A or space~0x20 character +#>&0 ubyte x \b, next character 0x%x +# called by TriD ImageMagick Machine independent File Format bitmap +>&0 ubyte&0xD5 0 MIFF image data +# https://reposcope.com/mimetype/image/miff +#!:mime image/miff +!:mime image/x-miff +!:ext miff/mif +# examples with standard file(1) magic +#>>0 string =id=ImageMagick with standard magic +# examples with unusual file(1) magic like +>>0 string !id=ImageMagick starting with +# start with comment (brace) like http://samples.fileformat.info/.../AQUARIUM.MIF +>>>0 ubyte =0x7b comment +# skip second character which is often a newline and show comment +>>>>2 string x "%s" +# does not start with comment, probably letters with other case like Id=ImageMagick +# ImageMagick-7.0.9-2/Magick++/demo/smile_anim.miff +>>>0 ubyte !0x7b +>>>>0 string >\0 '%-.14s' # Artisan 0 long 1123028772 Artisan image data @@ -572,20 +596,115 @@ # PC bitmaps (OS/2, Windows BMP files) (Greg Roelofs, newt@uchicago.edu) # https://en.wikipedia.org/wiki/BMP_file_format#DIB_header_.\ # 28bitmap_information_header.29 +# Note: variant starting direct with DIB header see +# http://fileformats.archiveteam.org/wiki/BMP +# verified by ImageMagick version 6.8.9-8 command `identify *.dib` +0 leshort 40 +# skip bad samples like GAME by looking for valid number of color planes +>12 uleshort 1 Device independent bitmap graphic +!:mime image/bmp +!:apple ????BMPp +!:ext dib +>>4 lelong x \b, %d x +>>8 lelong x %d x +>>14 leshort x %d +# number of color planes (must be 1) +#>>12 uleshort >1 \b, %u color planes +# compression method: 0~no 1~RLE 8-bit/pixel 3~Huffman 1D +#>>16 ulelong 3 \b, Huffman 1D compression +>>16 ulelong >0 \b, %u compression +# image size is the size of raw bitmap; a dummy 0 can be given for BI_RGB bitmaps +>>20 ulelong x \b, image size %u +# horizontal and vertical resolution of the image (pixel per metre, signed integer) +>>24 lelong >0 \b, resolution %d x +>>>28 lelong x %d px/m +# number of colors in palette, or 0 to default to 2**n +#>>32 ulelong >0 \b, %u colors +# number of important colors used, or 0 when every color is important +>>36 ulelong >0 \b, %u important colors 0 string BM >14 leshort 12 PC bitmap, OS/2 1.x format !:mime image/x-ms-bmp >>18 leshort x \b, %d x >>20 leshort x %d >14 leshort 64 PC bitmap, OS/2 2.x format -!:mime image/x-ms-bmp ->>18 leshort x \b, %d x ->>20 leshort x %d ->14 leshort 40 PC bitmap, Windows 3.x format -!:mime image/x-ms-bmp +!:mime image/bmp +!:apple ????BMPp +!:ext bmp +# image width and height fields are unsigned integers for OS/2 +>>18 ulelong x \b, %u x +>>22 ulelong x %u +# number of bits per pixel (color depth); found 1 4 8 +>>28 uleshort >1 x %u +# x, y coordinates of the hotspot +>>6 uleshort >0 \b, hotspot %ux +>>>8 uleshort x \b%u +>>26 uleshort >1 \b, %u color planes +# cbSize; size of file or headers +>>2 ulelong x \b, cbSize %u +#>>2 ulelong x \b, cbSize 0x%x +# offBits; offset to bitmap data like 56h 5Eh 8Eh 43Eh +>>10 ulelong x \b, bits offset %u +#>>10 ulelong x \b, bits offset 0x%x +#>>(10.l) ubequad !0 \b, bits 0x%16.16llx +# BITMAPV2INFOHEADER adds RGB bit masks +>14 leshort 52 PC bitmap, Adobe Photoshop +!:mime image/bmp +!:apple ????BMPp +!:ext bmp >>18 lelong x \b, %d x >>22 lelong x %d x >>28 leshort x %d +# BITMAPV3INFOHEADER adds alpha channel bit mask +>14 leshort 56 PC bitmap, Adobe Photoshop with alpha channel mask +!:mime image/bmp +!:apple ????BMPp +!:ext bmp +>>18 lelong x \b, %d x +>>22 lelong x %d x +>>28 leshort x %d +>14 leshort 40 +# jump 4 bytes before end of file/header to skip fmt-116-signature-id-118.dib +>>(2.l-4) ulong x PC bitmap, Windows 3.x format +!:mime image/bmp +!:apple ????BMPp +>>>18 lelong x \b, %d x +>>>22 lelong x %d +# 320 x 400 https://en.wikipedia.org/wiki/LOGO.SYS +>>>18 ulequad =0x0000019000000140 x +!:ext bmp/sys +>>>18 ulequad !0x0000019000000140 +# compression method 2~RLE 4-bit/pixel implies also extension rle +>>>>30 ulelong 2 x +!:ext bmp/rle +>>>>30 default x x +!:ext bmp +# number of bits per pixel (color depth); found 1 2 4 8 16 24 32 +>>>28 leshort x %d +# x, y coordinates of the hotspot; there is no hotspot in bitmaps, so values 0 +#>>>6 uleshort >0 \b, hotspot %ux +#>>>>8 uleshort x \b%u +# number of color planes (must be 1), except badplanes.bmp for testing +#>>>26 uleshort >1 \b, %u color planes +# compression method: 0~no 1~RLE 8-bit/pixel 2~RLE 4-bit/pixel 3~Huffman 1D 6~RGBA bit field masks +#>>>30 ulelong 3 \b, Huffman 1D compression +>>>30 ulelong >0 \b, %u compression +# image size is the size of raw bitmap; a dummy 0 can be given for BI_RGB bitmaps +>>>34 ulelong >0 \b, image size %u +# horizontal and vertical resolution of the image (pixel per metre, signed integer) +>>>38 lelong >0 \b, resolution %d x +>>>>42 lelong x %d px/m +# number of colors in palette 16 256, or 0 to default to 2**n +#>>>46 ulelong >0 \b, %u colors +# number of important colors used, or 0 when every color is important +>>>50 ulelong >0 \b, %u important colors +# cbSize; often size of file +>>>2 ulelong x \b, cbSize %u +#>>>2 ulelong x \b, cbSize 0x%x +# offBits; offset to bitmap data like 36h 76h BEh 236h 406h 436h 4E6h +>>>10 ulelong x \b, bits offset %u +#>>>10 ulelong x \b, bits offset 0x%x +#>>>(10.l) ubequad !0 \b, bits 0x%16.16llxd >14 leshort 124 PC bitmap, Windows 98/2000 and newer format !:mime image/x-ms-bmp >>18 lelong x \b, %d x @@ -601,13 +720,143 @@ >>18 lelong x \b, %d x >>22 lelong x %d x >>28 leshort x %d -# Too simple - MPi -#0 string IC PC icon data +# Update: Joerg Jenderek +# URL: http://fileformats.archiveteam.org/wiki/OS/2_Icon +# Reference: http://www.fileformat.info +# /format/os2bmp/spec/902d5c253f2a43ada39c2b81034f27fd/view.htm +# Note: verified by command like `deark -l -d3 OS2MEMU.ICO` +0 string IC +# skip Lotus smart icon *.smi by looking for valid hotspot coordinates +>6 ulelong&0xFF00FF00 =0 OS/2 icon +# jump 4 bytes before end of header/file and test for accessibility +#>>(2.l-4) ubelong x End of header is OK! +!:mime image/x-os2-ico +!:ext ico +# cbSize; size of header or file in bytes like 1ah 120h 420h +>>2 ulelong x \b, cbSize %u +# xHotspot, yHotspot; coordinates of the hotspot for icons like 16 32 +>>6 uleshort x \b, hotspot %ux +>>8 uleshort x \b%u +# offBits; offset in bytes to the beginning of the bit-map pel data like 20h +>>10 ulelong x \b, bits offset %u +#>>(10.l) ubequad x \b, bits 0x%16.16llx #0 string PI PC pointer image data #0 string CI PC color icon data +0 string CI +# test also for valid dib header sizes 12 or 64 +>14 ulelong <65 OS/2 +# test also for valid hotspot coordinates +#>>6 ulelong&0xFE00FE00 =0 OS/2 +!:mime image/x-os2-ico +!:ext ico +>>14 ulelong 12 1.x color icon +# image width and height fields are unsigned integers for OS/2 +>>>18 uleshort x %u x +# stored height = 2 * real height +>>>20 uleshort/2 x %u +# number of bits per pixel (color depth). Typical 32 24 16 8 4 but only 1 found +>>>24 uleshort >1 x %u +# color planes; must be 1 +#>>>22 uleshort >1 \b, %u color planes +>>14 ulelong 64 2.x color icon +# image width and height +>>>18 ulelong x %u x +# stored height = 2 * real height +>>>22 ulelong/2 x %u +# number of bits per pixel (color depth). only 1 found +>>>28 uleshort >1 x %u +#>>>26 uleshort >1 \b, %u color planes +# compression method: 0~no 3~Huffman 1D +>>>30 ulelong 3 \b, Huffman 1D compression +#>>>30 ulelong >0 \b, %u compression +# xHotspot, yHotspot; coordinates of the hotspot like 0 1 16 20 32 33 63 64 +>>6 uleshort x \b, hotspot %ux +>>8 uleshort x \b%u +# cbSize; size of header or maybe file in bytes like 1Ah 4Eh 84Eh +>>2 ulelong x \b, cbSize %u +#>>2 ulelong x \b, cbSize %x +# offBits; offset to bitmap data (pixel array) like E4h 3Ah 66h 6Ah 33Ah 4A4h +>>10 ulelong x \b, bits offset %u +#>>10 ulelong x \b, bits offset 0x%x +#>>(10.l) ubequad !0 \b, bits 0x%16.16llx +# dib header size: 12~Ch~OS/2 1.x 64~40h~OS/2 2.x +#>>14 ulelong x \b, dib header size %u #0 string CP PC color pointer image data +# URL: http://fileformats.archiveteam.org/wiki/OS/2_Pointer +# Reference: http://www.fileformat.info/format/os2bmp/egff.htm +0 string CP +# skip CPU-Z Report by checking for valid dib header sizes 12 or 64 +>14 ulelong <65 OS/2 +# http://extension.nirsoft.net/PTR +!:mime image/x-ibm-pointer +!:ext ptr +>>14 ulelong 12 1.x color pointer +# image width and height fields are unsigned integers for OS/2 +>>>18 uleshort x %u x +# stored height = 2 * real height +>>>20 uleshort/2 x %u +# number of bits per pixel (color depth). Typical 32 24 16 8 4 but only 1 found +>>>24 uleshort >1 x %u +# color planes; must be 1 +#>>>22 uleshort >1 \b, %u color planes +>>14 ulelong 64 2.x color pointer +# image width and height +>>>18 ulelong x %u x +# stored height = 2 * real height +>>>22 ulelong/2 x %u +# number of bits per pixel (color depth). only 1 found +>>>28 uleshort >1 x %u +#>>>26 uleshort >1 \b, %u color planes +# compression method: 0~no 3~Huffman 1D +>>>30 ulelong 3 \b, Huffman 1D compression +#>>>30 ulelong >0 \b, %u compression +# xHotspot, yHotspot; coordinates of the hotspot like 0 3 4 8 15 16 23 27 31 +>>6 uleshort x \b, hotspot %ux +>>8 uleshort x \b%u +# cbSize; size of header or maybe file in bytes like 1Ah 4Eh +>>2 ulelong x \b, cbSize %u +#>>2 ulelong x \b, cbSize %x +# offBits; offset to bitmap data (pixel array) like 6Ah A4h E4h 4A4h +>>10 ulelong x \b, bits offset %u +#>>10 ulelong x \b, bits offset 0x%x +#>>(10.l) ubequad !0 \b, bits 0x%16.16llx +# dib header size: 12~Ch~OS/2 1.x 64~40h~OS/2 2.x +#>>14 ulelong x \b, dib header size %u # Conflicts with other entries [BABYL] +# URL: http://fileformats.archiveteam.org/wiki/BMP#OS.2F2_Bitmap_Array +# Note: container for OS/2 icon "IC", color icon "CI", color pointer "CP" or bitmap "BM" #0 string BA PC bitmap array data +0 string BA +# skip old Emacs RMAIL BABYL ./mail.news by checking for low header size +>2 ulelong <0x004c5942 OS/2 graphic array +!:mime image/x-os2-graphics +#!:apple ????BMPf +# cbSize; size of header like 28h 5Ch +>>2 ulelong x \b, cbSize %u +#>>2 ulelong x \b, cbSize 0x%x +# offNext; offset to data like 0 48h F2h 4Eh 64h C6h D2h D6h DAh E6h EAh 348h +>>6 ulelong >0 \b, data offset %u +#>>6 ulelong >0 \b, data offset 0x%x +#>>(6.l) ubequad !0 \b, data 0x%16.16llx +# dimensions of the intended device like 640 x 480 for VGA or 1024 x 768 +>>10 uleshort >0 \b, display %u +>>>12 uleshort >0 x %u +# usType of first array element +#>>14 string x \b, usType %2.2s +# 1 space char after "1st" +# no *.bga examples found https://www.openwith.org/file-extensions/bga/1342 +>>14 string BM \b; 1st +!:ext bmp/bga +>>14 string CI \b; 1st +!:ext ico +>>14 string CP \b; 1st +!:ext ico +>>14 string IC \b; 1st +!:ext ico +# no white-black pointer found +#>>14 string PT \b; 1st +#!:ext +>>14 indirect x # XPM icons (Greg Roelofs, newt@uchicago.edu) 0 search/1 /*\ XPM\ */ X pixmap image text @@ -1960,3 +2209,26 @@ 0 string XPR0 Microsoft Xbox XPR0 texture >0x19 byte x \b, format: >>0x19 use xbox-xpr-pixel-format + +# ILDA Image Data Transfer Format +# https://www.ilda.com/resources/StandardsDocs/ILDA_IDTF14_rev011.pdf +# +# Updated by Chuck Hein (laser@geekdude.com) +# +0 string ILDA ILDA Image Data Transfer Format +>7 byte 0x00 3D Coordinates with Indexed Color +>7 byte 0x01 2D Coordinates with Indexed Color +>7 byte 0x02 Color Palette +>7 byte 0x04 3D Coordinates with True Color +>7 byte 0x05 2D Coordinates with True Color +>8 string >0 \b, palette %s +>16 string >0 \b, company %s +>24 beshort >0 \b, number of records %d +>>26 beshort x \b, palette number %d +>>28 beshort >0 \b, number of frames %d +>>30 byte >0 \b, projector number %d + +# Dropbox "lepton" compressed jpeg format +# https://github.com/dropbox/lepton +0 belong&0xfffff0ff 0xcf84005a Lepton image file +>2 byte x (version %d) diff --git a/magic/Magdir/javascript b/magic/Magdir/javascript index 8f664533a1f..7fa9d9d404c 100644 --- a/magic/Magdir/javascript +++ b/magic/Magdir/javascript @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: javascript,v 1.1 2012/06/16 13:30:36 christos Exp $ +# $File: javascript,v 1.2 2019/08/05 10:34:26 christos Exp $ # javascript: magic for javascript and node.js scripts. # 0 search/1/w #!/bin/node Node.js script text executable @@ -15,3 +15,8 @@ !:mime application/javascript 0 search/1 #!/usr/bin/env\ nodejs Node.js script text executable !:mime application/javascript +# Hermes by Facebook https://hermesengine.dev/ +# https://github.com/facebook/hermes/blob/master/include/hermes/\ +# BCGen/HBC/BytecodeFileFormat.h#L24 +0 lequad 0x1F1903C103BC1FC6 Hermes JavaScript bytecode +>8 lelong x \b, version %d diff --git a/magic/Magdir/kml b/magic/Magdir/kml index dcdf64cf454..904f3b5d5f1 100644 --- a/magic/Magdir/kml +++ b/magic/Magdir/kml @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: kml,v 1.5 2019/04/19 00:42:27 christos Exp $ +# $File: kml,v 1.6 2019/05/21 04:50:10 christos Exp $ # Type: Google KML, formerly Keyhole Markup Language # Future development of this format has been handed # over to the Open Geospatial Consortium. @@ -8,7 +8,7 @@ # From: Asbjoern Sloth Toennesen 0 string/t \20 search/400 \ xmlns= ->>&0 regex ['"]https://earth.google.com/kml Google KML document +>>&0 regex ['"]http://earth.google.com/kml Google KML document !:mime application/vnd.google-earth.kml+xml >>>&1 string 2.0' \b, version 2.0 >>>&1 string 2.1' \b, version 2.1 @@ -20,7 +20,7 @@ # Open Geospatial Consortium. # https://www.opengeospatial.org/standards/kml/ # From: Asbjoern Sloth Toennesen ->>&0 regex ['"]https://www.opengis.net/kml OpenGIS KML document +>>&0 regex ['"]http://www.opengis.net/kml OpenGIS KML document !:mime application/vnd.google-earth.kml+xml >>>&1 string/t 2.2 \b, version 2.2 diff --git a/magic/Magdir/linux b/magic/Magdir/linux index ed7dcd10a25..e2e84348cd9 100644 --- a/magic/Magdir/linux +++ b/magic/Magdir/linux @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: linux,v 1.67 2019/04/19 00:42:27 christos Exp $ +# $File: linux,v 1.68 2019/09/11 21:20:56 christos Exp $ # linux: file(1) magic for Linux files # # Values for Linux/i386 binaries, from Daniel Quinlan @@ -494,3 +494,8 @@ >207 string >\0 \b, version %s >272 string >\0 \b, machine %s >337 string >\0 \b, domain %s + +# Device Tree files +0 search/1024 /dts-v1/ Device Tree File (v1) +# beat c code +!:strength +14 diff --git a/magic/Magdir/macintosh b/magic/Magdir/macintosh index 2a9f7a7b989..218a844dbef 100644 --- a/magic/Magdir/macintosh +++ b/magic/Magdir/macintosh @@ -1,13 +1,46 @@ #------------------------------------------------------------------------------ -# $File: macintosh,v 1.29 2019/04/19 00:42:27 christos Exp $ +# $File: macintosh,v 1.30 2019/12/14 20:40:26 christos Exp $ # macintosh description # # BinHex is the Macintosh ASCII-encoded file format (see also "apple") # Daniel Quinlan, quinlan@yggdrasil.com -11 string must\ be\ converted\ with\ BinHex BinHex binary text +# Update: Joerg Jenderek +# URL: https://en.wikipedia.org/wiki/BinHex +# Reference: http://fileformats.archiveteam.org/wiki/BinHex +# Note: only tested with version 4.0 and hqx extension +# Any text/binary before the characteristic comment sentence is to be ignored like in +# http://ftp.vim.org/pub/ftp/ftp/infomac/disk/mac-update-40b7.hqx +0 search/1602 (This\ file\ +>&0 use binhex +# http://ftp.vim.org/pub/ftp/ftp/infomac/_Disk_&_File/zap-res-forks-101.hqx +0 search/2652/b (This\ file\ +>&0 use binhex +0 name binhex +# keep splitted search string format similar like in version 5.37 +>0 string must\ be\ converted\ with\ BinHex\ BinHex binary text, version +# http://www.macdisk.com/binhexen.php3 +!:apple BNHQTEXT +# http://www.faqs.org/faqs/macintosh/comm-faq/part1/ +>>&0 string 1.0 1.0 +!:mime application/mac-binhex +!:ext hex +>>&0 string 2.0 2.0 +!:mime application/mac-binhex +!:ext hcx +# BinHex 3.0 never existed +>>&0 string 4.0 4.0 !:mime application/mac-binhex40 ->41 string x \b, version %.3s +!:ext hqx +# BinHex 5.0 also MacBinary I +>>&0 string 5.0 5.0 +!:mime application/mac-binhex40 +!:ext hqx +# this should never happen +>>&0 default x +>>>&0 string x %.3s +!:mime application/mac-binhex +!:ext hqx # Stuffit archives are the de facto standard of compression for Macintosh # files obtained from most archives. (franklsm@tuns.ca) diff --git a/magic/Magdir/mail.news b/magic/Magdir/mail.news index c58b3710af2..006fe923a86 100644 --- a/magic/Magdir/mail.news +++ b/magic/Magdir/mail.news @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------ -# $File: mail.news,v 1.24 2019/04/19 00:42:27 christos Exp $ +# $File: mail.news,v 1.25 2019/06/21 20:06:05 christos Exp $ # mail.news: file(1) magic for mail and news # # Unfortunately, saved netnews also has From line added in some news software. @@ -26,7 +26,16 @@ !:mime message/rfc822 0 string/t Article saved news text !:mime message/news -0 string/t BABYL Emacs RMAIL text +# Reference: http://quimby.gnus.org/notes/BABYL +# Update: Joerg Jenderek +# Note: used by Rmail in Emacs version 22 and before +# is not text because of characters like Control-L Control-_ +0 string/b BABYL\ OPTIONS: Emacs RMAIL +#0 string/t BABYL Emacs RMAIL text +# https://reposcope.com/mimetype/message/x-gnu-rmail +!:mime message/x-gnu-rmail +# ~/RMAIL +!:ext / 0 string/t Received: RFC 822 mail text !:mime message/rfc822 0 string/t MIME-Version: MIME entity text diff --git a/magic/Magdir/map b/magic/Magdir/map index af5f24ef02b..460746bab22 100644 --- a/magic/Magdir/map +++ b/magic/Magdir/map @@ -1,7 +1,7 @@ #------------------------------------------------------------------------------ -# $File: map,v 1.7 2019/04/30 04:02:04 christos Exp $ +# $File: map,v 1.8 2019/12/01 22:46:23 christos Exp $ # map: file(1) magic for Map data # @@ -316,6 +316,83 @@ # LBL:2A9h,SRT:1Dh 25h 27h,TRE:CFh 135h,TRF:5Ah,TYP:5Bh 6Eh 7Ch AEh,RGN:7Dh >>0 uleshort x \b, header length 0x%x +# URL: https://www.memotech.franken.de/FileFormats/ +# Reference: https://www.memotech.franken.de/FileFormats/Garmin_RGN_Format.pdf +# From: Joerg Jenderek +0 string KpGr Garmin update +# format version like: 0064h~1.0 +>0x4 uleshort !0x0064 +>>4 uleshort/100 x \b, version %u +>>4 uleshort%100 x \b.%u +# 1st Garmin entry +>6 use garmin-entry +# 2nd Garmin entry +>(0x6.l+10) ubyte x +>>&0 use garmin-entry +# 3rd entry +>(0x6.l+10) ubyte x +>>&(&0.l+4) ubyte x +>>>&0 use garmin-entry +# look again at version to use default clause +>0x4 uleshort x +# test for region content by looking for +# Garmin *.srf by ./images with normal builder name "SQA" or longer "hales" +# 1 space after equal sign +>>0x3a search/5/s GARMIN\ BITMAP \b= +!:mime image/x-garmin-exe +!:ext exe +>>>&0 indirect x +# if not bitmap *.srf then region; 1 space after equal sign +>>0x3a default x \b= +!:mime application/x-garmin-rgn +!:ext rgn +# recursiv embedded +>>>0x3a search/5/s KpGrd +>>>>&0 indirect x +# look for ZIP or JAR archive by ./archive and ./zip +>>>0x3a search/5/s PK\003\004 +>>>>&0 indirect x +# TODO: other garmin RGN record content like foo +#>>0x3a search/5/s bar BAR +# display information of Garmin RGN record +0 name garmin-entry +# record length: 2 for Data, for Application often 1Bh sometimes 1Dh, "big" for Region +#>0 ulelong x \b, length 0x%x +# data record (ID='D') with version content like 0064h~1.0 +>4 ubyte =0x44 +>>5 uleshort !0x0064 \b; Data +>>>5 uleshort/100 x \b, version %u +>>>5 uleshort%100 x \b.%u +# Application Record (ID='A') +>4 ubyte =0x41 \b; App +# version content like 00c8h~2.0 +>>5 uleshort !0x00C8 +>>>5 uleshort/100 x \b, version %u +>>>5 uleshort%100 x \b.%u +# builder name like: SQA sqa build hales +>>7 string x \b, build by %s +# build date like: Oct 25 1999, Oct 1 2008, Feb 23 2009, Dec 15 2009 +>>>&1 string x %s +# build time like: 11:26:12, 11:45:54, 14:16:13, 18:23:01 +>>>>&1 string x %s +# region record (ID='R') +>4 ubyte =0x52 \b; Region +# region ID:14~fw_all.bin: 78~ZIP, RGN or SRF bitmap; 148~ZIP or JAR; 249~display firmware; 251~WiFi or GCD firmware; 255~ZIP +>>5 uleshort x ID=%u +# delay in ms: like 0, 500 +>>7 ulelong !0 \b, %u ms +# region size (is record length - 10) +#>>11 ulelong x \b, length 0x%x +# region content like: +# "KpGr"~recursiv embedded,"GARMIN BITMAP"~Garmin Bitmap *.srf, "PK"~ZIP archive +#>>15 string x \b, content "%s" +>>15 ubequad x \b, content 0x%llx... +# This does NOT WORK! +#>>15 indirect x \b; contains +>4 default x \b; other +# garmin Record ID Identifies the record content like: D A R +>>4 ubyte x ID '%c' + # TOM TOM GPS watches ttbin files: # https://github.com/ryanbinns/ttwatch/tree/master/ttbin # From: Daniel Lenski diff --git a/magic/Magdir/modulefile b/magic/Magdir/modulefile new file mode 100644 index 00000000000..46c3baf2a0d --- /dev/null +++ b/magic/Magdir/modulefile @@ -0,0 +1,9 @@ + +#------------------------------------------------------------------------------ +# $File: modulefile,v 1.1 2019/10/15 18:04:40 christos Exp $ +# modulefile: file(1) magic for user's environment modulefile +# URL: http://modules.sourceforge.net/ +# Reference: https://modules.readthedocs.io/en/stable/modulefile.html +# From: Xavier Delaruelle +0 string #%Module modulefile +!:mime text/x-modulefile diff --git a/magic/Magdir/msdos b/magic/Magdir/msdos index eda0ddbb0d8..3013bf9102a 100644 --- a/magic/Magdir/msdos +++ b/magic/Magdir/msdos @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: msdos,v 1.128 2019/04/19 00:42:27 christos Exp $ +# $File: msdos,v 1.134 2019/10/18 15:16:18 christos Exp $ # msdos: file(1) magic for MS-DOS files # @@ -61,28 +61,24 @@ #>>0x18 leshort 0x1c (Borland compiler) #>>0x18 leshort 0x1e (MS compiler) -# If the relocation table is 0x40 or more bytes into the file, it's definitely -# not a DOS EXE. ->0x18 leshort >0x3f - # Maybe it's a PE? ->>(0x3c.l) string PE\0\0 PE +>(0x3c.l) string PE\0\0 PE !:mime application/x-dosexec ->>>(0x3c.l+24) leshort 0x010b \b32 executable ->>>(0x3c.l+24) leshort 0x020b \b32+ executable ->>>(0x3c.l+24) leshort 0x0107 ROM image ->>>(0x3c.l+24) default x Unknown PE signature ->>>>&0 leshort x 0x%x ->>>(0x3c.l+22) leshort&0x2000 >0 (DLL) ->>>(0x3c.l+92) leshort 1 +>>(0x3c.l+24) leshort 0x010b \b32 executable +>>(0x3c.l+24) leshort 0x020b \b32+ executable +>>(0x3c.l+24) leshort 0x0107 ROM image +>>(0x3c.l+24) default x Unknown PE signature +>>>&0 leshort x 0x%x +>>(0x3c.l+22) leshort&0x2000 >0 (DLL) +>>(0x3c.l+92) leshort 1 # Native PEs include ntoskrnl.exe, hal.dll, smss.exe, autochk.exe, and all the # drivers in Windows/System32/drivers/*.sys. ->>>>(0x3c.l+22) leshort&0x2000 >0 (native) +>>>(0x3c.l+22) leshort&0x2000 >0 (native) !:ext dll/sys ->>>>(0x3c.l+22) leshort&0x2000 0 (native) +>>>(0x3c.l+22) leshort&0x2000 0 (native) !:ext exe/sys ->>>(0x3c.l+92) leshort 2 ->>>>(0x3c.l+22) leshort&0x2000 >0 (GUI) +>>(0x3c.l+92) leshort 2 +>>>(0x3c.l+22) leshort&0x2000 >0 (GUI) # These could probably be at least partially distinguished from one another by # looking for specific exported functions. # CPL: Control Panel item @@ -92,80 +88,95 @@ # AX: DirectShow source filter # IME: Input method editor !:ext dll/cpl/tlb/ocx/acm/ax/ime ->>>>(0x3c.l+22) leshort&0x2000 0 (GUI) +>>>(0x3c.l+22) leshort&0x2000 0 (GUI) # Screen savers typically include code from the scrnsave.lib static library, but # that's not guaranteed. !:ext exe/scr ->>>(0x3c.l+92) leshort 3 ->>>>(0x3c.l+22) leshort&0x2000 >0 (console) +>>(0x3c.l+92) leshort 3 +>>>(0x3c.l+22) leshort&0x2000 >0 (console) !:ext dll/cpl/tlb/ocx/acm/ax/ime ->>>>(0x3c.l+22) leshort&0x2000 0 (console) +>>>(0x3c.l+22) leshort&0x2000 0 (console) !:ext exe/com ->>>(0x3c.l+92) leshort 7 (POSIX) ->>>(0x3c.l+92) leshort 9 (Windows CE) ->>>(0x3c.l+92) leshort 10 (EFI application) ->>>(0x3c.l+92) leshort 11 (EFI boot service driver) ->>>(0x3c.l+92) leshort 12 (EFI runtime driver) ->>>(0x3c.l+92) leshort 13 (EFI ROM) ->>>(0x3c.l+92) leshort 14 (XBOX) ->>>(0x3c.l+92) leshort 15 (Windows boot application) ->>>(0x3c.l+92) default x (Unknown subsystem ->>>>&0 leshort x 0x%x) ->>>(0x3c.l+4) leshort 0x14c Intel 80386 ->>>(0x3c.l+4) leshort 0x166 MIPS R4000 ->>>(0x3c.l+4) leshort 0x168 MIPS R10000 ->>>(0x3c.l+4) leshort 0x184 Alpha ->>>(0x3c.l+4) leshort 0x1a2 Hitachi SH3 ->>>(0x3c.l+4) leshort 0x1a6 Hitachi SH4 ->>>(0x3c.l+4) leshort 0x1c0 ARM ->>>(0x3c.l+4) leshort 0x1c2 ARM Thumb ->>>(0x3c.l+4) leshort 0x1c4 ARMv7 Thumb ->>>(0x3c.l+4) leshort 0x1f0 PowerPC ->>>(0x3c.l+4) leshort 0x200 Intel Itanium ->>>(0x3c.l+4) leshort 0x266 MIPS16 ->>>(0x3c.l+4) leshort 0x268 Motorola 68000 ->>>(0x3c.l+4) leshort 0x290 PA-RISC ->>>(0x3c.l+4) leshort 0x366 MIPSIV ->>>(0x3c.l+4) leshort 0x466 MIPS16 with FPU ->>>(0x3c.l+4) leshort 0xebc EFI byte code ->>>(0x3c.l+4) leshort 0x8664 x86-64 ->>>(0x3c.l+4) leshort 0xc0ee MSIL ->>>(0x3c.l+4) default x Unknown processor type ->>>>&0 leshort x 0x%x ->>>(0x3c.l+22) leshort&0x0200 >0 (stripped to external PDB) ->>>(0x3c.l+22) leshort&0x1000 >0 system file ->>>(0x3c.l+24) leshort 0x010b ->>>>(0x3c.l+232) lelong >0 Mono/.Net assembly ->>>(0x3c.l+24) leshort 0x020b ->>>>(0x3c.l+248) lelong >0 Mono/.Net assembly +# https://docs.microsoft.com/en-us/windows/win32/debug/pe-format +>>(0x3c.l+92) leshort 7 (POSIX) +>>(0x3c.l+92) leshort 9 (Windows CE) +>>(0x3c.l+92) leshort 10 (EFI application) +>>(0x3c.l+92) leshort 11 (EFI boot service driver) +>>(0x3c.l+92) leshort 12 (EFI runtime driver) +>>(0x3c.l+92) leshort 13 (EFI ROM) +>>(0x3c.l+92) leshort 14 (XBOX) +>>(0x3c.l+92) leshort 15 (Windows boot application) +>>(0x3c.l+92) default x (Unknown subsystem +>>>&0 leshort x 0x%x) +>>(0x3c.l+4) leshort 0x14c Intel 80386 +>>(0x3c.l+4) leshort 0x166 MIPS R4000 +>>(0x3c.l+4) leshort 0x168 MIPS R10000 +>>(0x3c.l+4) leshort 0x184 Alpha +>>(0x3c.l+4) leshort 0x1a2 Hitachi SH3 +>>(0x3c.l+4) leshort 0x1a3 Hitachi SH3 DSP +>>(0x3c.l+4) leshort 0x1a8 Hitachi SH5 +>>(0x3c.l+4) leshort 0x169 MIPS WCE v2 +>>(0x3c.l+4) leshort 0x1a6 Hitachi SH4 +>>(0x3c.l+4) leshort 0x1c0 ARM +>>(0x3c.l+4) leshort 0x1c2 ARM Thumb +>>(0x3c.l+4) leshort 0x1c4 ARMv7 Thumb +>>(0x3c.l+4) leshort 0x1d3 Matsushita AM33 +>>(0x3c.l+4) leshort 0x1f0 PowerPC +>>(0x3c.l+4) leshort 0x1f1 PowerPC with FPU +>>(0x3c.l+4) leshort 0x200 Intel Itanium +>>(0x3c.l+4) leshort 0x266 MIPS16 +>>(0x3c.l+4) leshort 0x268 Motorola 68000 +>>(0x3c.l+4) leshort 0x290 PA-RISC +>>(0x3c.l+4) leshort 0x366 MIPSIV +>>(0x3c.l+4) leshort 0x466 MIPS16 with FPU +>>(0x3c.l+4) leshort 0xebc EFI byte code +>>(0x3c.l+4) leshort 0x5032 RISC-V 32-bit +>>(0x3c.l+4) leshort 0x5064 RISC-V 64-bit +>>(0x3c.l+4) leshort 0x5128 RISC-V 128-bit +>>(0x3c.l+4) leshort 0x9041 Mitsubishi M32R +>>(0x3c.l+4) leshort 0x8664 x86-64 +>>(0x3c.l+4) leshort 0xaa64 Aarch64 +>>(0x3c.l+4) leshort 0xc0ee MSIL +>>(0x3c.l+4) default x Unknown processor type +>>>&0 leshort x 0x%x +>>(0x3c.l+22) leshort&0x0200 >0 (stripped to external PDB) +>>(0x3c.l+22) leshort&0x1000 >0 system file +>>(0x3c.l+24) leshort 0x010b +>>>(0x3c.l+232) lelong >0 Mono/.Net assembly +>>(0x3c.l+24) leshort 0x020b +>>>(0x3c.l+248) lelong >0 Mono/.Net assembly # hooray, there's a DOS extender using the PE format, with a valid PE # executable inside (which just prints a message and exits if run in win) ->>>(8.s*16) string 32STUB \b, 32rtm DOS extender ->>>(8.s*16) string !32STUB \b, for MS Windows ->>>(0x3c.l+0xf8) string UPX0 \b, UPX compressed ->>>(0x3c.l+0xf8) search/0x140 PEC2 \b, PECompact2 compressed ->>>(0x3c.l+0xf8) search/0x140 UPX2 ->>>>(&0x10.l+(-4)) string PK\3\4 \b, ZIP self-extracting archive (Info-Zip) ->>>(0x3c.l+0xf8) search/0x140 .idata ->>>>(&0xe.l+(-4)) string PK\3\4 \b, ZIP self-extracting archive (Info-Zip) ->>>>(&0xe.l+(-4)) string ZZ0 \b, ZZip self-extracting archive ->>>>(&0xe.l+(-4)) string ZZ1 \b, ZZip self-extracting archive ->>>(0x3c.l+0xf8) search/0x140 .rsrc ->>>>(&0x0f.l+(-4)) string a\\\4\5 \b, WinHKI self-extracting archive ->>>>(&0x0f.l+(-4)) string Rar! \b, RAR self-extracting archive ->>>>(&0x0f.l+(-4)) search/0x3000 MSCF \b, InstallShield self-extracting archive ->>>>(&0x0f.l+(-4)) search/32 Nullsoft \b, Nullsoft Installer self-extracting archive ->>>(0x3c.l+0xf8) search/0x140 .data ->>>>(&0x0f.l) string WEXTRACT \b, MS CAB-Installer self-extracting archive ->>>(0x3c.l+0xf8) search/0x140 .petite\0 \b, Petite compressed ->>>>(0x3c.l+0xf7) byte x ->>>>>(&0x104.l+(-4)) string =!sfx! \b, ACE self-extracting archive ->>>(0x3c.l+0xf8) search/0x140 .WISE \b, WISE installer self-extracting archive ->>>(0x3c.l+0xf8) search/0x140 .dz\0\0\0 \b, Dzip self-extracting archive ->>>&(0x3c.l+0xf8) search/0x100 _winzip_ \b, ZIP self-extracting archive (WinZip) ->>>&(0x3c.l+0xf8) search/0x100 SharedD \b, Microsoft Installer self-extracting archive ->>>0x30 string Inno \b, InnoSetup self-extracting archive +>>(8.s*16) string 32STUB \b, 32rtm DOS extender +>>(8.s*16) string !32STUB \b, for MS Windows +>>(0x3c.l+0xf8) string UPX0 \b, UPX compressed +>>(0x3c.l+0xf8) search/0x140 PEC2 \b, PECompact2 compressed +>>(0x3c.l+0xf8) search/0x140 UPX2 +>>>(&0x10.l+(-4)) string PK\3\4 \b, ZIP self-extracting archive (Info-Zip) +>>(0x3c.l+0xf8) search/0x140 .idata +>>>(&0xe.l+(-4)) string PK\3\4 \b, ZIP self-extracting archive (Info-Zip) +>>>(&0xe.l+(-4)) string ZZ0 \b, ZZip self-extracting archive +>>>(&0xe.l+(-4)) string ZZ1 \b, ZZip self-extracting archive +>>(0x3c.l+0xf8) search/0x140 .rsrc +>>>(&0x0f.l+(-4)) string a\\\4\5 \b, WinHKI self-extracting archive +>>>(&0x0f.l+(-4)) string Rar! \b, RAR self-extracting archive +>>>(&0x0f.l+(-4)) search/0x3000 MSCF \b, InstallShield self-extracting archive +>>>(&0x0f.l+(-4)) search/32 Nullsoft \b, Nullsoft Installer self-extracting archive +>>(0x3c.l+0xf8) search/0x140 .data +>>>(&0x0f.l) string WEXTRACT \b, MS CAB-Installer self-extracting archive +>>(0x3c.l+0xf8) search/0x140 .petite\0 \b, Petite compressed +>>>(0x3c.l+0xf7) byte x +>>>>(&0x104.l+(-4)) string =!sfx! \b, ACE self-extracting archive +>>(0x3c.l+0xf8) search/0x140 .WISE \b, WISE installer self-extracting archive +>>(0x3c.l+0xf8) search/0x140 .dz\0\0\0 \b, Dzip self-extracting archive +>>&(0x3c.l+0xf8) search/0x100 _winzip_ \b, ZIP self-extracting archive (WinZip) +>>&(0x3c.l+0xf8) search/0x100 SharedD \b, Microsoft Installer self-extracting archive +>>0x30 string Inno \b, InnoSetup self-extracting archive + +# If the relocation table is 0x40 or more bytes into the file, it's definitely +# not a DOS EXE. +>0x18 leshort >0x3f # Hmm, not a PE but the relocation table is too high for a traditional DOS exe, # must be one of the unusual subformats. @@ -647,16 +658,84 @@ >30 byte 12 (4kB sectors) # Popular applications -2080 string Microsoft\ Word\ 6.0\ Document %s -!:mime application/msword -2080 string Documento\ Microsoft\ Word\ 6 Spanish Microsoft Word 6 document data -!:mime application/msword -# Pawel Wiecek (for polish Word) -2112 string MSWordDoc Microsoft Word document data -!:mime application/msword # -0 belong 0x31be0000 Microsoft Word Document +# Update: Joerg Jenderek +# URL: http://fileformats.archiveteam.org/wiki/DOC +# Reference: https://web.archive.org/web/20170206041048/ +# http://www.msxnet.org/word2rtf/formats/ffh-dosword5 +# wIdent+dty +0 belong 0x31be0000 +# skip droid skeleton like x-fmt-274-signature-id-488.doc +>128 ubyte >0 Microsoft +>>96 uleshort =0 Word !:mime application/msword +!:apple MSWDWDBN +# DCX is used in the Unix version. +!:ext doc/dcx +>>>0x6E ulequad =0 1.0-4.0 +>>>0x6E ulequad !0 5.0-6.0 +>>>0x6E ulequad x (DOS) Document +# https://web.archive.org/web/20130831064118/http://msxnet.org/word2rtf/formats/write.txt +>>96 uleshort !0 Write 3.0 (Windows) Document +!:mime application/x-mswrite +!:apple MSWDWDBN +# sometimes also doc like in splitter.doc srchtest.doc +!:ext wri/doc +# wTool must be 0125400 octal +#>>4 uleshort !0xAB00 \b, wTool %o +# reserved; must be zero +#>>6 ulelong !0 \b, reserved %u +# block pointer to the block containing optional file manager information +#>>0x1C uleshort x \b, at 0x%x info block +# jump to File manager information block +>>(0x1C.s*128) uleshort x +# test for valid information start; maybe also 0012h +>>>&-2 uleshort =0x0014 +# Document ASCIIZ name +>>>>&0x12 string x %s +# author name +>>>>>&1 string x \b, author %s +# reviser name +>>>>>>&1 string x \b, reviser %s +# keywords +>>>>>>>&1 string x \b, keywords %s +# comment +>>>>>>>>&1 string x \b, comment %s +# version number +>>>>>>>>>&1 string x \b, version %s +# date of last change MM/DD/YY +>>>>>>>>>>&1 string x \b, %-.8s +# creation date MM/DD/YY +>>>>>>>>>>&9 string x created %-.8s +# file name of print format like NORMAL.STY +>>0x1E string >0 \b, formatted by %-.66s +# count of pages in whole file for write variant; maybe some times wrong +>>96 uleshort >0 \b, %u pages +# name of the printer driver like HPLASMS +>>0x62 string >0 \b, %-.8s printer +# number of blocks used in the file; seems to be 0 for Word 4.0 and Write 3.0 +>>0x6A uleshort >0 \b, %u blocks +# bit field for corrected text areas +#>>0x6C uleshort x \b, 0x%x bit field +# text of document; some times start with 4 non printable characters like CR LF +>>128 ubyte x \b, +>>>128 ubyte >0x1F +>>>>128 string x %s +>>>128 ubyte <0x20 +>>>>129 ubyte >0x1F +>>>>>129 string x %s +>>>>129 ubyte <0x20 +>>>>>130 ubyte >0x1F +>>>>>>130 string x %s +>>>>>130 ubyte <0x20 +>>>>>>131 ubyte >0x1F +>>>>>>>131 string x %s +>>>>>>131 ubyte <0x20 +>>>>>>>132 ubyte >0x1F +>>>>>>>>132 string x %s +>>>>>>>132 ubyte <0x20 +>>>>>>>>133 ubyte >0x1F +>>>>>>>>>133 string x %s # 0 string/b PO^Q` Microsoft Word 6.0 Document !:mime application/msword @@ -686,23 +765,15 @@ 0 string/b \xDB\xA5\x2D\x00 Microsoft WinWord 2.0 Document !:mime application/msword # -2080 string Microsoft\ Excel\ 5.0\ Worksheet %s -!:mime application/vnd.ms-excel -# 0 string/b \xDB\xA5\x2D\x00 Microsoft WinWord 2.0 Document !:mime application/msword -2080 string Foglio\ di\ lavoro\ Microsoft\ Exce %s -!:mime application/vnd.ms-excel # -# Pawel Wiecek (for polish Excel) -2114 string Biff5 Microsoft Excel 5.0 Worksheet -!:mime application/vnd.ms-excel -# Italian MS-Excel -2121 string Biff5 Microsoft Excel 5.0 Worksheet -!:mime application/vnd.ms-excel 0 string/b \x09\x04\x06\x00\x00\x00\x10\x00 Microsoft Excel Worksheet !:mime application/vnd.ms-excel +# https://www.macdisk.com/macsigen.php +!:apple XCELXLS4 +!:ext xls # # Update: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/Lotus_1-2-3 @@ -901,10 +972,6 @@ # windows zips files .dmf 0 string/b MDIF\032\000\010\000\000\000\372\046\100\175\001\000\001\036\001\000 MS Windows special zipped file - -#ico files -0 string/b \102\101\050\000\000\000\056\000\000\000\000\000\000\000 Icon for MS Windows - # Windows icons # Update: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/CUR_(file_format) @@ -1397,9 +1464,6 @@ 0 string/b \224\246\056 Microsoft Word Document !:mime application/msword -512 string R\0o\0o\0t\0\ \0E\0n\0t\0r\0y Microsoft Word Document -!:mime application/msword - # From: "Nelson A. de Oliveira" # Magic type for Dell's BIOS .hdr files # Dell's .hdr diff --git a/magic/Magdir/msooxml b/magic/Magdir/msooxml index 194cf53fe24..620d5e132f0 100644 --- a/magic/Magdir/msooxml +++ b/magic/Magdir/msooxml @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: msooxml,v 1.12 2019/04/19 00:42:27 christos Exp $ +# $File: msooxml,v 1.13 2019/11/27 13:12:55 christos Exp $ # msooxml: file(1) magic for Microsoft Office XML # From: Ralf Brown @@ -19,6 +19,8 @@ !:mime application/vnd.openxmlformats-officedocument.presentationml.presentation >0 string xl/ Microsoft Excel 2007+ !:mime application/vnd.openxmlformats-officedocument.spreadsheetml.sheet +0 string visio/ Microsoft Visio 2013+ +!:mime application/vnd.ms-visio.drawing.main+xml # start by checking for ZIP local file header signature 0 string PK\003\004 diff --git a/magic/Magdir/ole2compounddocs b/magic/Magdir/ole2compounddocs index f4046cc97fc..a59b023f4f5 100644 --- a/magic/Magdir/ole2compounddocs +++ b/magic/Magdir/ole2compounddocs @@ -1,33 +1,471 @@ #------------------------------------------------------------------------------ -# $File: ole2compounddocs,v 1.6 2019/04/19 00:42:27 christos Exp $ +# $File: ole2compounddocs,v 1.7 2019/08/02 18:08:18 christos Exp $ # Microsoft OLE 2 Compound Documents : file(1) magic for Microsoft Structured # storage (https://en.wikipedia.org/wiki/Compound_File_Binary_Format) # Additional tests for OLE 2 Compound Documents should be under this recipe. +# reference: https://www.openoffice.org/sc/compdocfileformat.pdf -0 string \320\317\021\340\241\261\032\341 OLE 2 Compound Document -# - Microstation V8 DGN files (www.bentley.com) -# Last update on 10/23/2006 by Lester Hightower -> 0x480 string D\000g\000n\000~\000H : Microstation V8 DGN -# - Visio documents -# Last update on 10/23/2006 by Lester Hightower -> 0x480 string V\000i\000s\000i\000o\000D\000o\000c : Visio Document - -# Note: moved & merged Microsoft Office parts from ./msdos Oct 2017 -# Update: Joerg Jenderek -# from https://filext.com by Derek M Jones -# False positive with PPT (also currently this string is too long) -#0 string/b \xD0\xCF\x11\xE0\xA1\xB1\x1A\xE1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3E\x00\x03\x00\xFE\xFF\x09\x00\x06 Microsoft Installer -#0 string/b \320\317\021\340\241\261\032\341 Microsoft Office Document -#>48 byte 0x1B Excel Document -#!:mime application/vnd.ms-excel ->546 string bjbj : Microsoft Word Document -!:mime application/msword -# https://www.macdisk.com/macsigen.php -!:apple MSWDWDBN -!:ext doc/dot ->546 string jbjb : Microsoft Word Document +0 string \320\317\021\340\241\261\032\341 +# https://digital-preservation.github.io/droid/ +# skip droid skeleton like fmt-39-signature-id-128.doc by valid version +>0x1A ushort !0xABAB OLE 2 Compound Document +#>0x1C uleshort x \b, endnian 0x%4.4x +# big endian not tested +>>0x1C ubeshort =0xfffe \b, big-endian +>>>546 string jbjb : Microsoft Word Document !:mime application/msword !:apple MSWDWDBN !:ext doc +# Byte Order 0xFFFE means little-endian found in real world applications +#>>0x1C uleshort =0xfffe \b, little-endian +>>0x1C uleshort =0xfffe +# From: Joerg Jenderek +# Major Version 3 or 4 +>>>0x1A uleshort x \b, v%u +# Minor Version 32h=50 3Bh=59 3Eh=62 +>>>0x18 uleshort x \b.%u +# SecID of first sector of the directory stream is often 1 but high like 3144h +>>>48 ulelong x \b, SecID 0x%x +# pointer to root entry only works with standard configuration for SecID ~< 800h +# Red-Carpet-presentation-1.0-1.sdd sg10.sdv 2000_GA_Annual_Review_Data.xls +# "ORLEN Factbook 2017.xls" XnView_metadata.doc +# "Barham, Lisa - Die Shopping-Prinzessinnen.doc" then not recognized +>>>48 ulelong >0x800 too big for FILE_BYTES_MAX = 1 MiB +# Sector Shift Exponent 9~512 for major version 3 or C~4096 for major version 4 +>>>0x1E uleshort 0xc \b, blocksize 4096 +# jump to one block (4096 bytes per block) before root storage block +>>>>(48.l*4096) ubyte x +>>>>>&4095 use ole2-directory +#>>>0x1E uleshort 9 \b, blocksize 512 +>>>0x1E uleshort 9 +# jump to one block (512 bytes per block) before root storage block +# in 5.37 only true for offset ~< FILE_BYTES_MAX=7 MiB defined in ../../src/file.h +>>>>(48.l*512) ubyte x +>>>>>&511 use ole2-directory +# check directory entry structure and display types by GUID +0 name ole2-directory +# directory entry name like "Root Entry" +#>0 lestring16 x \b, 1st %.10s +# type of the entry; 5~Root storage +#>66 ubyte x \b, type %x +# node colour of the entry: 00H ~ Red 01H ~ Black +#>67 ubyte x \b, color %x +# the DirIDs of the child nodes. Should both be –1 in the root storage entry +#>68 bequad !0xffffffffffffffff \b, DirIDs %llx +# second directory entry name like VisioDocument Control000 +#>128 lestring16 x \b, 2nd %.20s +# third directory entry like WordDocument +#>256 lestring16 x \b, 3rd %.20s +# forth +#>384 lestring16 x \b, 4th %.10s +# 5th +#>512 lestring16 x \b, 5th %.10s +# 6th +#>640 lestring16 x \b, 6th %.10s +# 7th +#>768 lestring16 x \b, 7th %.10s +# https://wikileaks.org/ciav7p1/cms/page_13762814.html +# https://m.blog.naver.com/superman4u/40047693679 +# https://misc.daniel-marschall.de/projects/guid_analysis/guid.txt +# http://www.windowstricks.in/online-windows-guid-converter +#>80 ubequad !0 \b, clsid 0x%16.16llx +#>>88 ubequad x \b%16.16llx +# test for "Root Entry" inside directory by type 5 value +>66 ubyte 5 +# look for CLSID GUID 0 +>>88 ubequad 0x0 +>>>80 ubequad 0x0 +# - Microstation V8 DGN files (www.bentley.com) +# URL: https://en.wikipedia.org/wiki/MicroStation +# Last update on 10/23/2006 by Lester Hightower +# 07/24/2019 by Joerg Jenderek +# Second directory entry name like Dgn~H Dgn~S +>>>>128 lestring16 Dgn~ : Microstation V8 CAD +#!:mime application/x-ole-storage +!:mime application/x-bentley-dgn +# http://www.q-cad.com/files/samples_cad_files/1344468165.dgn +!:ext dgn +# +# URL: http://fileformats.archiveteam.org/wiki/WordPerfect +# Second directory entry name PerfectOffice_ +>>>>128 lestring16 PerfectOffice_ : WordPerfect 7-X3 presentations Master, Document or Graphic +!:mime application/vnd.wordperfect +# https://www.macdisk.com/macsigen.php "WPC2" for Wordperfect 2 *.wpd +!:apple ????WPC7 +!:ext mst/wpd/wpg +# +# URL: http://fileformats.archiveteam.org/wiki/Microsoft_Works_Word_Processor +# Second directory entry name MatOST_ +>>>>128 lestring16 MatOST : Microsoft Works 3.0 document +!:mime application/vnd.ms-works +!:apple ????AWWP +!:ext wps +# +# URL: http://fileformats.archiveteam.org/wiki/Microsoft_Works_Spreadsheet +# 3rd directory entry name WksSSWorkBook +>>>>256 lestring16 WksSSWorkBook : Microsoft Works 6-9 spreadsheet +!:mime application/vnd.ms-works +!:apple ????AWSS +!:ext xlr +# +# URL: http://fileformats.archiveteam.org/wiki/XLS +# what is the difference to {00020820-0000-0000-c000-000000000046} ? +# Second directory entry name Workbook +>>>>128 lestring16 Workbook +>>>>>256 lestring16 !WksSSWorkBook : Microsoft Excel 97-2003 worksheet 0 clsid +!:mime application/vnd.ms-excel +# https://www.macdisk.com/macsigen.php XLS5 for Excel 5 +!:apple ????XLS9 +!:ext xls +# +# URL: http://fileformats.archiveteam.org/wiki/PPT +# Second directory entry name Object1 Object12 Object35 +>>>>128 lestring16 Object : Microsoft PowerPoint 4 presentation +!:mime application/vnd.ms-powerpoint +# https://www.macdisk.com/macsigen.php +!:apple ????PPT3 +!:ext ppt +# +# URL: https://www.msoutlook.info/question/164 +# Second directory entry name __CollDataStm +>>>>128 lestring16 __CollDataStm : Microsoft Outlook Send Receive Settings +#!:mime application/vnd.ms-outlook +!:mime application/x-ms-srs +# %APPDATA%\Microsoft\Outlook\Outlook.srs +!:ext srs +# +# URL: https://www.file-extensions.org/cag-file-extension +# Second directory entry name Category +>>>>128 lestring16 Category : Microsoft Clip Art Gallery +#!:mime application/x-ole-storage +!:mime application/x-ms-cag +!:apple MScgCGdb +!:ext cag/ +# +# URL: https://www.filesuffix.com/de/extension/rra +# 3rd directory entry name StrIndex_StringTable +>>>>256 lestring16 StrIndex_StringTable : Windows temporarily installer +#!:mime application/x-ole-storage +!:mime application/x-ms-rra +!:ext rra +# +# URL: https://www.forensicswiki.org/wiki/Jump_Lists +# 3rd directory entry name DestList +>>>>256 lestring16 DestList : Windows jump list +#!:mime application/x-ole-storage +!:mime application/x-ms-jumplist +# %APPDATA%\Microsoft\Windows\Recent\AutomaticDestinations\*.automaticDestinations-ms +!:ext automaticDestinations-ms +# +# URL: https://en.wikipedia.org/wiki/Windows_thumbnail_cache +# Second directory entry name 256_ +>>>>128 lestring16 256_ : Windows thumbnail database 256 +#!:mime application/x-ole-storage +!:mime application/x-ms-thumbnail +# Thumbs.db +!:ext db +>>>>128 lestring16 96_ : Windows thumbnail database 96 +!:mime application/x-ms-thumbnail +!:ext db +# 3rd directory entry name Catalog_ +>>>>256 lestring16 Catalog : Windows thumbnail database +!:mime application/x-ms-thumbnail +!:ext db +# +# URL: https://support.microsoft.com/en-us/help/300887/how-to-use-system-information-msinfo32-command-line-tool-switches +# Note: older Microsoft Systeminfo (MSInfo Configuration File of msinfo32); newer use xml based +# Second directory entry name Control000 +>>>>128 lestring16 Control000 : Microsoft old Systeminfo +#!:mime application/x-ole-storage +!:mime application/x-ms-info +!:ext nfo +# +# URL: http://fileformats.archiveteam.org/wiki/Corel_Print_House +# Second directory entry name Thumbnail +>>>>128 lestring16 Thumbnail : Corel PrintHouse image +#!:mime application/x-ole-storage +!:mime application/x-corel-cph +!:ext cph +# 3rd directory entry name Thumbnail +>>>>256 lestring16 Thumbnail : Corel PrintHouse image +!:mime application/x-corel-cph +!:ext cph +# +# URL: https://en.wikipedia.org/wiki/Hangul_(word_processor) +# Note: "HWP Document File" signature found in FileHeader +# Second directory entry name FileHeader hint for Thinkfree Office document +>>>>128 lestring16 FileHeader : Hangul (Korean) 5.0 Word Processor File +#!:mime application/haansofthwp +!:mime application/x-hwp +# https://example-files.online-convert.com/document/hwp/example.hwp +!:ext hwp +# +# URL: https://ask.libreoffice.org/en/question/26303/creating-new-themes-for-the-gallery-not-functioning/ +# Second directory entry name like dd2000 dd2001 dd2036 dd2060 dd2083 +>>>>128 lestring16 dd2 : StarOffice Gallery view +#!:mime application/x-ole-storage +!:mime application/x-star-sdv +!:ext sdv +# remaining null clsid +>>>>128 default x : UNKNOWN +!:mime application/x-ole-storage +# look for known clsid GUID +# - Visio documents +# URL: http://fileformats.archiveteam.org/wiki/Visio +# Last update on 10/23/2006 by Lester Hightower, 07/20/2019 by Joerg Jenderek +>>88 ubequad 0xc000000000000046 : Microsoft +>>>80 ubequad 0x131a020000000000 Visio 2000-2002 Document, stencil or template +!:mime application/vnd.visio +# VSD~Drawing VSS~Stencil VST~Template +!:ext vsd/vss/vst +>>>80 ubequad 0x141a020000000000 Visio 2003-2010 Document, stencil or template +!:mime application/vnd.visio +!:ext vsd/vss/vst +# +# URL: http://fileformats.archiveteam.org/wiki/Windows_Installer +>>>80 ubequad 0x84100c0000000000 Windows Installer Package +!:mime application/x-msi +#!:mime application/x-ms-win-installer +!:ext msi +>>>80 ubequad 0x86100c0000000000 Windows Installer Patch +# ?? +!:mime application/x-wine-extension-msp +#!:mime application/x-ms-msp +!:ext msp +# +# URL: http://fileformats.archiveteam.org/wiki/DOC +>>>80 ubequad 0x0009020000000000 Word 6-95 document or template +!:mime application/msword +# for template MSWDW8TN +!:apple MSWDWDBN +!:ext doc/dot +>>>80 ubequad 0x0609020000000000 Word 97-2003 document or template +!:mime application/msword +!:apple MSWDWDBN +# dot for template; no extension on Macintosh +!:ext doc/dot/ +# +# URL: http://fileformats.archiveteam.org/wiki/Microsoft_Works_Word_Processor +>>>80 ubequad 0x0213020000000000 Works 3-4 document or template +!:mime application/vnd.ms-works +!:apple ????AWWP +# ps for template https://filext.com/file-extension/PS bps for backup +!:ext wps/ps/bps +# +# URL: http://fileformats.archiveteam.org/wiki/Microsoft_Works_Database +>>>80 ubequad 0x0313020000000000 Works 3-4 database or template +!:mime application/vnd.ms-works-db +# https://www.macdisk.com/macsigen.php +!:apple ????AWDB +# db for template www.file-extensions.org/db-file-extension-microsoft-works-data bdb for backup +!:ext wdb/db/bdb +# +# URL: https://en.wikipedia.org/wiki/Microsoft_Excel +>>>80 ubequad 0x1008020000000000 Excel 5-95 worksheet, addin or template +!:mime application/vnd.ms-excel +# https://www.macdisk.com/macsigen.php +!:apple ????XLS5 +# worksheet/addin/template/no extension on Macintosh +!:ext xls/xla/xlt/ +# +>>>80 ubequad 0x2008020000000000 Excel 97-2003 +!:mime application/vnd.ms-excel +# https://www.macdisk.com/macsigen.php XLS5 for Excel 5 +!:apple ????XLS9 +# 3nd directory entry name +>>>>256 lestring16 _VBA_PROJECT_CUR addin +!:ext xla/ +# 4th directory entry name +>>>>384 lestring16 _VBA_PROJECT_CUR addin +!:ext xla +#!:ext xla/ +>>>>256 default x worksheet or template +!:ext xls/xlt +#!:ext xls/xlt/ +# +# URL: http://fileformats.archiveteam.org/wiki/OLE2 +>>>80 ubequad 0x0b0d020000000000 Outlook 97-2003 item +#>>>80 ubequad 0x0b0d020000000000 Outlook 97-2003 Message +#!:mime application/vnd.ms-outlook +!:mime application/x-ms-msg +!:ext msg +# URL: https://wiki.fileformat.com/email/oft/ +>>>80 ubequad 0x46f0060000000000 Outlook 97-2003 item template +#!:mime application/vnd.ms-outlook +!:mime application/x-ms-oft +!:ext oft +# +# URL: http://fileformats.archiveteam.org/wiki/PPT +>>>80 ubequad 0x5148040000000000 PowerPoint 4.0 presentation +!:mime application/vnd.ms-powerpoint +# https://www.macdisk.com/macsigen.php +!:apple ????PPT3 +!:ext ppt +#?? +# URL: http://www.checkfilename.com/view-details/Microsoft-Works/RespageIndex/0/sTab/2/ +>>88 ubequad 0xa29a00aa004a1a72 : Microsoft +# URL: http://fileformats.archiveteam.org/wiki/Microsoft_Works_Word_Processor +>>>80 ubequad 0xc2dbcd28e20ace11 Works 4 document +!:mime application/vnd.ms-works +!:apple ????AWWP +!:ext wps +# +# URL: http://fileformats.archiveteam.org/wiki/Microsoft_Works_Database +>>>80 ubequad 0xc3dbcd28e20ace11 Works 4 database +!:mime application/vnd.ms-works-db +!:apple ????AWDB +!:ext wdb/bdb +#?? +>>88 ubequad 0xa40700c04fb932ba : Microsoft +# URL: http://fileformats.archiveteam.org/wiki/Microsoft_Works_Word_Processor +>>>80 ubequad 0xb25aa40e0a9ed111 Works 5-6 document +!:mime application/vnd.ms-works +!:apple ????AWWP +!:ext wps +#?? +# URL: http://fileformats.archiveteam.org/wiki/Microsoft_Publisher +>>88 ubequad 0x00c0000000000046 : Microsoft +>>>80 ubequad 0x0112020000000000 Publisher +!:mime application/vnd.ms-publisher +!:ext pub +# +# URL: http://fileformats.archiveteam.org/wiki/PPT +#?? +>>88 ubequad 0xa90300aa00510ea3 : Microsoft +>>>80 ubequad 0x70ae7bea3bfbcd11 PowerPoint 95 presentation +!:mime application/vnd.ms-powerpoint +# https://www.macdisk.com/macsigen.php +!:apple ????PPT3 +!:ext ppt/pot +#?? +>>88 ubequad 0x86ea00aa00b929e8 : Microsoft +>>>80 ubequad 0x108d81649b4fcf11 PowerPoint 97-2003 presentation or template +!:mime application/vnd.ms-powerpoint +!:apple ????PPT3 +# /autostart/template +!:ext ppt/pps/pot +# +# URL: https://en.wikipedia.org/wiki/Microsoft_Project +#?? +>>88 ubequad 0xbe1100c04fb6faf1 : Microsoft +>>>80 ubequad 0x3a8fb774c8c8d111 Project +!:mime application/vnd.ms-project +!:ext mpp +# +# URL: http://fileformats.archiveteam.org/wiki/SHW_(Corel) +#??? +>>88 ubequad 0x99ae04021c007002 : WordPerfect +>>>80 ubequad 0x62fe2e4099191b10 7-X3 presentation +!:mime application/x-corelpresentations +#!:mime application/x-shw-viewer +#!:mime image/x-presentations +!:ext shw +# +# URL: http://www.checkfilename.com/view-details/WordPerfect-Office-X3/RespageIndex/0/sTab/2/ +>>>80 ubequad 0x60fe2e4099191b10 9 Graphic +#!:mime application/x-wpg +#!:mime image/x-wordperfect-graphics +!:mime image/x-wpg +# https://www.macdisk.com/macsigen.php "WPC2" for Wordperfect 2 *.wpd +!:apple ????WPC9 +!:ext wpg +# +# URL: http://fileformats.archiveteam.org/wiki/StarOffice_binary_formats +>>88 ubequad 0x996104021c007002 : StarOffice +>>>80 ubequad 0x407e5cdc5cb31b10 StarWriter 3.0 document or template +# https://www.openoffice.org/framework/documentation/mimetypes/mimetypes.html +!:mime application/x-starwriter +!:ext sdw/vor +# +>>>80 ubequad 0xa03f543fa6b61b10 StarCalc 3.0 spreadsheet or template +!:mime application/x-starcalc +!:ext sdc/vor +# +>>>80 ubequad 0xe0aa10af6db31b10 StarDraw 3.0 drawing or template +!:mime application/x-starimpress +#!:mime application/x-stardraw +# sda ?? +!:ext sdd/sda/vor +#?? +>>88 ubequad 0x89cb008029e4b0b1 : StarOffice +>>>80 ubequad 0x41d461633542d011 StarCalc 4.0 spreadsheet or template +!:mime application/x-starcalc +!:ext sdc/vor +# +>>>80 ubequad 0x61b8a5c6d685d111 StarCalc 5.0 spreadsheet or template +!:mime application/vnd.stardivision.cal +!:ext sdc/vor +# +>>>80 ubequad 0xc03c2d011642d011 StarImpress 4.0 presentation or template +!:mime application/x-starimpress +!:ext sdd/vor +#?? +>>88 ubequad 0xb12a04021c007002 : StarOffice +>>>80 ubequad 0x600459d4fd351c10 StarMath 3.0 +!:mime application/x-starmath +!:ext smf +#?? +>>88 ubequad 0x8e2c00001b4cc711 : StarOffice +>>>80 ubequad 0xe0999cfb6d2c1c10 StarChart 3.0 +!:mime application/x-starchart +!:ext sds +#?? +>>88 ubequad 0xa45e00a0249d57b1 : StarOffice +>>>80 ubequad 0xb0e9048b0e42d011 StarWriter 4.0 document or template +!:mime application/x-starwriter +!:ext sdw/vor +#?? +>>88 ubequad 0x89ca008029e4b0b1 : StarOffice +>>>80 ubequad 0xe1b7b3022542d011 StarMath 4.0 +!:mime application/x-starmath +!:ext smf +# +>>>80 ubequad 0xe0b7b3022542d011 StarChart 4.0 +!:mime application/x-starchart +!:ext sds +#?? +>>88 ubequad 0xa53f00a0249d57b1 : StarOffice +>>>80 ubequad 0x70c90a340de3d011 Master 4.0 document +!:mime application/x-starwriter-global +!:ext sgl +#?? +>>88 ubequad 0x89d0008029e4b0b1 : StarOffice +>>>80 ubequad 0x40e6b5ffde85d111 StarMath 5.0 +!:mime application/vnd.stardivision.math +!:ext smf +# +>>>80 ubequad 0xa005892ebd85d111 StarDraw 5.0 drawing or template +!:mime application/vnd.stardivision.draw +!:ext sda/vor +# +>>>80 ubequad 0x21725c56bc85d111 StarImpress 5.0 presentation or template +!:mime application/vnd.stardivision.impress +# sda is used for what? +!:ext sdd/vor/sda +# +>>>80 ubequad 0x214388bfdd85d111 StarChart 5.0 +!:mime application/vnd.stardivision.chart +!:ext sds +# ?? +>>88 ubequad 0xaab4006097da561a : StarOffice +>>>80 ubequad 0xd1f90cc2ae85d111 StarWriter 5.0 document or template +!:mime application/vnd.stardivision.writer +!:ext sdw/vor +# +>>>80 ubequad 0xd3f90cc2ae85d111 Master 5.0 document +!:mime application/vnd.stardivision.writer-global +!:ext sgl +#?? +# URL: http://fileformats.archiveteam.org/wiki/FlashPix +>>88 ubequad 0x855300aa00a1f95b : Kodak +>>>80 ubequad 0x0067615654c1ce11 FlashPIX Image +!:mime image/vnd.fpx +!:apple ????FPix +!:ext fpx +# remaining non null clsid +>>88 default x : UNKNOWN +!:mime application/x-ole-storage +>>>80 ubequad !0 \b, clsid 0x%16.16llx +>>>88 ubequad x \b%16.16llx diff --git a/magic/Magdir/openfst b/magic/Magdir/openfst new file mode 100644 index 00000000000..8df9b56b85e --- /dev/null +++ b/magic/Magdir/openfst @@ -0,0 +1,17 @@ + +#------------------------------------------------------------------------------ +# $File: openfst,v 1.1 2019/09/30 15:58:24 christos Exp $ +# openfs: file(1) magic for OpenFST (Weighted finite-state tranducer library) + +0 long 0x7eb2fdd6 OpenFst binary FST data +>&0 pstring/l x \b, fst type: %s +>>&0 pstring/l x \b, arc type: %s +>>>&0 long x \b, version: %d +>>>>&20 quad x \b, num states: %lld +>>>>>&0 quad >0 \b, num arcs: %lld + +0 long 0x56515c OpenFst binary FAR data, far type: stlist +>4 long x \b, version: %d + +0 long 0x7eb2f35c OpenFst binary FAR data, far type: sttable +>4 long x \b, version: %d diff --git a/magic/Magdir/opentimestamps b/magic/Magdir/opentimestamps new file mode 100644 index 00000000000..f2f0e3ec110 --- /dev/null +++ b/magic/Magdir/opentimestamps @@ -0,0 +1,16 @@ + +#------------------------------------------------------------ +# $File: opentimestamps,v 1.1 2019/05/27 01:27:31 christos Exp $ +# OpenTimestamps related magic entries +# https://opentimestamps.org/ +# https://en.wikipedia.org/wiki/OpenTimestamps +# "Emanuele Cisbani" +#------------------------------------------------------------ + +# OpenTimestamps Proof .ots format. +# Magic is defined here: +# https://github.com/opentimestamps/python-opentimestamps/\ +# blob/master/opentimestamps/core/timestamp.py#L273 + +0 string \x00\x4f\x70\x65\x6e\x54\x69\x6d\x65\x73\x74\x61\x6d\x70\x73\x00 OpenTimestamps +>16 string \x00\x50\x72\x6f\x6f\x66\x00\xbf\x89\xe2\xe8\x84\xe8\x92\x94\x01 Proof diff --git a/magic/Magdir/pdf b/magic/Magdir/pdf index 0a06dc9d5a5..5a67e86b5c3 100644 --- a/magic/Magdir/pdf +++ b/magic/Magdir/pdf @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: pdf,v 1.10 2018/05/23 22:21:01 christos Exp $ +# $File: pdf,v 1.11 2019/09/12 15:53:49 christos Exp $ # pdf: file(1) magic for Portable Document Format # @@ -16,6 +16,12 @@ >6 byte x \b, version %c >8 byte x \b.%c +0 string \xef\xbb\xbf%PDF- PDF document (UTF-8) +!:mime application/pdf +!:strength +60 +>6 byte x \b, version %c +>8 byte x \b.%c + # From: Nick Schmalenberger # Forms Data Format 0 string %FDF- FDF document diff --git a/magic/Magdir/pmem b/magic/Magdir/pmem new file mode 100644 index 00000000000..4c36275ea96 --- /dev/null +++ b/magic/Magdir/pmem @@ -0,0 +1,46 @@ + +#------------------------------------------------------------------------------ +# $File: pmem,v 1.3 2019/06/13 11:45:44 christos Exp $ +# pmem: file(1) magic for Persistent Memory Development Kit pool files +# +0 string PMEM +>4 string POOLSET Persistent Memory Poolset file +>>11 search REPLICA with replica +>4 regex LOG|BLK|OBJ Persistent Memory Pool file, type: %s, +>>8 lelong >0 version: 0x%x, +>>12 lelong x compat: 0x%x, +>>16 lelong x incompat: 0x%x, +>>20 lelong x ro_compat: 0x%x, + + +>>120 leqldate x crtime: %s, +>>128 lequad x alignment_desc: 0x%016llx, + +>>136 clear x +>>136 byte 2 machine_class: 64-bit, +>>136 default x machine_class: unknown +>>>136 byte x (0x%d), + +>>137 clear x +>>137 byte 1 data: little-endian, +>>137 byte 2 data: big-endian, +>>137 default x data: unknown +>>>137 byte x (0x%d), + +>>138 byte !0 reserved[0]: %d, +>>139 byte !0 reserved[1]: %d, +>>140 byte !0 reserved[2]: %d, +>>141 byte !0 reserved[3]: %d, + +>>142 clear x +>>142 leshort 62 machine: x86_64 +>>142 leshort 183 machine: aarch64 +>>142 default x machine: unknown +>>>142 leshort x (0x%d) + +>4 string BLK +>>4096 lelong x \b, blk.bsize: %d + +>4 string OBJ +>>4096 string >0 \b, obj.layout: '%s' +>>4096 string <0 \b, obj.layout: NULL diff --git a/magic/Magdir/python b/magic/Magdir/python index acf05dddbaa..4af3ffcf1f9 100644 --- a/magic/Magdir/python +++ b/magic/Magdir/python @@ -1,31 +1,44 @@ #------------------------------------------------------------------------------ -# $File: python,v 1.36 2019/04/09 18:28:25 christos Exp $ +# $File: python,v 1.37 2019/10/21 19:40:58 christos Exp $ # python: file(1) magic for python # # Outlook puts """ too for urgent messages # From: David Necas # often the module starts with a multiline string 0 string/t """ Python script text executable -# MAGIC as specified in Python/import.c (1.5 to 2.7a0 and 3.1a0, assuming -# that Py_UnicodeFlag is off for Python 2) +# MAGIC as specified in Python/import.c (1.0 to 3.7) # two bytes of magic followed by "\r\n" in little endian order -0 belong 0x994e0d0a python 1.5/1.6 byte-compiled +0 belong 0x02099900 python 1.0 byte-compiled +0 belong 0x03099900 python 1.1/1.2 byte-compiled +0 belong 0x892e0d0a python 1.3 byte-compiled +0 belong 0x04170d0a python 1.4 byte-compiled +0 belong 0x994e0d0a python 1.5 byte-compiled +0 belong 0xfcc40d0a python 1.6 byte-compiled +0 belong 0xfdc40d0a python 1.6 byte-compiled 0 belong 0x87c60d0a python 2.0 byte-compiled +0 belong 0x88c60d0a python 2.0 byte-compiled 0 belong 0x2aeb0d0a python 2.1 byte-compiled +0 belong 0x2beb0d0a python 2.1 byte-compiled 0 belong 0x2ded0d0a python 2.2 byte-compiled +0 belong 0x2eed0d0a python 2.2 byte-compiled 0 belong 0x3bf20d0a python 2.3 byte-compiled +0 belong 0x3cf20d0a python 2.3 byte-compiled 0 belong 0x6df20d0a python 2.4 byte-compiled +0 belong 0x6ef20d0a python 2.4 byte-compiled 0 belong 0xb3f20d0a python 2.5 byte-compiled +0 belong 0xb4f20d0a python 2.5 byte-compiled 0 belong 0xd1f20d0a python 2.6 byte-compiled +0 belong 0xd2f20d0a python 2.6 byte-compiled 0 belong 0x03f30d0a python 2.7 byte-compiled +0 belong 0x04f30d0a python 2.7 byte-compiled 0 belong 0x3b0c0d0a python 3.0 byte-compiled 0 belong 0x4f0c0d0a python 3.1 byte-compiled 0 belong 0x6c0c0d0a python 3.2 byte-compiled 0 belong 0x9e0c0d0a python 3.3 byte-compiled 0 belong 0xee0c0d0a python 3.4 byte-compiled -0 belong 0x160d0d0a python 3.5.1- byte-compiled -0 belong 0x170d0d0a python 3.5.2+ byte-compiled +0 belong 0x160d0d0a python 3.5.2- byte-compiled +0 belong 0x170d0d0a python 3.5.3+ byte-compiled 0 belong 0x330d0d0a python 3.6 byte-compiled 0 belong 0x420d0d0a python 3.7 byte-compiled diff --git a/magic/Magdir/rpi b/magic/Magdir/rpi index ac1be941d2b..58e6dfde70a 100644 --- a/magic/Magdir/rpi +++ b/magic/Magdir/rpi @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: rpi,v 1.1 2018/01/01 05:25:17 christos Exp $ +# $File: rpi,v 1.2 2019/10/02 02:07:30 christos Exp $ # rpi: file(1) magic for Raspberry Pi images -44 lelong 0 >4 lelong 0 @@ -13,3 +13,17 @@ >>>>>>>32 lelong 44 >>>>>>>>36 lelong 4 >>>>>>>>>40 string RPTL Raspberry PI kernel image + +-56 lelong 0 +>4 lelong 0 +>>8 lelong 1 +>>12 lelong 4 +>>>16 string 283x +>>>>20 lelong 1 +>>>>>24 lelong 4 +>>>>>>28 string DTOK +>>>>>>>32 lelong 1 +>>>>>>>>36 lelong 4 +>>>>>>>>>40 string DDTK8 +>>>>>>>>>>48 lelong 4 +>>>>>>>>>>>52 string RPTL Raspberry PI kernel image diff --git a/magic/Magdir/rst b/magic/Magdir/rst new file mode 100644 index 00000000000..f9437ec3201 --- /dev/null +++ b/magic/Magdir/rst @@ -0,0 +1,11 @@ + +#------------------------------------------------------------------------------ +# $File: rst,v 1.2 2019/11/02 18:41:26 christos Exp $ +# rst: ReStructuredText http://docutils.sourceforge.net/rst.html +0 search/256 \=\= +!:strength + 30 +>&0 regex/256 \^[\=]+$ +>>&0 search/512 :Author: ReStructuredText file +>>&0 default x +>>>&0 regex/512 \^\.\.[A-Za-z] ReStructuredText file +!:ext rst diff --git a/magic/Magdir/ruby b/magic/Magdir/ruby index 87af47d933f..9e67a3e22dc 100644 --- a/magic/Magdir/ruby +++ b/magic/Magdir/ruby @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: ruby,v 1.9 2019/04/19 00:42:27 christos Exp $ +# $File: ruby,v 1.10 2019/07/21 09:40:17 christos Exp $ # ruby: file(1) magic for Ruby scripting language # URL: https://www.ruby-lang.org/ # From: Reuben Thomas @@ -23,7 +23,7 @@ # (modules and such) # From: Lubomir Rintel 0 search/8192 require ->0 regex \^[[:space:]]*require[[:space:]]'[A-Za-z_/]+' +>0 regex \^[[:space:]]*require[[:space:]]'[A-Za-z_/.]+' >>0 regex def\ [a-z]|\ do$ >>>&0 regex \^[[:space:]]*end([[:space:]]+[;#].*)?$ Ruby script text !:strength + 30 @@ -48,7 +48,7 @@ !:mime text/x-ruby 0 search/8192 require ->0 regex \^[[:space:]]*require[[:space:]]'[A-Za-z_/]+' Ruby script text +>0 regex \^[[:space:]]*require[[:space:]]'[A-Za-z_/.]+' Ruby script text !:mime text/x-ruby 0 search/8192 include >0 regex \^[[:space:]]*include\ ([A-Z]+[a-z]*(::))+ Ruby script text diff --git a/magic/Magdir/sgml b/magic/Magdir/sgml index 987fe10e08d..8bfe9beb427 100644 --- a/magic/Magdir/sgml +++ b/magic/Magdir/sgml @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: sgml,v 1.39 2019/04/19 00:42:27 christos Exp $ +# $File: sgml,v 1.40 2019/09/30 15:44:22 christos Exp $ # Type: SVG Vectorial Graphics # From: Noel Torres 0 string \>19 search/4096 \14 regex ['"\ \t]*[0-9.]+['"\ \t]* >>19 search/4096 \20 belong 9 (PPP >20 belong 10 (FDDI >20 belong 11 (RFC 1483 ATM ->20 belong 12 (raw IP +>20 belong 12 (Raw IP >20 belong 13 (BSD/OS SLIP >20 belong 14 (BSD/OS PPP >20 belong 19 (Linux ATM Classical IP @@ -107,7 +107,7 @@ >20 belong 51 (PPP-over-Ethernet >20 belong 99 (Symantec Enterprise Firewall >20 belong 100 (RFC 1483 ATM ->20 belong 101 (raw IP +>20 belong 101 (Raw IP >20 belong 102 (BSD/OS SLIP >20 belong 103 (BSD/OS PPP >20 belong 104 (BSD/OS Cisco HDLC @@ -262,6 +262,8 @@ >20 belong 279 (Elektrobit High Speed Capture and Replay (EBHSCR) >20 belong 281 (Broadcom tag >20 belong 282 (Broadcom tag (prepended) +>20 belong 284 (Marvell DSA +>20 belong 285 (Marvell EDSA # print default match >20 default x >>20 belong x (linktype#%u diff --git a/magic/Magdir/sosi b/magic/Magdir/sosi new file mode 100644 index 00000000000..cfac5a3e273 --- /dev/null +++ b/magic/Magdir/sosi @@ -0,0 +1,40 @@ + +#------------------------------------------------------------------------------ +# $File: sosi,v 1.1 2019/05/20 17:25:09 christos Exp $ +# SOSI +# Summary: Systematic Organization of Spatial Information +# Long description: Norwegian text based map format +# File extension: .sos +# Full name: Petter Reinholdtsen (pere@hungry.com) +# Reference: https://en.wikipedia.org/wiki/SOSI +# +# Example SOSI files available from +# https://trac.osgeo.org/gdal/ticket/3638 +# https://nedlasting.geonorge.no/geonorge/Basisdata/N50Kartdata/SOSI/ +# https://nedlasting.geonorge.no/geonorge/Samferdsel/Elveg/SOSI/ +# +# Start with optional comments (from "!" to the next line end) +# followed by ".HODE" and end with "\n.SLUTT" followed by an optional +# separator (any number of " ", "\t", "\n" or "\r"), might have BOM at +# the start and following ".HODE" near the start there is "..OMR=C3=85DE" +# (either UTF-8, ISO-8859-1 or some 7 bit Norwegian charset based on +# ASCII) , "..TRANSPAR", "..TEGNSETT " followed by the charset and a +# separator, as well as "..SOSI-VERSJON " followed by the format +# version and a separator. +# +# FIXME figure out how to accept any of [space], [tab], [newline] and +# [carrige return] as separators, not only line end. + +# Not searching for full "OMR=C3=85DE" to match also for non-UTF-8 +# character sets +0 search ..OMR +>0 search ..TRANSPAR +>>0 search .HODE SOSI map data +>>>&0 search ..SOSI-VERSJON +>>>>&1 string x \b, version %s +# FIXME could not figure out way to make a match for .SLUTT at the end required +#>-7 string \n.SLUTT slutt +#>-8 string \n.SLUTT\n slutt-nl +#>-9 string \n.SLUTT\r\n slutt-crnl2 +!:mime text/vnd.sosi +!:ext sos diff --git a/magic/Magdir/ssh b/magic/Magdir/ssh index ca645644a78..9337ba7ab06 100644 --- a/magic/Magdir/ssh +++ b/magic/Magdir/ssh @@ -11,3 +11,9 @@ 0 string ecdsa-sha2-nistp384 OpenSSH ECDSA public key 0 string ecdsa-sha2-nistp521 OpenSSH ECDSA public key 0 string ssh-ed25519 OpenSSH ED25519 public key + +0 string SSHKRL\n\0 +>8 ubelong 1 OpenSSH key/certificate revocation list, format %u +>>12 ubequad x \b, version %llx +>>>20 beqdate x \b, generated %s + diff --git a/magic/Magdir/uuencode b/magic/Magdir/uuencode index c00ddabbde3..7844468484c 100644 --- a/magic/Magdir/uuencode +++ b/magic/Magdir/uuencode @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: uuencode,v 1.7 2009/09/19 16:28:13 christos Exp $ +# $File: uuencode,v 1.8 2019/12/14 20:40:26 christos Exp $ # uuencode: file(1) magic for ASCII-encoded files # @@ -23,9 +23,4 @@ # Greg Roelofs, newt@uchicago.edu 0 search/1 Decode\ the\ following\ with\ bdeco bencoded News text -# BinHex is the Macintosh ASCII-encoded file format (see also "apple") -# Daniel Quinlan, quinlan@yggdrasil.com -11 search/1 must\ be\ converted\ with\ BinHex BinHex binary text ->41 search/1 x \b, version %.3s - # GRR: handle BASE64 diff --git a/magic/Magdir/varied.script b/magic/Magdir/varied.script index 11e6eb56bb9..ff893882b01 100644 --- a/magic/Magdir/varied.script +++ b/magic/Magdir/varied.script @@ -1,30 +1,38 @@ #------------------------------------------------------------------------------ -# $File: varied.script,v 1.12 2019/04/19 00:42:27 christos Exp $ +# $File: varied.script,v 1.13 2019/10/11 14:35:29 christos Exp $ # varied.script: file(1) magic for various interpreter scripts 0 string/t #!\ / a >3 string >\0 %s script text executable +!:strength / 2 0 string/b #!\ / a >3 string >\0 %s script executable (binary data) +!:strength / 2 0 string/t #!\t/ a >3 string >\0 %s script text executable +!:strength / 2 0 string/b #!\t/ a >3 string >\0 %s script executable (binary data) +!:strength / 2 0 string/t #!/ a >2 string >\0 %s script text executable +!:strength / 2 0 string/b #!/ a >2 string >\0 %s script executable (binary data) +!:strength / 2 0 string/t #!\ script text executable >3 string >\0 for %s +!:strength / 2 0 string/b #!\ script executable >3 string >\0 for %s (binary data) +!:strength / 2 # using env 0 string/t #!/usr/bin/env a diff --git a/magic/Magdir/vax b/magic/Magdir/vax index 11de6cef005..f3deffa59fa 100644 --- a/magic/Magdir/vax +++ b/magic/Magdir/vax @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: vax,v 1.9 2014/04/30 21:41:02 christos Exp $ +# $File: vax,v 1.10 2019/10/04 18:07:46 christos Exp $ # vax: file(1) magic for VAX executable/object and APL workspace # 0 lelong 0101557 VAX single precision APL workspace @@ -19,9 +19,14 @@ # The `versions' were commented out, but have been un-commented out. # (Was the problem just one of endianness?) # -0 leshort 0570 VAX COFF executable ->12 lelong >0 not stripped ->22 leshort >0 - version %d -0 leshort 0575 VAX COFF pure executable ->12 lelong >0 not stripped ->22 leshort >0 - version %d +0 leshort 0570 +>2 uleshort <100 VAX COFF executable, sections %d +>>4 ledate x \b, created %s +>>12 lelong >0 \b, not stripped +>>22 leshort >0 \b, version %d + +0 leshort 0575 +>2 uleshort <100 VAX COFF pure executable, sections %d +>>4 ledate x \b, created %s +>>12 lelong >0 \b, not stripped +>>22 leshort >0 \b, version %d diff --git a/magic/Magdir/windows b/magic/Magdir/windows index 39ed3e2bec1..812ae1a895e 100644 --- a/magic/Magdir/windows +++ b/magic/Magdir/windows @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: windows,v 1.26 2019/05/01 17:55:25 christos Exp $ +# $File: windows,v 1.29 2019/11/18 03:11:20 christos Exp $ # windows: file(1) magic for Microsoft Windows # # This file is mainly reserved for files where programs @@ -119,6 +119,94 @@ # 3rd BLOB >>0x480 string >\0 \b, type %-3.8s +# Summary: Windows boot status log BOOTSTAT.DAT +# From: Joerg Jenderek +# Reference: https://www.geoffchappell.com/notes/windows/boot/bsd.htm +# Note: mainly refers to older Windows Vista, sometimes +# BOOTSTAT.DAT only contains nulls or invalid data +# checking for valid version below 5 +0 ulelong <5 +# skip many ISO images by checking for valid 64 KiB file size +>8 ulelong =0x00010000 +>>0 use bootstat-dat +# display information of BOOTSTAT.DAT +0 name bootstat-dat +>0 ulelong x Windows boot log +#!:mime application/octet-stream +!:mime application/x-ms-dat +# BOOTSTAT.DAT in BOOT subdirectory +!:ext dat +# apparently a version number: 2 for older like Vista, 3, 4 Windows 10 +>0 ulelong >2 \b, version %u +# apparently the size of the header: often 10h in older Windows, 14h, 18h +>4 ulelong !0x10 \b, header size 0x%x +#>4 ulelong !0x10 \b, header size %u +# apparently the size of the file: always 0x00010000~64KiB +# the file is acceptable to BOOTMGR only if it is exactly 64 KiB +>8 ulelong !0x00010000 \b, file size 0x%x +# size of valid data, in bytes: C8h 50h 172h 5D5Ch +>0xc ulelong x \b, 0x%x valid bytes +# skip header and jump to first bootstat entry and display information +>(0x4.l-1) ubyte x +>>&0 use bootstat-entry +# jump to first entry again because pointer are bad after "use" +>(0x4.l-1) ubyte x +# by 1st entry size jump to 2nd entry and display information +>>&(&0x18.l-1) ubyte x +>>>&0 use bootstat-entry +# jump to possible 3rd boot entry and display information +# >(0x4.l-1) ubyte x +# >>&(&0x18.l-1) ubyte x +# >>>&(&0x18.l-1) ubyte x +# >>>>&0 use bootstat-entry +# display BOOTSTAT.DAT entry +0 name bootstat-entry +#>0x00 ubequad x \b, ENTRY %16.16llx +# size of entry, in bytes: 40h(init) 78h(launced) 9Ch +#>0x18 ulelong x \b; entry size %u +>0x18 ulelong x \b; entry size 0x%x +# time stamp, in seconds +>0x00 ulelong x \b, 0x%x seconds +# always zero, significance unknown +>0x04 ulelong !0 \b, not null %u +# GUID of event source; but empty if event source is BOOTMGR +>0x08 ubequad !0 \b, GUID 0x%16.16llx +>>0x10 ubequad x \b%16.16llx +# severity code: 1~informational 3~errors +>0x1C ulelong !1 \b, severity 0x%x +# apparently a version number: 2 +>0x20 ulelong !2 \b, version %u +# event identifier 1~log file initialised 11h~boot application launched +#>0x24 ulelong x \b, event 0x%x +>0x24 ulelong !1 +>>0x24 ulelong !0x11 \b, event 0x%x +# entry data; size depends on event identifier +#>0x28 ubequad x \b, data 0x%16.16llx +>0x24 ulelong =0x1 \b, Init +# always 0, significance unknown +>>0x34 uleshort !0 \b, not null %u +# always 7, significance unknown +>>0x36 uleshort !7 \b, not seven %u +# year +>>0x28 uleshort x %u +# month +>>0x2A uleshort x \b-%u +# day +>>0x2C uleshort x \b-%u +# hour +>>0x2E uleshort x %u +# minute +>>0x30 uleshort x \b:%u +# second +>>0x32 uleshort x \b:%u +# boot application launched +>0x24 ulelong =0x11 \b, launched +# type of start: 0 normally, 1 or 2 maybe in a recovery sequence +>>0x38 uleshort !0 \b, type %u +# pathname of boot application, as null-terminated Unicode string; typically +# \Windows\system32\winload.exe \Windows\system32\winload.efi +>>0x3C lestring16 x %s + # Summary: Windows Error Report text files # URL: https://en.wikipedia.org/wiki/Windows_Error_Reporting # Reference: https://www.nirsoft.net/utils/app_crash_view.html @@ -275,7 +363,7 @@ !:apple ????TEXT !:ext cnt # -# Windows creates an full text search from hlp file, if the user clicks the "Find" tab and enables keyword indexing +# Windows creates a full text search from hlp file, if the user clicks the "Find" tab and enables keyword indexing 0 string tfMR MS Windows help Full Text Search index !:mime application/x-winhelp-fts !:ext fts @@ -477,8 +565,8 @@ # https://en.wikipedia.org/wiki/CONFIG.SYS >>&0 regex/c \^(menu)] MS-DOS CONFIG.SYS # @CONFIG.UI configuration file of previous DOS version saved by Caldera OPENDOS INSTALL.EXE -# CONFIG.PSS saved version of file CONFIG.SYS created by %WINDIR%\SYTEM\MSCONFIG.EXE -# CONFIG.TSH renamed file CONFIG.SYS.BAT by %WINDIR%\SYTEM\MSCONFIG.EXE +# CONFIG.PSS saved version of file CONFIG.SYS created by %WINDIR%\SYSTEM\MSCONFIG.EXE +# CONFIG.TSH renamed file CONFIG.SYS.BAT by %WINDIR%\SYSTEM\MSCONFIG.EXE # dos and w40 used in dual booting scene !:ext sys/dos/w40 # https://support.microsoft.com/kb/118579/ @@ -757,7 +845,7 @@ >0x1c string >\0 \b%.7s # AppName[0x80] like "Minimal SYStem", ClamWin Free Antivirus , ... >0xc0 string x %s -# AppId[0x80] is simliar to AppName or +# AppId[0x80] is similar to AppName or # GUID like {4BB0DCDC-BC24-49EC-8937-72956C33A470} start with left brace >0x40 ubyte 0x7b >>0x40 string x %-.38s @@ -879,3 +967,27 @@ #>148 ubequad !0 \b,unused 0x%16.16llx # +# From: Joerg Jenderek +# URL: https://en.wikipedia.org/wiki/Windows_Easy_Transfer +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/m/mig.trid.xml +# Note: called "Windows Easy Transfer migration data" by TrID, +# "Migration Store" or "EasyTransfer file" by Microsoft +0 string 1giM Windows Easy Transfer migration data +#!:mime application/octet-stream +!:mime application/x-ms-mig +!:ext mig +>0x18 string =MRTS without password +# data offset with 1 space at end +>>0x1c ulelong+0x38 x \b, at 0x%x +# look for zlib compressed data by ./compress +>>(0x1c.l+0x38) ubyte x +>>>&-1 indirect x +# in password protected examples MRTS comes some bytes further +>0x18 string !MRTS with password +# look for first MRTS tag +>0x18 search/29/b MRTS +# probably first file name length like 178, ... +#>>&0 ulelong x \b, 1st length %u +# URL like File\C:\Users\nutzer\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\desktop.ini +>>&20 lestring16 x \b, 1st %-s + diff --git a/magic/Magdir/wordprocessors b/magic/Magdir/wordprocessors index 4b08c430310..0f168887f1b 100644 --- a/magic/Magdir/wordprocessors +++ b/magic/Magdir/wordprocessors @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: wordprocessors,v 1.20 2019/04/19 00:42:27 christos Exp $ +# $File: wordprocessors,v 1.23 2019/10/25 20:15:49 christos Exp $ # wordprocessors: file(1) magic fo word processors. # ####### PWP file format used on Smith Corona Personal Word Processors: @@ -12,6 +12,21 @@ >25 byte 0x54 \b, legal >26 byte 0x46 \b, A4 +# URL: http://fileformats.archiveteam.org/wiki/Microsoft_Works_Word_Processor +# reference: http://mark0.net/download/triddefs_xml.7z +# /defs/w/wps-works-dos.trid.xml +# From: Joerg Jenderek +# Note: older non OLE 2 Compound based versions +0 ubeshort =0x01FE +>112 ubeshort =0x0100 Microsoft Works 1-3 (DOS) or 2 (Windows) document +# title like THE GREAT KHAN GAME +>>0x100 string x %s +!:mime application/vnd-ms-works +#!:mime application/x-msworks +# https://www.macdisk.com/macsigen.php +!:apple ????AWWP +!:ext wps + # Corel/WordPerfect 0 string \xffWPC # WordPerfect @@ -196,9 +211,6 @@ # Hangul (Korean) Word Processor File 0 string HWP\ Document\ File Hangul (Korean) Word Processor File 3.0 -# From: Won-Kyu Park -512 string R\0o\0o\0t\0 Hangul (Korean) Word Processor File 2000 -!:mime application/x-hwp # CosmicBook, from Benoit Rouits 0 string CSBK Ted Neslson's CosmicBook hypertext file @@ -260,3 +272,33 @@ # help files .hlp compiled from html and used by gfxboot added by Joerg Jenderek # markups page=0x04,label=0x12, followed by strings like "opt" or "main" and title=0x14 0 ulelong&0x8080FFFF 0x00001204 gfxboot compiled html help file + +# From: Joerg Jenderek +# URL: https://en.wikipedia.org/wiki/StarOffice +# Note: used in Star-, Open- and Libre-Office +# named as soffice.StarConfigFile.6 or OpenOffice.org configuration by others +0 ubeshort 0x0400 +#>(2.s+8) ubequad x \b, gap 0x%16.16llx +# test for null value in gap after theme name maybe unreliable +#>(2.s+9) ubyte 0 \b, 0-byte +# look for keyword GALRESRV near the end +# "C:\Program Files (x86)\StarOffice6.0\share\gallery\sg27.thm" Navigation, 238 objects +#>0 search/8415 GALRESRV \b, GALRESRV found +# "neues thema6.thm" MorePictures, 315 objects +#>0 search/19299 GALRESRV \b, GALRESRV FOUND +#>2 uleshort x \b, name length %u +# skip file2147.chk by check for positive name length like for sg16.thm "3D" +>2 uleshort >0 StarOffice Gallery theme +!:mime application/x-stargallery-thm +!:ext thm +# gallery name +>>2 pstring/h x %s +# number of objects +>>(2.s+4) ulelong x \b, %u object +# plural s +>>(2.s+4) ulelong !1 \bs +# if available then display first object name +>>(2.s+4) ulelong >0 +# partial file name, URL or internal name like "dd2*" of 1st object or RESRV +>>>(2.s+11) pstring/h x \b, 1st %s + diff --git a/magic/Magdir/zip b/magic/Magdir/zip index f214ad0df55..565085a3909 100644 --- a/magic/Magdir/zip +++ b/magic/Magdir/zip @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------ -# $File: zip,v 1.2 2019/04/09 18:34:15 christos Exp $ +# $File: zip,v 1.3 2019/07/06 19:25:06 christos Exp $ # zip: file(1) magic for zip files; this is not use # Note the version of magic in archive is currently stronger, this is # just an example until negative offsets are supported better @@ -60,4 +60,4 @@ #>10 leshort >1 \b, %d central directories #>12 lelong x \b, %d central directory bytes >(16.l) use zipcd ->20 pstring/l >0 \b, %s +>>20 pstring/l >0 \b, %s diff --git a/magic/Makefile.am b/magic/Makefile.am index a52f522c924..e5c413fa952 100644 --- a/magic/Makefile.am +++ b/magic/Makefile.am @@ -1,5 +1,5 @@ # -# $File: Makefile.am,v 1.143 2019/05/09 16:24:36 christos Exp $ +# $File: Makefile.am,v 1.151 2019/11/02 18:37:58 christos Exp $ # MAGIC_FRAGMENT_BASE = Magdir MAGIC_DIR = $(top_srcdir)/magic @@ -99,6 +99,7 @@ $(MAGIC_FRAGMENT_DIR)/finger \ $(MAGIC_FRAGMENT_DIR)/flash \ $(MAGIC_FRAGMENT_DIR)/flif \ $(MAGIC_FRAGMENT_DIR)/fonts \ +$(MAGIC_FRAGMENT_DIR)/forth \ $(MAGIC_FRAGMENT_DIR)/fortran \ $(MAGIC_FRAGMENT_DIR)/frame \ $(MAGIC_FRAGMENT_DIR)/freebsd \ @@ -110,6 +111,7 @@ $(MAGIC_FRAGMENT_DIR)/gconv \ $(MAGIC_FRAGMENT_DIR)/geo \ $(MAGIC_FRAGMENT_DIR)/geos \ $(MAGIC_FRAGMENT_DIR)/gimp \ +$(MAGIC_FRAGMENT_DIR)/git \ $(MAGIC_FRAGMENT_DIR)/glibc \ $(MAGIC_FRAGMENT_DIR)/gnome \ $(MAGIC_FRAGMENT_DIR)/gnu \ @@ -179,6 +181,7 @@ $(MAGIC_FRAGMENT_DIR)/mkid \ $(MAGIC_FRAGMENT_DIR)/mlssa \ $(MAGIC_FRAGMENT_DIR)/mmdf \ $(MAGIC_FRAGMENT_DIR)/modem \ +$(MAGIC_FRAGMENT_DIR)/modulefile \ $(MAGIC_FRAGMENT_DIR)/motorola \ $(MAGIC_FRAGMENT_DIR)/mozilla \ $(MAGIC_FRAGMENT_DIR)/msdos \ @@ -202,6 +205,8 @@ $(MAGIC_FRAGMENT_DIR)/ocaml \ $(MAGIC_FRAGMENT_DIR)/octave \ $(MAGIC_FRAGMENT_DIR)/ole2compounddocs \ $(MAGIC_FRAGMENT_DIR)/olf \ +$(MAGIC_FRAGMENT_DIR)/openfst \ +$(MAGIC_FRAGMENT_DIR)/opentimestamps \ $(MAGIC_FRAGMENT_DIR)/os2 \ $(MAGIC_FRAGMENT_DIR)/os400 \ $(MAGIC_FRAGMENT_DIR)/os9 \ @@ -222,6 +227,7 @@ $(MAGIC_FRAGMENT_DIR)/pgp \ $(MAGIC_FRAGMENT_DIR)/pkgadd \ $(MAGIC_FRAGMENT_DIR)/plan9 \ $(MAGIC_FRAGMENT_DIR)/plus5 \ +$(MAGIC_FRAGMENT_DIR)/pmem \ $(MAGIC_FRAGMENT_DIR)/polyml \ $(MAGIC_FRAGMENT_DIR)/printer \ $(MAGIC_FRAGMENT_DIR)/project \ @@ -238,6 +244,7 @@ $(MAGIC_FRAGMENT_DIR)/rpi \ $(MAGIC_FRAGMENT_DIR)/rpm \ $(MAGIC_FRAGMENT_DIR)/rpmsg \ $(MAGIC_FRAGMENT_DIR)/rtf \ +$(MAGIC_FRAGMENT_DIR)/rst \ $(MAGIC_FRAGMENT_DIR)/ruby \ $(MAGIC_FRAGMENT_DIR)/sc \ $(MAGIC_FRAGMENT_DIR)/sccs \ @@ -257,6 +264,7 @@ $(MAGIC_FRAGMENT_DIR)/smalltalk \ $(MAGIC_FRAGMENT_DIR)/smile \ $(MAGIC_FRAGMENT_DIR)/sniffer \ $(MAGIC_FRAGMENT_DIR)/softquad \ +$(MAGIC_FRAGMENT_DIR)/sosi \ $(MAGIC_FRAGMENT_DIR)/spec \ $(MAGIC_FRAGMENT_DIR)/spectrum \ $(MAGIC_FRAGMENT_DIR)/sql \ diff --git a/magic/Makefile.in b/magic/Makefile.in index bacc6d575ac..a0e79bc79ef 100644 --- a/magic/Makefile.in +++ b/magic/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -193,6 +193,7 @@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MINGW = @MINGW@ @@ -273,7 +274,7 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # -# $File: Makefile.am,v 1.143 2019/05/09 16:24:36 christos Exp $ +# $File: Makefile.am,v 1.151 2019/11/02 18:37:58 christos Exp $ # MAGIC_FRAGMENT_BASE = Magdir MAGIC_DIR = $(top_srcdir)/magic @@ -371,6 +372,7 @@ $(MAGIC_FRAGMENT_DIR)/finger \ $(MAGIC_FRAGMENT_DIR)/flash \ $(MAGIC_FRAGMENT_DIR)/flif \ $(MAGIC_FRAGMENT_DIR)/fonts \ +$(MAGIC_FRAGMENT_DIR)/forth \ $(MAGIC_FRAGMENT_DIR)/fortran \ $(MAGIC_FRAGMENT_DIR)/frame \ $(MAGIC_FRAGMENT_DIR)/freebsd \ @@ -382,6 +384,7 @@ $(MAGIC_FRAGMENT_DIR)/gconv \ $(MAGIC_FRAGMENT_DIR)/geo \ $(MAGIC_FRAGMENT_DIR)/geos \ $(MAGIC_FRAGMENT_DIR)/gimp \ +$(MAGIC_FRAGMENT_DIR)/git \ $(MAGIC_FRAGMENT_DIR)/glibc \ $(MAGIC_FRAGMENT_DIR)/gnome \ $(MAGIC_FRAGMENT_DIR)/gnu \ @@ -451,6 +454,7 @@ $(MAGIC_FRAGMENT_DIR)/mkid \ $(MAGIC_FRAGMENT_DIR)/mlssa \ $(MAGIC_FRAGMENT_DIR)/mmdf \ $(MAGIC_FRAGMENT_DIR)/modem \ +$(MAGIC_FRAGMENT_DIR)/modulefile \ $(MAGIC_FRAGMENT_DIR)/motorola \ $(MAGIC_FRAGMENT_DIR)/mozilla \ $(MAGIC_FRAGMENT_DIR)/msdos \ @@ -474,6 +478,8 @@ $(MAGIC_FRAGMENT_DIR)/ocaml \ $(MAGIC_FRAGMENT_DIR)/octave \ $(MAGIC_FRAGMENT_DIR)/ole2compounddocs \ $(MAGIC_FRAGMENT_DIR)/olf \ +$(MAGIC_FRAGMENT_DIR)/openfst \ +$(MAGIC_FRAGMENT_DIR)/opentimestamps \ $(MAGIC_FRAGMENT_DIR)/os2 \ $(MAGIC_FRAGMENT_DIR)/os400 \ $(MAGIC_FRAGMENT_DIR)/os9 \ @@ -494,6 +500,7 @@ $(MAGIC_FRAGMENT_DIR)/pgp \ $(MAGIC_FRAGMENT_DIR)/pkgadd \ $(MAGIC_FRAGMENT_DIR)/plan9 \ $(MAGIC_FRAGMENT_DIR)/plus5 \ +$(MAGIC_FRAGMENT_DIR)/pmem \ $(MAGIC_FRAGMENT_DIR)/polyml \ $(MAGIC_FRAGMENT_DIR)/printer \ $(MAGIC_FRAGMENT_DIR)/project \ @@ -510,6 +517,7 @@ $(MAGIC_FRAGMENT_DIR)/rpi \ $(MAGIC_FRAGMENT_DIR)/rpm \ $(MAGIC_FRAGMENT_DIR)/rpmsg \ $(MAGIC_FRAGMENT_DIR)/rtf \ +$(MAGIC_FRAGMENT_DIR)/rst \ $(MAGIC_FRAGMENT_DIR)/ruby \ $(MAGIC_FRAGMENT_DIR)/sc \ $(MAGIC_FRAGMENT_DIR)/sccs \ @@ -529,6 +537,7 @@ $(MAGIC_FRAGMENT_DIR)/smalltalk \ $(MAGIC_FRAGMENT_DIR)/smile \ $(MAGIC_FRAGMENT_DIR)/sniffer \ $(MAGIC_FRAGMENT_DIR)/softquad \ +$(MAGIC_FRAGMENT_DIR)/sosi \ $(MAGIC_FRAGMENT_DIR)/spec \ $(MAGIC_FRAGMENT_DIR)/spectrum \ $(MAGIC_FRAGMENT_DIR)/sql \ @@ -612,8 +621,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -658,7 +667,10 @@ ctags CTAGS: cscope cscopelist: -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ diff --git a/missing b/missing index f62bbae306c..625aeb11897 100755 --- a/missing +++ b/missing @@ -1,9 +1,9 @@ #! /bin/sh # Common wrapper for a few potentially missing GNU programs. -scriptversion=2013-10-28.13; # UTC +scriptversion=2018-03-07.03; # UTC -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify @@ -17,7 +17,7 @@ scriptversion=2013-10-28.13; # UTC # GNU General Public License for more details. # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -101,9 +101,9 @@ else exit $st fi -perl_URL=http://www.perl.org/ -flex_URL=http://flex.sourceforge.net/ -gnu_software_URL=http://www.gnu.org/software +perl_URL=https://www.perl.org/ +flex_URL=https://github.com/westes/flex +gnu_software_URL=https://www.gnu.org/software program_details () { @@ -207,9 +207,9 @@ give_advice "$1" | sed -e '1s/^/WARNING: /' \ exit $st # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" +# time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff --git a/python/Makefile.in b/python/Makefile.in index 40fc01ab393..9a9c880b7ba 100644 --- a/python/Makefile.in +++ b/python/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -163,6 +163,7 @@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MINGW = @MINGW@ @@ -264,8 +265,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -289,7 +290,10 @@ ctags CTAGS: cscope cscopelist: -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ diff --git a/src/Makefile.am b/src/Makefile.am index 2fbefdbfcb5..3f67f2cf349 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -8,8 +8,8 @@ AM_CPPFLAGS = -DMAGIC='"$(MAGIC)"' AM_CFLAGS = $(CFLAG_VISIBILITY) @WARNINGS@ libmagic_la_SOURCES = buffer.c magic.c apprentice.c softmagic.c ascmagic.c \ - encoding.c compress.c is_json.c is_tar.c readelf.c print.c fsmagic.c \ - funcs.c file.h readelf.h tar.h apptype.c der.c der.h \ + encoding.c compress.c is_csv.c is_json.c is_tar.c readelf.c print.c \ + fsmagic.c funcs.c file.h readelf.h tar.h apptype.c der.c der.h \ file_opts.h elfclass.h mygetopt.h cdf.c cdf_time.c readcdf.c cdf.h libmagic_la_LDFLAGS = -no-undefined -version-info 1:0:0 if MINGW diff --git a/src/Makefile.in b/src/Makefile.in index 29567c47028..59f3b5e4207 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -103,6 +103,9 @@ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libdir)" \ + "$(DESTDIR)$(includedir)" +PROGRAMS = $(bin_PROGRAMS) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ @@ -130,15 +133,13 @@ am__uninstall_files_from_dir = { \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } -am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \ - "$(DESTDIR)$(includedir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = libmagic_la_DEPENDENCIES = $(LTLIBOBJS) $(am__DEPENDENCIES_1) am_libmagic_la_OBJECTS = buffer.lo magic.lo apprentice.lo softmagic.lo \ - ascmagic.lo encoding.lo compress.lo is_json.lo is_tar.lo \ - readelf.lo print.lo fsmagic.lo funcs.lo apptype.lo der.lo \ - cdf.lo cdf_time.lo readcdf.lo + ascmagic.lo encoding.lo compress.lo is_csv.lo is_json.lo \ + is_tar.lo readelf.lo print.lo fsmagic.lo funcs.lo apptype.lo \ + der.lo cdf.lo cdf_time.lo readcdf.lo libmagic_la_OBJECTS = $(am_libmagic_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -147,7 +148,6 @@ am__v_lt_1 = libmagic_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libmagic_la_LDFLAGS) $(LDFLAGS) -o $@ -PROGRAMS = $(bin_PROGRAMS) am_file_OBJECTS = file.$(OBJEXT) seccomp.$(OBJEXT) file_OBJECTS = $(am_file_OBJECTS) file_DEPENDENCIES = libmagic.la @@ -165,7 +165,25 @@ am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = $(DEPDIR)/asctime_r.Plo $(DEPDIR)/asprintf.Plo \ + $(DEPDIR)/ctime_r.Plo $(DEPDIR)/dprintf.Plo \ + $(DEPDIR)/fmtcheck.Plo $(DEPDIR)/getline.Plo \ + $(DEPDIR)/getopt_long.Plo $(DEPDIR)/gmtime_r.Plo \ + $(DEPDIR)/localtime_r.Plo $(DEPDIR)/pread.Plo \ + $(DEPDIR)/strcasestr.Plo $(DEPDIR)/strlcat.Plo \ + $(DEPDIR)/strlcpy.Plo $(DEPDIR)/vasprintf.Plo \ + ./$(DEPDIR)/apprentice.Plo ./$(DEPDIR)/apptype.Plo \ + ./$(DEPDIR)/ascmagic.Plo ./$(DEPDIR)/buffer.Plo \ + ./$(DEPDIR)/cdf.Plo ./$(DEPDIR)/cdf_time.Plo \ + ./$(DEPDIR)/compress.Plo ./$(DEPDIR)/der.Plo \ + ./$(DEPDIR)/encoding.Plo ./$(DEPDIR)/file.Po \ + ./$(DEPDIR)/fsmagic.Plo ./$(DEPDIR)/funcs.Plo \ + ./$(DEPDIR)/is_csv.Plo ./$(DEPDIR)/is_json.Plo \ + ./$(DEPDIR)/is_tar.Plo ./$(DEPDIR)/magic.Plo \ + ./$(DEPDIR)/print.Plo ./$(DEPDIR)/readcdf.Plo \ + ./$(DEPDIR)/readelf.Plo ./$(DEPDIR)/seccomp.Po \ + ./$(DEPDIR)/softmagic.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -259,6 +277,7 @@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MINGW = @MINGW@ @@ -343,8 +362,8 @@ nodist_include_HEADERS = magic.h AM_CPPFLAGS = -DMAGIC='"$(MAGIC)"' AM_CFLAGS = $(CFLAG_VISIBILITY) @WARNINGS@ libmagic_la_SOURCES = buffer.c magic.c apprentice.c softmagic.c ascmagic.c \ - encoding.c compress.c is_json.c is_tar.c readelf.c print.c fsmagic.c \ - funcs.c file.h readelf.h tar.h apptype.c der.c der.h \ + encoding.c compress.c is_csv.c is_json.c is_tar.c readelf.c print.c \ + fsmagic.c funcs.c file.h readelf.h tar.h apptype.c der.c der.h \ file_opts.h elfclass.h mygetopt.h cdf.c cdf_time.c readcdf.c cdf.h libmagic_la_LDFLAGS = -no-undefined -version-info 1:0:0 @@ -379,8 +398,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -391,44 +410,6 @@ $(top_srcdir)/configure: $(am__configure_deps) $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): - -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ - } - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -libmagic.la: $(libmagic_la_OBJECTS) $(libmagic_la_DEPENDENCIES) $(EXTRA_libmagic_la_DEPENDENCIES) - $(AM_V_CCLD)$(libmagic_la_LINK) -rpath $(libdir) $(libmagic_la_OBJECTS) $(libmagic_la_LIBADD) $(LIBS) install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ @@ -479,6 +460,44 @@ clean-binPROGRAMS: echo " rm -f" $$list; \ rm -f $$list +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libmagic.la: $(libmagic_la_OBJECTS) $(libmagic_la_DEPENDENCIES) $(EXTRA_libmagic_la_DEPENDENCIES) + $(AM_V_CCLD)$(libmagic_la_LINK) -rpath $(libdir) $(libmagic_la_OBJECTS) $(libmagic_la_LIBADD) $(LIBS) + file$(EXEEXT): $(file_OBJECTS) $(file_DEPENDENCIES) $(EXTRA_file_DEPENDENCIES) @rm -f file$(EXEEXT) $(AM_V_CCLD)$(LINK) $(file_OBJECTS) $(file_LDADD) $(LIBS) @@ -489,40 +508,47 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/asctime_r.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/asprintf.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/ctime_r.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/dprintf.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/fmtcheck.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getline.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getopt_long.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/gmtime_r.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/localtime_r.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/pread.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strcasestr.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strlcat.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strlcpy.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/vasprintf.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/apprentice.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/apptype.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ascmagic.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buffer.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdf.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdf_time.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compress.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/der.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/encoding.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsmagic.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/funcs.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/is_json.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/is_tar.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/magic.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readcdf.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readelf.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/seccomp.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/softmagic.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/asctime_r.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/asprintf.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/ctime_r.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/dprintf.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/fmtcheck.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getline.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getopt_long.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/gmtime_r.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/localtime_r.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/pread.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strcasestr.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strlcat.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strlcpy.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/vasprintf.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/apprentice.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/apptype.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ascmagic.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buffer.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdf.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdf_time.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compress.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/der.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/encoding.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsmagic.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/funcs.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/is_csv.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/is_json.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/is_tar.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/magic.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readcdf.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readelf.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/seccomp.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/softmagic.Plo@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @@ -627,7 +653,10 @@ cscopelist-am: $(am__tagged_files) distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -660,11 +689,11 @@ distdir: $(DISTFILES) check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am -all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS) +all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(HEADERS) install-binPROGRAMS: install-libLTLIBRARIES installdirs: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(includedir)"; do \ + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) @@ -706,7 +735,41 @@ clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ clean-libtool mostlyclean-am distclean: distclean-am - -rm -rf $(DEPDIR) ./$(DEPDIR) + -rm -f $(DEPDIR)/asctime_r.Plo + -rm -f $(DEPDIR)/asprintf.Plo + -rm -f $(DEPDIR)/ctime_r.Plo + -rm -f $(DEPDIR)/dprintf.Plo + -rm -f $(DEPDIR)/fmtcheck.Plo + -rm -f $(DEPDIR)/getline.Plo + -rm -f $(DEPDIR)/getopt_long.Plo + -rm -f $(DEPDIR)/gmtime_r.Plo + -rm -f $(DEPDIR)/localtime_r.Plo + -rm -f $(DEPDIR)/pread.Plo + -rm -f $(DEPDIR)/strcasestr.Plo + -rm -f $(DEPDIR)/strlcat.Plo + -rm -f $(DEPDIR)/strlcpy.Plo + -rm -f $(DEPDIR)/vasprintf.Plo + -rm -f ./$(DEPDIR)/apprentice.Plo + -rm -f ./$(DEPDIR)/apptype.Plo + -rm -f ./$(DEPDIR)/ascmagic.Plo + -rm -f ./$(DEPDIR)/buffer.Plo + -rm -f ./$(DEPDIR)/cdf.Plo + -rm -f ./$(DEPDIR)/cdf_time.Plo + -rm -f ./$(DEPDIR)/compress.Plo + -rm -f ./$(DEPDIR)/der.Plo + -rm -f ./$(DEPDIR)/encoding.Plo + -rm -f ./$(DEPDIR)/file.Po + -rm -f ./$(DEPDIR)/fsmagic.Plo + -rm -f ./$(DEPDIR)/funcs.Plo + -rm -f ./$(DEPDIR)/is_csv.Plo + -rm -f ./$(DEPDIR)/is_json.Plo + -rm -f ./$(DEPDIR)/is_tar.Plo + -rm -f ./$(DEPDIR)/magic.Plo + -rm -f ./$(DEPDIR)/print.Plo + -rm -f ./$(DEPDIR)/readcdf.Plo + -rm -f ./$(DEPDIR)/readelf.Plo + -rm -f ./$(DEPDIR)/seccomp.Po + -rm -f ./$(DEPDIR)/softmagic.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -752,7 +815,41 @@ install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf $(DEPDIR) ./$(DEPDIR) + -rm -f $(DEPDIR)/asctime_r.Plo + -rm -f $(DEPDIR)/asprintf.Plo + -rm -f $(DEPDIR)/ctime_r.Plo + -rm -f $(DEPDIR)/dprintf.Plo + -rm -f $(DEPDIR)/fmtcheck.Plo + -rm -f $(DEPDIR)/getline.Plo + -rm -f $(DEPDIR)/getopt_long.Plo + -rm -f $(DEPDIR)/gmtime_r.Plo + -rm -f $(DEPDIR)/localtime_r.Plo + -rm -f $(DEPDIR)/pread.Plo + -rm -f $(DEPDIR)/strcasestr.Plo + -rm -f $(DEPDIR)/strlcat.Plo + -rm -f $(DEPDIR)/strlcpy.Plo + -rm -f $(DEPDIR)/vasprintf.Plo + -rm -f ./$(DEPDIR)/apprentice.Plo + -rm -f ./$(DEPDIR)/apptype.Plo + -rm -f ./$(DEPDIR)/ascmagic.Plo + -rm -f ./$(DEPDIR)/buffer.Plo + -rm -f ./$(DEPDIR)/cdf.Plo + -rm -f ./$(DEPDIR)/cdf_time.Plo + -rm -f ./$(DEPDIR)/compress.Plo + -rm -f ./$(DEPDIR)/der.Plo + -rm -f ./$(DEPDIR)/encoding.Plo + -rm -f ./$(DEPDIR)/file.Po + -rm -f ./$(DEPDIR)/fsmagic.Plo + -rm -f ./$(DEPDIR)/funcs.Plo + -rm -f ./$(DEPDIR)/is_csv.Plo + -rm -f ./$(DEPDIR)/is_json.Plo + -rm -f ./$(DEPDIR)/is_tar.Plo + -rm -f ./$(DEPDIR)/magic.Plo + -rm -f ./$(DEPDIR)/print.Plo + -rm -f ./$(DEPDIR)/readcdf.Plo + -rm -f ./$(DEPDIR)/readelf.Plo + -rm -f ./$(DEPDIR)/seccomp.Po + -rm -f ./$(DEPDIR)/softmagic.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -774,7 +871,7 @@ uninstall-am: uninstall-binPROGRAMS uninstall-libLTLIBRARIES \ .MAKE: all check install install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ +.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ clean-libtool cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ diff --git a/src/apprentice.c b/src/apprentice.c index eca3ae06af9..7ebd6897bd0 100644 --- a/src/apprentice.c +++ b/src/apprentice.c @@ -32,7 +32,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: apprentice.c,v 1.283 2019/02/20 02:35:27 christos Exp $") +FILE_RCSID("@(#)$File: apprentice.c,v 1.284 2019/06/29 22:31:04 christos Exp $") #endif /* lint */ #include "magic.h" @@ -1926,17 +1926,7 @@ parse(struct magic_set *ms, struct magic_entry *me, const char *line, file_magwarn(ms, "offset `%s' invalid", l); return -1; } -#if 0 - if (m->offset < 0 && cont_level != 0 && - (m->flag & (OFFADD | INDIROFFADD)) == 0) { - if (ms->flags & MAGIC_CHECK) { - file_magwarn(ms, - "negative direct offset `%s' at level %u", - l, cont_level); - } - return -1; - } -#endif + l = t; if (m->flag & INDIR) { diff --git a/src/ascmagic.c b/src/ascmagic.c index 624ac90b1f1..3bb7359777b 100644 --- a/src/ascmagic.c +++ b/src/ascmagic.c @@ -35,12 +35,11 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: ascmagic.c,v 1.104 2019/05/07 02:27:11 christos Exp $") +FILE_RCSID("@(#)$File: ascmagic.c,v 1.105 2019/06/08 20:49:14 christos Exp $") #endif /* lint */ #include "magic.h" #include -#include #include #include #ifdef HAVE_UNISTD_H diff --git a/src/buffer.c b/src/buffer.c index 6d8967d2fa7..0a27e578848 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -27,7 +27,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: buffer.c,v 1.6 2019/05/07 02:27:11 christos Exp $") +FILE_RCSID("@(#)$File: buffer.c,v 1.7 2019/06/10 21:35:26 christos Exp $") #endif /* lint */ #include "magic.h" @@ -77,6 +77,7 @@ buffer_fill(const struct buffer *bb) b->eoff = b->st.st_size - b->elen; if (pread(b->fd, b->ebuf, b->elen, b->eoff) == -1) { free(b->ebuf); + b->ebuf = NULL; goto out; } diff --git a/src/compress.c b/src/compress.c index 95e42a24dd5..33ce2bc936d 100644 --- a/src/compress.c +++ b/src/compress.c @@ -35,7 +35,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: compress.c,v 1.121 2019/05/07 02:27:11 christos Exp $") +FILE_RCSID("@(#)$File: compress.c,v 1.124 2019/07/21 11:42:09 christos Exp $") #endif #include "magic.h" @@ -66,11 +66,16 @@ typedef void (*sig_t)(int); #include #endif -#if defined(HAVE_BZLIB_H) +#if defined(HAVE_BZLIB_H) || defined(BZLIBSUPPORT) #define BUILTIN_BZLIB #include #endif +#if defined(HAVE_XZLIB_H) || defined(XZLIBSUPPORT) +#define BUILTIN_XZLIB +#include +#endif + #ifdef DEBUG int tty = -1; #define DPRINTF(...) do { \ @@ -113,6 +118,16 @@ zlibcmp(const unsigned char *buf) } #endif +static int +lzmacmp(const unsigned char *buf) +{ + if (buf[0] != 0x5d || buf[1] || buf[2]) + return 0; + if (buf[12] && buf[12] != 0xff) + return 0; + return 1; +} + #define gzip_flags "-cd" #define lrzip_flags "-do" #define lzip_flags gzip_flags @@ -147,29 +162,35 @@ static const char *zstd_args[] = { private const struct { const void *magic; - size_t maglen; + int maglen; const char **argv; void *unused; } compr[] = { - { "\037\235", 2, gzip_args, NULL }, /* compressed */ +#define METH_FROZEN 2 +#define METH_BZIP 7 +#define METH_XZ 9 +#define METH_LZMA 13 +#define METH_ZLIB 14 + { "\037\235", 2, gzip_args, NULL }, /* 0, compressed */ /* Uncompress can get stuck; so use gzip first if we have it * Idea from Damien Clark, thanks! */ - { "\037\235", 2, uncompress_args, NULL }, /* compressed */ - { "\037\213", 2, gzip_args, do_zlib }, /* gzipped */ - { "\037\236", 2, gzip_args, NULL }, /* frozen */ - { "\037\240", 2, gzip_args, NULL }, /* SCO LZH */ + { "\037\235", 2, uncompress_args, NULL }, /* 1, compressed */ + { "\037\213", 2, gzip_args, do_zlib }, /* 2, gzipped */ + { "\037\236", 2, gzip_args, NULL }, /* 3, frozen */ + { "\037\240", 2, gzip_args, NULL }, /* 4, SCO LZH */ /* the standard pack utilities do not accept standard input */ - { "\037\036", 2, gzip_args, NULL }, /* packed */ - { "PK\3\4", 4, gzip_args, NULL }, /* pkzipped, */ + { "\037\036", 2, gzip_args, NULL }, /* 5, packed */ + { "PK\3\4", 4, gzip_args, NULL }, /* 6, pkzipped, */ /* ...only first file examined */ - { "BZh", 3, bzip2_args, do_bzlib }, /* bzip2-ed */ - { "LZIP", 4, lzip_args, NULL }, /* lzip-ed */ - { "\3757zXZ\0", 6, xz_args, NULL }, /* XZ Utils */ - { "LRZI", 4, lrzip_args, NULL }, /* LRZIP */ - { "\004\"M\030",4, lz4_args, NULL }, /* LZ4 */ - { "\x28\xB5\x2F\xFD", 4, zstd_args, NULL }, /* zstd */ + { "BZh", 3, bzip2_args, do_bzlib }, /* 7, bzip2-ed */ + { "LZIP", 4, lzip_args, NULL }, /* 8, lzip-ed */ + { "\3757zXZ\0", 6, xz_args, NULL }, /* 9, XZ Utils */ + { "LRZI", 4, lrzip_args, NULL }, /* 10, LRZIP */ + { "\004\"M\030",4, lz4_args, NULL }, /* 11, LZ4 */ + { "\x28\xB5\x2F\xFD", 4, zstd_args, NULL }, /* 12, zstd */ + { RCAST(const void *, lzmacmp), -13, xz_args, NULL }, /* 13, lzma */ #ifdef ZLIBSUPPORT - { RCAST(const void *, zlibcmp), 0, zlib_args, NULL }, /* zlib */ + { RCAST(const void *, zlibcmp), -2, zlib_args, NULL }, /* 14, zlib */ #endif }; @@ -190,7 +211,11 @@ private int uncompressgzipped(const unsigned char *, unsigned char **, size_t, #endif #ifdef BUILTIN_BZLIB private int uncompressbzlib(const unsigned char *, unsigned char **, size_t, - size_t *, int); + size_t *); +#endif +#ifdef BUILTIN_XZLIB +private int uncompressxzlib(const unsigned char *, unsigned char **, size_t, + size_t *); #endif static int makeerror(unsigned char **, size_t *, const char *, ...) @@ -234,15 +259,15 @@ file_zmagic(struct magic_set *ms, const struct buffer *b, const char *name) for (i = 0; i < ncompr; i++) { int zm; - if (nbytes < compr[i].maglen) + if (nbytes < CAST(size_t, abs(compr[i].maglen))) continue; -#ifdef ZLIBSUPPORT - if (compr[i].maglen == 0) + if (compr[i].maglen < 0) { zm = (RCAST(int (*)(const unsigned char *), CCAST(void *, compr[i].magic)))(buf); - else -#endif - zm = memcmp(buf, compr[i].magic, compr[i].maglen) == 0; + } else { + zm = memcmp(buf, compr[i].magic, + CAST(size_t, compr[i].maglen)) == 0; + } if (!zm) continue; @@ -570,6 +595,90 @@ err: } #endif +#ifdef BUILTIN_BZLIB +private int +uncompressbzlib(const unsigned char *old, unsigned char **newch, + size_t bytes_max, size_t *n) +{ + int rc; + bz_stream bz; + + memset(&bz, 0, sizeof(bz)); + rc = BZ2_bzDecompressInit(&bz, 0, 0); + if (rc != BZ_OK) + goto err; + + if ((*newch = CAST(unsigned char *, malloc(bytes_max + 1))) == NULL) + return makeerror(newch, n, "No buffer, %s", strerror(errno)); + + bz.next_in = CCAST(char *, RCAST(const char *, old)); + bz.avail_in = CAST(uint32_t, *n); + bz.next_out = RCAST(char *, *newch); + bz.avail_out = CAST(unsigned int, bytes_max); + + rc = BZ2_bzDecompress(&bz); + if (rc != BZ_OK && rc != BZ_STREAM_END) + goto err; + + /* Assume byte_max is within 32bit */ + /* assert(bz.total_out_hi32 == 0); */ + *n = CAST(size_t, bz.total_out_lo32); + rc = BZ2_bzDecompressEnd(&bz); + if (rc != BZ_OK) + goto err; + + /* let's keep the nul-terminate tradition */ + (*newch)[*n] = '\0'; + + return OKDATA; +err: + snprintf(RCAST(char *, *newch), bytes_max, "bunzip error %d", rc); + *n = strlen(RCAST(char *, *newch)); + return ERRDATA; +} +#endif + +#ifdef BUILTIN_XZLIB +private int +uncompressxzlib(const unsigned char *old, unsigned char **newch, + size_t bytes_max, size_t *n) +{ + int rc; + lzma_stream xz; + + memset(&xz, 0, sizeof(xz)); + rc = lzma_auto_decoder(&xz, UINT64_MAX, 0); + if (rc != LZMA_OK) + goto err; + + if ((*newch = CAST(unsigned char *, malloc(bytes_max + 1))) == NULL) + return makeerror(newch, n, "No buffer, %s", strerror(errno)); + + xz.next_in = CCAST(const uint8_t *, old); + xz.avail_in = CAST(uint32_t, *n); + xz.next_out = RCAST(uint8_t *, *newch); + xz.avail_out = CAST(unsigned int, bytes_max); + + rc = lzma_code(&xz, LZMA_RUN); + if (rc != LZMA_OK && rc != LZMA_STREAM_END) + goto err; + + *n = CAST(size_t, xz.total_out); + + lzma_end(&xz); + + /* let's keep the nul-terminate tradition */ + (*newch)[*n] = '\0'; + + return OKDATA; +err: + snprintf(RCAST(char *, *newch), bytes_max, "unxz error %d", rc); + *n = strlen(RCAST(char *, *newch)); + return ERRDATA; +} +#endif + + static int makeerror(unsigned char **buf, size_t *len, const char *fmt, ...) { @@ -676,12 +785,24 @@ filter_error(unsigned char *ubuf, ssize_t n) private const char * methodname(size_t method) { + switch (method) { #ifdef BUILTIN_DECOMPRESS - /* FIXME: This doesn't cope with bzip2 */ - if (method == 2 || compr[method].maglen == 0) - return "zlib"; + case METH_FROZEN: + case METH_ZLIB: + return "zlib"; #endif - return compr[method].argv[0]; +#ifdef BUILTIN_BZLIB + case METH_BZIP: + return "bzlib"; +#endif +#ifdef BUILTIN_XZLIB + case METH_XZ: + case METH_LZMA: + return "xzlib"; +#endif + default: + return compr[method].argv[0]; + } } private int @@ -695,13 +816,26 @@ uncompressbuf(int fd, size_t bytes_max, size_t method, const unsigned char *old, size_t i; ssize_t r; + switch (method) { #ifdef BUILTIN_DECOMPRESS - /* FIXME: This doesn't cope with bzip2 */ - if (method == 2) + case METH_FROZEN: return uncompressgzipped(old, newch, bytes_max, n); - if (compr[method].maglen == 0) + case METH_ZLIB: return uncompresszlib(old, newch, bytes_max, n, 1); #endif +#ifdef BUILTIN_BZLIB + case METH_BZIP: + return uncompressbzlib(old, newch, bytes_max, n); +#endif +#ifdef BUILTIN_XZLIB + case METH_XZ: + case METH_LZMA: + return uncompressxzlib(old, newch, bytes_max, n); +#endif + default: + break; + } + (void)fflush(stdout); (void)fflush(stderr); diff --git a/src/encoding.c b/src/encoding.c index 76244f87f95..c3f3343150b 100644 --- a/src/encoding.c +++ b/src/encoding.c @@ -35,12 +35,11 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: encoding.c,v 1.20 2019/04/15 16:48:41 christos Exp $") +FILE_RCSID("@(#)$File: encoding.c,v 1.21 2019/06/08 20:49:14 christos Exp $") #endif /* lint */ #include "magic.h" #include -#include #include diff --git a/src/file.c b/src/file.c index 5b60b95f424..89d8cfb99a1 100644 --- a/src/file.c +++ b/src/file.c @@ -32,7 +32,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: file.c,v 1.181 2019/03/28 20:54:03 christos Exp $") +FILE_RCSID("@(#)$File: file.c,v 1.184 2019/08/03 11:51:59 christos Exp $") #endif /* lint */ #include "magic.h" @@ -76,13 +76,7 @@ int getopt_long(int, char * const *, const char *, # define IFLNK_L "" #endif -#ifdef HAVE_LIBSECCOMP -# define SECCOMP_S "S" -#else -# define SECCOMP_S "" -#endif - -#define FILE_FLAGS "bcCdE" IFLNK_h "ik" IFLNK_L "lNnprs" SECCOMP_S "vzZ0" +#define FILE_FLAGS "bcCdE" IFLNK_h "ik" IFLNK_L "lNnprsSvzZ0" #define OPTSTRING "bcCde:Ef:F:hiklLm:nNpP:rsSvzZ0" # define USAGE \ @@ -124,6 +118,7 @@ private const struct { { "ascii", MAGIC_NO_CHECK_ASCII }, { "cdf", MAGIC_NO_CHECK_CDF }, { "compress", MAGIC_NO_CHECK_COMPRESS }, + { "csv", MAGIC_NO_CHECK_CSV }, { "elf", MAGIC_NO_CHECK_ELF }, { "encoding", MAGIC_NO_CHECK_ENCODING }, { "soft", MAGIC_NO_CHECK_SOFT }, @@ -297,11 +292,11 @@ main(int argc, char *argv[]) case 's': flags |= MAGIC_DEVICES; break; -#ifdef HAVE_LIBSECCOMP case 'S': +#ifdef HAVE_LIBSECCOMP sandbox = 0; - break; #endif + break; case 'v': if (magicfile == NULL) magicfile = magic_getpath(magicfile, action); @@ -309,6 +304,9 @@ main(int argc, char *argv[]) VERSION); (void)fprintf(stdout, "magic file from %s\n", magicfile); +#ifdef HAVE_LIBSECCOMP + (void)fprintf(stdout, "seccomp support included\n"); +#endif return 0; case 'z': flags |= MAGIC_COMPRESS; diff --git a/src/file.h b/src/file.h index 69a586ab732..947f2089d0a 100644 --- a/src/file.h +++ b/src/file.h @@ -27,7 +27,7 @@ */ /* * file.h - definitions for file(1) program - * @(#)$File: file.h,v 1.206 2019/05/07 02:27:11 christos Exp $ + * @(#)$File: file.h,v 1.208 2019/06/26 20:31:31 christos Exp $ */ #ifndef __file_h__ @@ -479,6 +479,7 @@ protected int file_ascmagic_with_encoding(struct magic_set *, protected int file_encoding(struct magic_set *, const struct buffer *, unichar **, size_t *, const char **, const char **, const char **); protected int file_is_json(struct magic_set *, const struct buffer *); +protected int file_is_csv(struct magic_set *, const struct buffer *, int); protected int file_is_tar(struct magic_set *, const struct buffer *); protected int file_softmagic(struct magic_set *, const struct buffer *, uint16_t *, uint16_t *, int, int); diff --git a/src/file_opts.h b/src/file_opts.h index 02611ccb8a8..4f894cc551b 100644 --- a/src/file_opts.h +++ b/src/file_opts.h @@ -4,7 +4,10 @@ * The first column specifies the short name, if any, or 0 if none. * The second column specifies the long name. * The third column specifies whether it takes a parameter. - * The fourth column is the documentation. + * The fourth colums specifies whether is is marked as "default" + * if POSIXLY_CORRECT is defined: 1, + * if POSIXLY_CORRECT is not defined: 2. + * The fifth column is the documentation. * * N.B. The long options' order must correspond to the code in file.c, * and OPTSTRING must be kept up-to-date with the short options. @@ -54,8 +57,6 @@ OPT('P', "parameter", 1, 0, " set file engine parameter limits\n" OPT('r', "raw", 0, 0, " don't translate unprintable chars to \\ooo\n") OPT('s', "special-files", 0, 0, " treat special (block/char devices) files as\n" " ordinary ones\n") -#ifdef HAVE_LIBSECCOMP OPT('S', "no-sandbox", 0, 0, " disable system call sandboxing\n") -#endif OPT('C', "compile", 0, 0, " compile file specified by -m\n") OPT('d', "debug", 0, 0, " print debugging messages\n") diff --git a/src/fsmagic.c b/src/fsmagic.c index 25c4f811567..5204f20d0cd 100644 --- a/src/fsmagic.c +++ b/src/fsmagic.c @@ -32,7 +32,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: fsmagic.c,v 1.80 2019/04/23 18:59:27 christos Exp $") +FILE_RCSID("@(#)$File: fsmagic.c,v 1.81 2019/07/16 13:30:32 christos Exp $") #endif /* lint */ #include "magic.h" @@ -425,5 +425,11 @@ file_fsmagic(struct magic_set *ms, const char *fn, struct stat *sb) if (file_printf(ms, " ") == -1) return -1; } + /* + * If we were looking for extensions or apple (silent) it is not our + * job to print here, so don't count this as a match. + */ + if (ret == 1 && silent) + return 0; return ret; } diff --git a/src/funcs.c b/src/funcs.c index 23e7f32e63d..9cdec018266 100644 --- a/src/funcs.c +++ b/src/funcs.c @@ -27,7 +27,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: funcs.c,v 1.104 2019/05/07 02:27:11 christos Exp $") +FILE_RCSID("@(#)$File: funcs.c,v 1.108 2019/11/09 00:35:46 christos Exp $") #endif /* lint */ #include "magic.h" @@ -283,6 +283,17 @@ file_buffer(struct magic_set *ms, int fd, struct stat *st, } } + /* Check if we have a CSV file */ + if ((ms->flags & MAGIC_NO_CHECK_CSV) == 0) { + m = file_is_csv(ms, &b, looks_text); + if ((ms->flags & MAGIC_DEBUG) != 0) + (void)fprintf(stderr, "[try csv %d]\n", m); + if (m) { + if (checkdone(ms, &rv)) + goto done; + } + } + /* Check if we have a CDF file */ if ((ms->flags & MAGIC_NO_CHECK_CDF) == 0) { m = file_trycdf(ms, &b); @@ -545,7 +556,11 @@ file_regcomp(file_regex_t *rx, const char *pat, int flags) rx->old_lc_ctype = uselocale(rx->c_lc_ctype); assert(rx->old_lc_ctype != NULL); #else - rx->old_lc_ctype = setlocale(LC_CTYPE, "C"); + rx->old_lc_ctype = setlocale(LC_CTYPE, NULL); + assert(rx->old_lc_ctype != NULL); + rx->old_lc_ctype = strdup(rx->old_lc_ctype); + assert(rx->old_lc_ctype != NULL); + (void)setlocale(LC_CTYPE, "C"); #endif rx->pat = pat; @@ -558,7 +573,8 @@ file_regexec(file_regex_t *rx, const char *str, size_t nmatch, { assert(rx->rc == 0); /* XXX: force initialization because glibc does not always do this */ - memset(pmatch, 0, nmatch * sizeof(*pmatch)); + if (nmatch != 0) + memset(pmatch, 0, nmatch * sizeof(*pmatch)); return regexec(&rx->rx, str, nmatch, pmatch, eflags); } @@ -572,6 +588,7 @@ file_regfree(file_regex_t *rx) freelocale(rx->c_lc_ctype); #else (void)setlocale(LC_CTYPE, rx->old_lc_ctype); + free(rx->old_lc_ctype); #endif } diff --git a/src/is_csv.c b/src/is_csv.c new file mode 100644 index 00000000000..0081088c80e --- /dev/null +++ b/src/is_csv.c @@ -0,0 +1,197 @@ +/*- + * Copyright (c) 2019 Christos Zoulas + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * Parse CSV object serialization format (RFC-4180, RFC-7111) + */ + +#ifndef TEST +#include "file.h" + +#ifndef lint +FILE_RCSID("@(#)$File: is_csv.c,v 1.4 2019/06/26 20:31:31 christos Exp $") +#endif + +#include +#include "magic.h" +#else +#include +#endif + + +#ifdef DEBUG +#include +#define DPRINTF(fmt, ...) printf(fmt, __VA_ARGS__) +#else +#define DPRINTF(fmt, ...) +#endif + +/* + * if CSV_LINES == 0: + * check all the lines in the buffer + * otherwise: + * check only up-to the number of lines specified + * + * the last line count is always ignored if it does not end in CRLF + */ +#ifndef CSV_LINES +#define CSV_LINES 10 +#endif + +static int csv_parse(const unsigned char *, const unsigned char *); + +static const unsigned char * +eatquote(const unsigned char *uc, const unsigned char *ue) +{ + int quote = 0; + + while (uc < ue) { + unsigned char c = *uc++; + if (c != '"') { + // We already got one, done. + if (quote) { + return --uc; + } + continue; + } + if (quote) { + // quote-quote escapes + quote = 0; + continue; + } + // first quote + quote = 1; + } + return ue; +} + +static int +csv_parse(const unsigned char *uc, const unsigned char *ue) +{ + size_t nf = 0, tf = 0, nl = 0; + + while (uc < ue) { + unsigned char c; + switch (c = *uc++) { + case '"': + // Eat until the matching quote + uc = eatquote(uc, ue); + break; + case ',': + nf++; + break; + case '\n': + DPRINTF("%zu %zu %zu\n", nl, nf, tf); + nl++; +#if CSV_LINES + if (nl == CSV_LINES) + return tf != 0 && tf == nf; +#endif + if (tf == 0) { + // First time and no fields, give up + if (nf == 0) + return 0; + // First time, set the number of fields + tf = nf; + } else if (tf != nf) { + // Field number mismatch, we are done. + return 0; + } + nf = 0; + break; + default: + break; + } + } + return tf && nl > 2; +} + +#ifndef TEST +int +file_is_csv(struct magic_set *ms, const struct buffer *b, int looks_text) +{ + const unsigned char *uc = CAST(const unsigned char *, b->fbuf); + const unsigned char *ue = uc + b->flen; + int mime = ms->flags & MAGIC_MIME; + + if (!looks_text) + return 0; + + if ((ms->flags & (MAGIC_APPLE|MAGIC_EXTENSION)) != 0) + return 0; + + if (!csv_parse(uc, ue)) + return 0; + + if (mime == MAGIC_MIME_ENCODING) + return 1; + + if (mime) { + if (file_printf(ms, "application/csv") == -1) + return -1; + return 1; + } + + if (file_printf(ms, "CSV text") == -1) + return -1; + + return 1; +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include + +int +main(int argc, char *argv[]) +{ + int fd, rv; + struct stat st; + unsigned char *p; + + if ((fd = open(argv[1], O_RDONLY)) == -1) + err(EXIT_FAILURE, "Can't open `%s'", argv[1]); + + if (fstat(fd, &st) == -1) + err(EXIT_FAILURE, "Can't stat `%s'", argv[1]); + + if ((p = malloc(st.st_size)) == NULL) + err(EXIT_FAILURE, "Can't allocate %jd bytes", + (intmax_t)st.st_size); + if (read(fd, p, st.st_size) != st.st_size) + err(EXIT_FAILURE, "Can't read %jd bytes", + (intmax_t)st.st_size); + printf("is csv %d\n", csv_parse(p, p + st.st_size)); + return 0; +} +#endif diff --git a/src/magic.h.in b/src/magic.h.in index 0580fa21cce..d189a73c248 100644 --- a/src/magic.h.in +++ b/src/magic.h.in @@ -56,6 +56,7 @@ #define MAGIC_NO_CHECK_ELF 0x0010000 /* Don't check for elf details */ #define MAGIC_NO_CHECK_TEXT 0x0020000 /* Don't check for text files */ #define MAGIC_NO_CHECK_CDF 0x0040000 /* Don't check for cdf files */ +#define MAGIC_NO_CHECK_CSV 0x0080000 /* Don't check for CSV files */ #define MAGIC_NO_CHECK_TOKENS 0x0100000 /* Don't check tokens */ #define MAGIC_NO_CHECK_ENCODING 0x0200000 /* Don't check text encodings */ #define MAGIC_NO_CHECK_JSON 0x0400000 /* Don't check for JSON files */ @@ -68,6 +69,7 @@ MAGIC_NO_CHECK_APPTYPE | \ MAGIC_NO_CHECK_ELF | \ MAGIC_NO_CHECK_TEXT | \ + MAGIC_NO_CHECK_CSV | \ MAGIC_NO_CHECK_CDF | \ MAGIC_NO_CHECK_TOKENS | \ MAGIC_NO_CHECK_ENCODING | \ diff --git a/src/readcdf.c b/src/readcdf.c index e6ea8e47fb6..7622c7b08aa 100644 --- a/src/readcdf.c +++ b/src/readcdf.c @@ -26,7 +26,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: readcdf.c,v 1.73 2019/03/12 20:43:05 christos Exp $") +FILE_RCSID("@(#)$File: readcdf.c,v 1.74 2019/09/11 15:46:30 christos Exp $") #endif #include @@ -120,7 +120,11 @@ cdf_app_to_mime(const char *vbuf, const struct nv *nv) old_lc_ctype = uselocale(c_lc_ctype); assert(old_lc_ctype != NULL); #else - char *old_lc_ctype = setlocale(LC_CTYPE, "C"); + char *old_lc_ctype = setlocale(LC_CTYPE, NULL); + assert(old_lc_ctype != NULL); + old_lc_ctype = strdup(old_lc_ctype); + assert(old_lc_ctype != NULL); + (void)setlocale(LC_CTYPE, "C"); #endif for (i = 0; nv[i].pattern != NULL; i++) if (strcasestr(vbuf, nv[i].pattern) != NULL) { @@ -134,7 +138,8 @@ cdf_app_to_mime(const char *vbuf, const struct nv *nv) (void)uselocale(old_lc_ctype); freelocale(c_lc_ctype); #else - setlocale(LC_CTYPE, old_lc_ctype); + (void)setlocale(LC_CTYPE, old_lc_ctype); + free(old_lc_ctype); #endif return rv; } diff --git a/src/readelf.c b/src/readelf.c index ef61d4cd600..40bcfab11dc 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -27,7 +27,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: readelf.c,v 1.165 2019/05/07 02:27:11 christos Exp $") +FILE_RCSID("@(#)$File: readelf.c,v 1.168 2019/12/16 03:49:19 christos Exp $") #endif #ifdef BUILTIN_ELF @@ -1140,6 +1140,9 @@ donote(struct magic_set *ms, void *vbuf, size_t offset, size_t size, */ return xnh_sizeof + offset; } + /*XXX: GCC */ + memset(&nh32, 0, sizeof(nh32)); + memset(&nh64, 0, sizeof(nh64)); memcpy(xnh_addr, &nbuf[offset], xnh_sizeof); offset += xnh_sizeof; @@ -1345,6 +1348,13 @@ doshn(struct magic_set *ms, int clazz, int swap, int fd, off_t off, int num, } name_off = xsh_offset; + if (fsize != SIZE_UNKNOWN && fsize < name_off) { + if (file_printf(ms, ", too large section header offset %td", + name_off) == -1) + return -1; + return 0; + } + for ( ; num; num--) { /* Read the name of this section. */ if ((namesize = pread(fd, name, sizeof(name) - 1, @@ -1628,7 +1638,6 @@ dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off, /* Things we can determine before we seek */ switch (xph_type) { case PT_DYNAMIC: - linking_style = "dynamically"; doread = 1; break; case PT_NOTE: @@ -1644,6 +1653,7 @@ dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off, } /*FALLTHROUGH*/ case PT_INTERP: + linking_style = "dynamically"; doread = 1; break; default: diff --git a/src/seccomp.c b/src/seccomp.c index 1b9d9b85593..902a3eba786 100644 --- a/src/seccomp.c +++ b/src/seccomp.c @@ -27,12 +27,13 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: seccomp.c,v 1.8 2019/02/24 18:12:04 christos Exp $") +FILE_RCSID("@(#)$File: seccomp.c,v 1.11 2019/07/18 20:32:06 christos Exp $") #endif /* lint */ #if HAVE_LIBSECCOMP #include /* libseccomp */ #include /* prctl */ +#include #include #include #include @@ -49,8 +50,14 @@ FILE_RCSID("@(#)$File: seccomp.c,v 1.8 2019/02/24 18:12:04 christos Exp $") goto out; \ while (/*CONSTCOND*/0) -static scmp_filter_ctx ctx; +#define ALLOW_IOCTL_RULE(param) \ + do \ + if (seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(ioctl), 1, \ + SCMP_CMP(1, SCMP_CMP_EQ, param)) == -1) \ + goto out; \ + while (/*CONSTCOND*/0) +static scmp_filter_ctx ctx; int enable_sandbox_basic(void) @@ -167,11 +174,21 @@ enable_sandbox_full(void) ALLOW_RULE(fcntl64); ALLOW_RULE(fstat); ALLOW_RULE(fstat64); +#ifdef XZLIBSUPPORT + ALLOW_RULE(futex); +#endif ALLOW_RULE(getdents); #ifdef __NR_getdents64 ALLOW_RULE(getdents64); #endif - ALLOW_RULE(ioctl); +#ifdef FIONREAD + // called in src/compress.c under sread + ALLOW_IOCTL_RULE(FIONREAD); +#endif +#ifdef TIOCGWINSZ + // musl libc may call ioctl TIOCGWINSZ when calling stdout + ALLOW_IOCTL_RULE(TIOCGWINSZ); +#endif ALLOW_RULE(lseek); ALLOW_RULE(_llseek); ALLOW_RULE(lstat); @@ -197,6 +214,7 @@ enable_sandbox_full(void) ALLOW_RULE(stat); ALLOW_RULE(stat64); ALLOW_RULE(sysinfo); + ALLOW_RULE(umask); // Used in file_pipe2file() ALLOW_RULE(unlink); ALLOW_RULE(write); diff --git a/src/vasprintf.c b/src/vasprintf.c index c87465bd534..49d33d4a4ac 100644 --- a/src/vasprintf.c +++ b/src/vasprintf.c @@ -96,7 +96,7 @@ the buffer can have a shorter length. But what? If you really need to write HUGE string, don't use printf! During the process, some other memory is allocated (1024 bytes minimum) to handle the output of partial sprintf() calls. If you have only 10000 bytes -free in memory, you *may* not be able to nprintf() a 8000 bytes-long text. +free in memory, you *may* not be able to nprintf() an 8000 bytes-long text. note: if a buffer overflow occurs, exit() is called. This situation should never appear ... but if you want to be *really* sure, you have to modify the @@ -108,7 +108,7 @@ you use strange formats. #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: vasprintf.c,v 1.16 2018/10/01 18:45:39 christos Exp $") +FILE_RCSID("@(#)$File: vasprintf.c,v 1.17 2019/11/15 21:03:14 christos Exp $") #endif /* lint */ #include diff --git a/tests/JW07022A.mp3.result b/tests/JW07022A.mp3.result index 2252c526fa0..8a3e11952ea 100644 --- a/tests/JW07022A.mp3.result +++ b/tests/JW07022A.mp3.result @@ -1 +1 @@ -Audio file with ID3 version 2.2.0, contains:MPEG ADTS, layer III, v1, 96 kbps, 44.1 kHz, Monaural \ No newline at end of file +Audio file with ID3 version 2.2.0, contains:MPEG ADTS, layer III, v1, 96 kbps, 44.1 kHz, Monaural \ No newline at end of file diff --git a/tests/Makefile.in b/tests/Makefile.in index 938a96c864c..2b0fa75be74 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -121,7 +121,8 @@ am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/test-test.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -211,6 +212,7 @@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MINGW = @MINGW@ @@ -384,8 +386,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -416,7 +418,13 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-test.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @@ -514,7 +522,10 @@ cscopelist-am: $(am__tagged_files) distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -586,7 +597,7 @@ clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/test-test.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -632,7 +643,7 @@ install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/test-test.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -653,19 +664,19 @@ uninstall-am: .MAKE: check-am install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am check check-am check-local clean \ - clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \ - ctags ctags-am distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-am uninstall uninstall-am +.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am \ + check-local clean clean-checkPROGRAMS clean-generic \ + clean-libtool cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile diff --git a/tests/test.c b/tests/test.c index 330a357b3d4..502522f9d12 100644 --- a/tests/test.c +++ b/tests/test.c @@ -102,10 +102,10 @@ main(int argc, char **argv) desired = slurp(fp, &desired_len); fclose(fp); (void)printf("%s: %s\n", argv[1], result); - if (strcmp(result, desired) != 0) { + if (strcmp(result, desired) != 0) { (void)fprintf(stderr, "Error: result was\n%s\nexpected:\n%s\n", result, desired); return 1; - } + } } } } From 9b36723388048ad6c120166fbc200bc16eb6a001 Mon Sep 17 00:00:00 2001 From: Kyle Evans Date: Mon, 10 Feb 2020 02:40:23 +0000 Subject: [PATCH 040/144] cron(8): convert vfork() usage to fork() vfork() is error-prone, and the usage here definitely grew to not be clearly OK given vfork-semantics; e.g. setusercontext(3) within the child. Rip out vfork() and the rest of the references to it. fork is heavier, but it's unclear that the difference will be all that obvious. Reported by: Andrew Gierth and sigsys@gmail.com --- usr.sbin/cron/cron/compat.h | 4 ---- usr.sbin/cron/cron/do_command.c | 17 +++++++---------- usr.sbin/cron/cron/externs.h | 4 ---- usr.sbin/cron/cron/popen.c | 2 +- usr.sbin/cron/lib/compat.c | 12 ------------ 5 files changed, 8 insertions(+), 31 deletions(-) diff --git a/usr.sbin/cron/cron/compat.h b/usr.sbin/cron/cron/compat.h index 905c3aaf3bd..ba32a31b417 100644 --- a/usr.sbin/cron/cron/compat.h +++ b/usr.sbin/cron/cron/compat.h @@ -76,10 +76,6 @@ /*****************************************************************/ -#if !defined(BSD) && !defined(HPUX) && !defined(CONVEX) && !defined(__linux) -# define NEED_VFORK -#endif - #if (!defined(BSD) || (BSD < 198902)) && !defined(__linux) && \ !defined(IRIX) && !defined(NeXT) && !defined(HPUX) # define NEED_STRCASECMP diff --git a/usr.sbin/cron/cron/do_command.c b/usr.sbin/cron/cron/do_command.c index 375f55caf7c..8d759dda031 100644 --- a/usr.sbin/cron/cron/do_command.c +++ b/usr.sbin/cron/cron/do_command.c @@ -58,9 +58,6 @@ do_command(e, u) /* fork to become asynchronous -- parent process is done immediately, * and continues to run the normal cron code, which means return to * tick(). the child and grandchild don't leave this function, alive. - * - * vfork() is unsuitable, since we have much to do, and the parent - * needs to be able to run off and fork other processes. */ switch ((pid = fork())) { case -1: @@ -222,13 +219,13 @@ child_process(e, u) /* fork again, this time so we can exec the user's command. */ - switch (jobpid = vfork()) { + switch (jobpid = fork()) { case -1: - log_it("CRON",getpid(),"error","can't vfork"); + log_it("CRON",getpid(),"error","can't fork"); exit(ERROR_EXIT); /*NOTREACHED*/ case 0: - Debug(DPROC, ("[%d] grandchild process Vfork()'ed\n", + Debug(DPROC, ("[%d] grandchild process fork()'ed\n", getpid())) if (e->uid == ROOT_UID) @@ -315,24 +312,24 @@ child_process(e, u) if (setgid(e->gid) != 0) { log_it(usernm, getpid(), "error", "setgid failed"); - exit(ERROR_EXIT); + _exit(ERROR_EXIT); } # if defined(BSD) if (initgroups(usernm, e->gid) != 0) { log_it(usernm, getpid(), "error", "initgroups failed"); - exit(ERROR_EXIT); + _exit(ERROR_EXIT); } # endif if (setlogin(usernm) != 0) { log_it(usernm, getpid(), "error", "setlogin failed"); - exit(ERROR_EXIT); + _exit(ERROR_EXIT); } if (setuid(e->uid) != 0) { log_it(usernm, getpid(), "error", "setuid failed"); - exit(ERROR_EXIT); + _exit(ERROR_EXIT); } /* we aren't root after this..*/ #if defined(LOGIN_CAP) diff --git a/usr.sbin/cron/cron/externs.h b/usr.sbin/cron/cron/externs.h index 64bc8aceeb3..8b1ff71b36e 100644 --- a/usr.sbin/cron/cron/externs.h +++ b/usr.sbin/cron/cron/externs.h @@ -141,7 +141,3 @@ extern int getdtablesize(void); #ifdef NEED_SETENV extern int setenv(char *, char *, int); #endif - -#ifdef NEED_VFORK -extern PID_T vfork(void); -#endif diff --git a/usr.sbin/cron/cron/popen.c b/usr.sbin/cron/cron/popen.c index 73e6e28d748..44aaa0c990f 100644 --- a/usr.sbin/cron/cron/popen.c +++ b/usr.sbin/cron/cron/popen.c @@ -112,7 +112,7 @@ cron_popen(program, type, e, pidptr) #endif iop = NULL; - switch(pid = vfork()) { + switch(pid = fork()) { case -1: /* error */ (void)close(pdes[0]); (void)close(pdes[1]); diff --git a/usr.sbin/cron/lib/compat.c b/usr.sbin/cron/lib/compat.c index 96860128882..3cdbae920d4 100644 --- a/usr.sbin/cron/lib/compat.c +++ b/usr.sbin/cron/lib/compat.c @@ -35,18 +35,6 @@ static char rcsid[] = "$FreeBSD$"; #include -/* the code does not depend on any of vfork's - * side-effects; it just uses it as a quick - * fork-and-exec. - */ -#ifdef NEED_VFORK -PID_T -vfork() { - return (fork()); -} -#endif - - #ifdef NEED_STRDUP char * strdup(str) From 1709a13c7cb961fd242b5d8aa192b4de9d78ba53 Mon Sep 17 00:00:00 2001 From: Kyle Evans Date: Mon, 10 Feb 2020 02:44:29 +0000 Subject: [PATCH 041/144] cron(8): rip out do_univ This was an old Dynix hack, the function is a NOP on FreeBSD. We have no need to retain this; Dynix was discontinued long ago. --- usr.sbin/cron/cron/do_command.c | 47 +-------------------------------- 1 file changed, 1 insertion(+), 46 deletions(-) diff --git a/usr.sbin/cron/cron/do_command.c b/usr.sbin/cron/cron/do_command.c index 8d759dda031..214baf2133e 100644 --- a/usr.sbin/cron/cron/do_command.c +++ b/usr.sbin/cron/cron/do_command.c @@ -38,8 +38,7 @@ static const char rcsid[] = #endif -static void child_process(entry *, user *), - do_univ(user *); +static void child_process(entry *, user *); static WAIT_T wait_on_child(PID_T, const char *); @@ -278,12 +277,6 @@ child_process(e, u) close(stdin_pipe[READ_PIPE]); close(stdout_pipe[WRITE_PIPE]); - /* set our login universe. Do this in the grandchild - * so that the child can invoke /usr/lib/sendmail - * without surprises. - */ - do_univ(u); - environ = NULL; # if defined(LOGIN_CAP) @@ -639,41 +632,3 @@ wait_on_child(PID_T childpid, const char *name) { return waiter; } - - -static void -do_univ(u) - user *u; -{ -#if defined(sequent) -/* Dynix (Sequent) hack to put the user associated with - * the passed user structure into the ATT universe if - * necessary. We have to dig the gecos info out of - * the user's password entry to see if the magic - * "universe(att)" string is present. - */ - - struct passwd *p; - char *s; - int i; - - p = getpwuid(u->uid); - (void) endpwent(); - - if (p == NULL) - return; - - s = p->pw_gecos; - - for (i = 0; i < 4; i++) - { - if ((s = strchr(s, ',')) == NULL) - return; - s++; - } - if (strcmp(s, "universe(att)")) - return; - - (void) universe(U_ATT); -#endif -} From 9e4029ff4920d3eedfb897cd08d4ffa611920edf Mon Sep 17 00:00:00 2001 From: Xin LI Date: Mon, 10 Feb 2020 04:16:41 +0000 Subject: [PATCH 042/144] Use humanize_number to format available and bad space sizes. Reviewed by: mckusick (earlier version) MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D23050 --- sbin/fsck_msdosfs/Makefile | 3 ++- sbin/fsck_msdosfs/check.c | 30 ++++++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/sbin/fsck_msdosfs/Makefile b/sbin/fsck_msdosfs/Makefile index b101724a880..bce48211b58 100644 --- a/sbin/fsck_msdosfs/Makefile +++ b/sbin/fsck_msdosfs/Makefile @@ -9,6 +9,7 @@ PROG= fsck_msdosfs MAN= fsck_msdosfs.8 SRCS= main.c check.c boot.c fat.c dir.c fsutil.c -CFLAGS+= -I${FSCK} +CFLAGS+= -I${FSCK} -DHAVE_LIBUTIL_H +LIBADD= util .include diff --git a/sbin/fsck_msdosfs/check.c b/sbin/fsck_msdosfs/check.c index 2c3866223a7..efa7241ddc0 100644 --- a/sbin/fsck_msdosfs/check.c +++ b/sbin/fsck_msdosfs/check.c @@ -33,6 +33,9 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* not lint */ +#ifdef HAVE_LIBUTIL_H +#include +#endif #include #include #include @@ -126,15 +129,38 @@ checkfilesys(const char *fname) mod |= FSERROR; } +#ifdef HAVE_LIBUTIL_H + char freestr[7], badstr[7]; + + int64_t freebytes = boot.NumFree * boot.ClusterSize; + humanize_number(freestr, sizeof(freestr), freebytes, "", + HN_AUTOSCALE, HN_DECIMAL | HN_IEC_PREFIXES); + if (boot.NumBad) { + int64_t badbytes = boot.NumBad * boot.ClusterSize; + + humanize_number(badstr, sizeof(badstr), badbytes, "", + HN_AUTOSCALE, HN_B | HN_DECIMAL | HN_IEC_PREFIXES); + + pwarn("%d files, %sB free (%d clusters), %sB bad (%d clusters)\n", + boot.NumFiles, + freestr, boot.NumFree, + badstr, boot.NumBad); + } else { + pwarn("%d files, %sB free (%d clusters)\n", + boot.NumFiles, + freestr, boot.NumFree); + } +#else if (boot.NumBad) - pwarn("%d files, %d free (%d clusters), %d bad (%d clusters)\n", + pwarn("%d files, %d KiB free (%d clusters), %d KiB bad (%d clusters)\n", boot.NumFiles, boot.NumFree * boot.ClusterSize / 1024, boot.NumFree, boot.NumBad * boot.ClusterSize / 1024, boot.NumBad); else - pwarn("%d files, %d free (%d clusters)\n", + pwarn("%d files, %d KiB free (%d clusters)\n", boot.NumFiles, boot.NumFree * boot.ClusterSize / 1024, boot.NumFree); +#endif if (mod && (mod & FSERROR) == 0) { if (mod & FSDIRTY) { From d82c0ebc694e7e991ab08b9ea1b45762876e5ebc Mon Sep 17 00:00:00 2001 From: Hans Petter Selasky Date: Mon, 10 Feb 2020 11:09:56 +0000 Subject: [PATCH 043/144] Add USB host controller PCI ID's for Hygon. Differential Revision: https://reviews.freebsd.org/D23564 MFC after: 1 week Sponsored by: Mellanox Technologies --- sys/dev/usb/controller/ehci_pci.c | 4 ++++ sys/dev/usb/controller/ohci_pci.c | 4 ++++ sys/dev/usb/controller/xhci_pci.c | 3 +++ 3 files changed, 11 insertions(+) diff --git a/sys/dev/usb/controller/ehci_pci.c b/sys/dev/usb/controller/ehci_pci.c index a918bf679a2..7783c157046 100644 --- a/sys/dev/usb/controller/ehci_pci.c +++ b/sys/dev/usb/controller/ehci_pci.c @@ -86,6 +86,7 @@ __FBSDID("$FreeBSD$"); #define PCI_EHCI_VENDORID_APPLE 0x106b #define PCI_EHCI_VENDORID_ATI 0x1002 #define PCI_EHCI_VENDORID_CMDTECH 0x1095 +#define PCI_EHCI_VENDORID_HYGON 0x1d94 #define PCI_EHCI_VENDORID_INTEL 0x8086 #define PCI_EHCI_VENDORID_NEC 0x1033 #define PCI_EHCI_VENDORID_OPTI 0x1045 @@ -375,6 +376,9 @@ ehci_pci_attach(device_t self) case PCI_EHCI_VENDORID_CMDTECH: sprintf(sc->sc_vendor, "CMDTECH"); break; + case PCI_EHCI_VENDORID_HYGON: + sprintf(sc->sc_vendor, "Hygon"); + break; case PCI_EHCI_VENDORID_INTEL: sprintf(sc->sc_vendor, "Intel"); break; diff --git a/sys/dev/usb/controller/ohci_pci.c b/sys/dev/usb/controller/ohci_pci.c index 27929aa25ff..882a9db8885 100644 --- a/sys/dev/usb/controller/ohci_pci.c +++ b/sys/dev/usb/controller/ohci_pci.c @@ -83,6 +83,7 @@ __FBSDID("$FreeBSD$"); #define PCI_OHCI_VENDORID_APPLE 0x106b #define PCI_OHCI_VENDORID_ATI 0x1002 #define PCI_OHCI_VENDORID_CMDTECH 0x1095 +#define PCI_OHCI_VENDORID_HYGON 0x1d94 #define PCI_OHCI_VENDORID_NEC 0x1033 #define PCI_OHCI_VENDORID_NVIDIA 0x12D2 #define PCI_OHCI_VENDORID_NVIDIA2 0x10DE @@ -280,6 +281,9 @@ ohci_pci_attach(device_t self) case PCI_OHCI_VENDORID_CMDTECH: sprintf(sc->sc_vendor, "CMDTECH"); break; + case PCI_OHCI_VENDORID_HYGON: + sprintf(sc->sc_vendor, "Hygon"); + break; case PCI_OHCI_VENDORID_NEC: sprintf(sc->sc_vendor, "NEC"); break; diff --git a/sys/dev/usb/controller/xhci_pci.c b/sys/dev/usb/controller/xhci_pci.c index a96c21ddd66..5c59d7c989d 100644 --- a/sys/dev/usb/controller/xhci_pci.c +++ b/sys/dev/usb/controller/xhci_pci.c @@ -107,6 +107,9 @@ xhci_pci_match(device_t self) case 0x78141022: return ("AMD FCH USB 3.0 controller"); + case 0x145f1d94: + return ("Hygon USB 3.0 controller"); + case 0x01941033: return ("NEC uPD720200 USB 3.0 controller"); case 0x00151912: From 0b40dcbe32fd67646eb84ed89c6f4c1477bcc884 Mon Sep 17 00:00:00 2001 From: Edward Tomasz Napierala Date: Mon, 10 Feb 2020 13:24:14 +0000 Subject: [PATCH 044/144] Make linux(4) use kern_socketpair(9) instead of going through sys_socketpair(). It's a cleanup; no functional changes. Reviewed by: kib MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D22814 --- sys/compat/linux/linux_socket.c | 34 ++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/sys/compat/linux/linux_socket.c b/sys/compat/linux/linux_socket.c index 7d297733d96..a96436db22b 100644 --- a/sys/compat/linux/linux_socket.c +++ b/sys/compat/linux/linux_socket.c @@ -753,25 +753,19 @@ linux_getpeername(struct thread *td, struct linux_getpeername_args *args) int linux_socketpair(struct thread *td, struct linux_socketpair_args *args) { - struct socketpair_args /* { - int domain; - int type; - int protocol; - int *rsv; - } */ bsd_args; - int error; + int domain, error, sv[2], type; - bsd_args.domain = linux_to_bsd_domain(args->domain); - if (bsd_args.domain != PF_LOCAL) + domain = linux_to_bsd_domain(args->domain); + if (domain != PF_LOCAL) return (EAFNOSUPPORT); - bsd_args.type = args->type & LINUX_SOCK_TYPE_MASK; - if (bsd_args.type < 0 || bsd_args.type > LINUX_SOCK_MAX) + type = args->type & LINUX_SOCK_TYPE_MASK; + if (type < 0 || type > LINUX_SOCK_MAX) return (EINVAL); error = linux_set_socket_flags(args->type & ~LINUX_SOCK_TYPE_MASK, - &bsd_args.type); + &type); if (error != 0) return (error); - if (args->protocol != 0 && args->protocol != PF_UNIX) + if (args->protocol != 0 && args->protocol != PF_UNIX) { /* * Use of PF_UNIX as protocol argument is not right, @@ -780,10 +774,16 @@ linux_socketpair(struct thread *td, struct linux_socketpair_args *args) * to FreeBSD one. */ return (EPROTONOSUPPORT); - else - bsd_args.protocol = 0; - bsd_args.rsv = (int *)PTRIN(args->rsv); - return (sys_socketpair(td, &bsd_args)); + } + error = kern_socketpair(td, domain, type, 0, sv); + if (error != 0) + return (error); + error = copyout(sv, PTRIN(args->rsv), 2 * sizeof(int)); + if (error != 0) { + (void)kern_close(td, sv[0]); + (void)kern_close(td, sv[1]); + } + return (error); } #if defined(__i386__) || (defined(__amd64__) && defined(COMPAT_LINUX32)) From d1e553875865bbbba22421bd7b6d51bddaff673b Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Mon, 10 Feb 2020 13:52:25 +0000 Subject: [PATCH 045/144] Tidy up zpcpu_replace* - only compute the target address once - remove spurious type casting, zpcpu_get already return the correct type While here add missing newlines to other routines. --- sys/sys/pcpu.h | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/sys/sys/pcpu.h b/sys/sys/pcpu.h index f859d09554c..0a6764b80e9 100644 --- a/sys/sys/pcpu.h +++ b/sys/sys/pcpu.h @@ -245,32 +245,41 @@ extern struct pcpu *cpuid_to_pcpu[]; * If you need atomicity use xchg. * */ #define zpcpu_replace(base, val) ({ \ - __typeof(val) _old = *(__typeof(base))zpcpu_get(base); \ - *(__typeof(val) *)zpcpu_get(base) = val; \ + __typeof(val) *_ptr = zpcpu_get(base); \ + __typeof(val) _old; \ + \ + _old = *_ptr; \ + *_ptr = val; \ _old; \ }) #define zpcpu_replace_cpu(base, val, cpu) ({ \ - __typeof(val) _old = *(__typeof(base))zpcpu_get_cpu(base, cpu); \ - *(__typeof(val) *)zpcpu_get_cpu(base, cpu) = val; \ + __typeof(val) *_ptr = zpcpu_get_cpu(base, cpu); \ + __typeof(val) _old; \ + \ + _old = *_ptr; \ + *_ptr = val; \ _old; \ }) #define zpcpu_set_protected(base, val) ({ \ MPASS(curthread->td_critnest > 0); \ __typeof(val) *_ptr = zpcpu_get(base); \ + \ *_ptr = (val); \ }) #define zpcpu_add_protected(base, val) ({ \ MPASS(curthread->td_critnest > 0); \ __typeof(val) *_ptr = zpcpu_get(base); \ + \ *_ptr += (val); \ }) #define zpcpu_sub_protected(base, val) ({ \ MPASS(curthread->td_critnest > 0); \ __typeof(val) *_ptr = zpcpu_get(base); \ + \ *_ptr -= (val); \ }) From cd951a0d8ed96777b97875173e64f95644ca92ac Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Mon, 10 Feb 2020 13:54:34 +0000 Subject: [PATCH 046/144] vfs: fix lock recursion in vrele vrele is supposed to be called with an unlocked vnode, but this was never asserted for if v_usecount was > 0. For such counts the lock is never touched by the routine. As a result the kernel has several consumers which expect vunref semantics and get away with calling vrele since they happen to never do it when this is the last reference (and for some of them this may happen to be a guarantee). Work around the problem by changing vrele semantics to tolerate being called with a lock. This eliminates a possible bug where the lock is already held and vputx takes it anyway. Reviewed by: kib Tested by: pho Differential Revision: https://reviews.freebsd.org/D23528 --- sys/kern/vfs_subr.c | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index 7137031dee0..70c8e777b00 100644 --- a/sys/kern/vfs_subr.c +++ b/sys/kern/vfs_subr.c @@ -3170,6 +3170,7 @@ static void vputx(struct vnode *vp, enum vputx_op func) { int error; + bool want_unlock; KASSERT(vp != NULL, ("vputx: null vp")); if (func == VPUTX_VUNREF) @@ -3221,13 +3222,31 @@ vputx(struct vnode *vp, enum vputx_op func) * as VI_DOINGINACT to avoid recursion. */ vp->v_iflag |= VI_OWEINACT; + want_unlock = false; + error = 0; switch (func) { case VPUTX_VRELE: - error = vn_lock(vp, LK_EXCLUSIVE | LK_INTERLOCK); - VI_LOCK(vp); + switch (VOP_ISLOCKED(vp)) { + case LK_EXCLUSIVE: + break; + case LK_EXCLOTHER: + case 0: + want_unlock = true; + error = vn_lock(vp, LK_EXCLUSIVE | LK_INTERLOCK); + VI_LOCK(vp); + break; + default: + /* + * The lock has at least one sharer, but we have no way + * to conclude whether this is us. Play it safe and + * defer processing. + */ + error = EAGAIN; + break; + } break; case VPUTX_VPUT: - error = 0; + want_unlock = true; if (VOP_ISLOCKED(vp) != LK_EXCLUSIVE) { error = VOP_LOCK(vp, LK_UPGRADE | LK_INTERLOCK | LK_NOWAIT); @@ -3235,7 +3254,6 @@ vputx(struct vnode *vp, enum vputx_op func) } break; case VPUTX_VUNREF: - error = 0; if (VOP_ISLOCKED(vp) != LK_EXCLUSIVE) { error = VOP_LOCK(vp, LK_TRYUPGRADE | LK_INTERLOCK); VI_LOCK(vp); @@ -3244,7 +3262,7 @@ vputx(struct vnode *vp, enum vputx_op func) } if (error == 0) { vinactive(vp); - if (func != VPUTX_VUNREF) + if (want_unlock) VOP_UNLOCK(vp); vdropl(vp); } else { From 85eb41f7513e12c7371a32d016db7a16afd088b6 Mon Sep 17 00:00:00 2001 From: Scott Long Date: Mon, 10 Feb 2020 14:27:28 +0000 Subject: [PATCH 047/144] Revert r357710 and 357711 until they can be debugged --- sys/cam/ata/ata_da.c | 5 ----- sys/cam/nvme/nvme_da.c | 5 ----- sys/cam/scsi/scsi_da.c | 4 ---- sys/ufs/ffs/ffs_softdep.c | 3 --- sys/ufs/ffs/ffs_vfsops.c | 9 +-------- sys/ufs/ufs/ufsmount.h | 1 - 6 files changed, 1 insertion(+), 26 deletions(-) diff --git a/sys/cam/ata/ata_da.c b/sys/cam/ata/ata_da.c index 4e906c5e571..fd8bb6e427f 100644 --- a/sys/cam/ata/ata_da.c +++ b/sys/cam/ata/ata_da.c @@ -50,7 +50,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #endif /* _KERNEL */ @@ -1567,10 +1566,6 @@ adagetattr(struct bio *bp) int ret; struct cam_periph *periph; - /* TODO: tunable knob */ - if (g_handleattr_int(bp, "GEOM::canspeedup", 1)) - return (0); - periph = (struct cam_periph *)bp->bio_disk->d_drv1; cam_periph_lock(periph); ret = xpt_getattr(bp->bio_data, bp->bio_length, bp->bio_attribute, diff --git a/sys/cam/nvme/nvme_da.c b/sys/cam/nvme/nvme_da.c index 4560df5c4c7..1af30620663 100644 --- a/sys/cam/nvme/nvme_da.c +++ b/sys/cam/nvme/nvme_da.c @@ -48,7 +48,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #endif /* _KERNEL */ @@ -701,10 +700,6 @@ ndagetattr(struct bio *bp) int ret; struct cam_periph *periph; - /* TODO: tunable knob */ - if (g_handleattr_int(bp, "GEOM::canspeedup", 1)) - return (0); - periph = (struct cam_periph *)bp->bio_disk->d_drv1; cam_periph_lock(periph); ret = xpt_getattr(bp->bio_data, bp->bio_length, bp->bio_attribute, diff --git a/sys/cam/scsi/scsi_da.c b/sys/cam/scsi/scsi_da.c index 750aee2cf9c..cadc438b60e 100644 --- a/sys/cam/scsi/scsi_da.c +++ b/sys/cam/scsi/scsi_da.c @@ -1942,10 +1942,6 @@ dagetattr(struct bio *bp) int ret; struct cam_periph *periph; - /* TODO: tunable knob for this */ - if (g_handleattr_int(bp, "GEOM::canspeedup", 1)) - return (0); - periph = (struct cam_periph *)bp->bio_disk->d_drv1; cam_periph_lock(periph); ret = xpt_getattr(bp->bio_data, bp->bio_length, bp->bio_attribute, diff --git a/sys/ufs/ffs/ffs_softdep.c b/sys/ufs/ffs/ffs_softdep.c index 4e6ed2fe8d6..8b88bf12c2a 100644 --- a/sys/ufs/ffs/ffs_softdep.c +++ b/sys/ufs/ffs/ffs_softdep.c @@ -1464,9 +1464,6 @@ softdep_send_speedup(struct ufsmount *ump, size_t shortage, u_int flags) { struct buf *bp; - if ((ump->um_flags & UM_CANSPEEDUP) == 0) - return; - bp = malloc(sizeof(*bp), M_TRIM, M_WAITOK | M_ZERO); bp->b_iocmd = BIO_SPEEDUP; bp->b_ioflags = flags; diff --git a/sys/ufs/ffs/ffs_vfsops.c b/sys/ufs/ffs/ffs_vfsops.c index d276b30e247..d4c730fe20f 100644 --- a/sys/ufs/ffs/ffs_vfsops.c +++ b/sys/ufs/ffs/ffs_vfsops.c @@ -794,7 +794,7 @@ ffs_mountfs(devvp, mp, td) struct ucred *cred; struct g_consumer *cp; struct mount *nmp; - int candelete, canspeedup; + int candelete; off_t loc; fs = NULL; @@ -1011,13 +1011,6 @@ ffs_mountfs(devvp, mp, td) } } - /* TODO: sysctl tunables, runtime modification */ - len = sizeof(int); - if (g_io_getattr("GEOM::canspeedup", cp, &len, &canspeedup) == 0) { - if (canspeedup) - ump->um_flags |= UM_CANSPEEDUP; - } - ump->um_mountp = mp; ump->um_dev = dev; ump->um_devvp = devvp; diff --git a/sys/ufs/ufs/ufsmount.h b/sys/ufs/ufs/ufsmount.h index 493571442d6..fd2d153ec75 100644 --- a/sys/ufs/ufs/ufsmount.h +++ b/sys/ufs/ufs/ufsmount.h @@ -131,7 +131,6 @@ struct ufsmount { */ #define UM_CANDELETE 0x00000001 /* devvp supports TRIM */ #define UM_WRITESUSPENDED 0x00000002 /* suspension in progress */ -#define UM_CANSPEEDUP 0x00000004 /* devvp supports SPEEDUP */ /* * function prototypes From d2299c69ff7f250717b6bafdfdc9f7dea4652757 Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Mon, 10 Feb 2020 17:16:26 +0000 Subject: [PATCH 048/144] Remove sparc64 example. Reivewed by: cy@, bcr@ Differential Revision: https://reviews.freebsd.org/D23593 --- usr.sbin/binmiscctl/binmiscctl.8 | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/usr.sbin/binmiscctl/binmiscctl.8 b/usr.sbin/binmiscctl/binmiscctl.8 index 5b543148ea0..1df1a35b992 100644 --- a/usr.sbin/binmiscctl/binmiscctl.8 +++ b/usr.sbin/binmiscctl/binmiscctl.8 @@ -27,7 +27,7 @@ .\" .\" Support for miscellaneous binary image activators .\" -.Dd July 21, 2018 +.Dd February 10, 2020 .Dt BINMISCCTL 8 .Os .Sh NAME @@ -271,17 +271,6 @@ Add QEMU bsd-user program as an image activator for PowerPC64 binaries: \exff\exff\exff\exff\exff\exff\exff\exfe\exff\exff" \e --size 20 --set-enabled .Ed -.Pp -Add QEMU bsd-user program as an image activator for SPARC64 binaries: -.Bd -literal -offset indent -# binmiscctl add sparc64 \e - --interpreter "/usr/local/bin/qemu-sparc64-static" \e - --magic "\ex7f\ex45\ex4c\ex46\ex02\ex02\ex01\ex00\ex00\ex00\e - \ex00\ex00\ex00\ex00\ex00\ex00\ex00\ex02\ex00\ex2b" \e - --mask "\exff\exff\exff\exff\exff\exff\exff\ex00\exff\exff\e - \exff\exff\exff\exff\exff\exff\exff\exfe\exff\exff" \e - --size 20 --set-enabled -.Ed .Ss "Create and use an ARMv6 chroot on an AMD64 host" Use an existing source tree to build a chroot host with architecture overrides: From 7047dceee324253dca193c38fec5e5e8ae1521ce Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Mon, 10 Feb 2020 17:16:41 +0000 Subject: [PATCH 049/144] Remove sparc64 ifdef Now we default to setting the hardware clock to UTC everywhere. sparc64 was the old odd-man out before. Reivewed by: cy@, bcr@ Differential Revision: https://reviews.freebsd.org/D23593 --- usr.sbin/tzsetup/tzsetup.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/usr.sbin/tzsetup/tzsetup.c b/usr.sbin/tzsetup/tzsetup.c index 1802747d52a..6446800ce51 100644 --- a/usr.sbin/tzsetup/tzsetup.c +++ b/usr.sbin/tzsetup/tzsetup.c @@ -1020,9 +1020,7 @@ main(int argc, char **argv) "If it is set to local time,\n" "or you don't know, please choose NO here!"); dlg_save_vars(&save_vars); -#if !defined(__sparc64__) dialog_vars.defaultno = TRUE; -#endif yesno = dialog_yesno(title, prompt, 7, 73); dlg_restore_vars(&save_vars); if (!yesno) { From f8f33808c0f4c905873649c486603f8987333182 Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Mon, 10 Feb 2020 17:16:45 +0000 Subject: [PATCH 050/144] Fix comment. It mentioned sparc64 specifically, but alignment issues are present elsewhere. Reivewed by: cy@, bcr@ Differential Revision: https://reviews.freebsd.org/D23593 --- usr.sbin/bsnmpd/modules/snmp_bridge/bridge_sys.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_sys.c b/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_sys.c index d1ff91c124a..f30cb71816b 100644 --- a/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_sys.c +++ b/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_sys.c @@ -586,8 +586,7 @@ bridge_get_basemac(const char *bif_name, u_char *mac, size_t mlen) continue; /* - * Not just casting because of alignment constraints - * on sparc64. + * Not just casting because of alignment constraints. */ bcopy(ifa->ifa_addr, &sdl, sizeof(struct sockaddr_dl)); From 0d94b31ad352e082a48cebeebe2a52a63a8463a1 Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Mon, 10 Feb 2020 17:16:50 +0000 Subject: [PATCH 051/144] Fix a comment for the SUN geom class. Reivewed by: cy@, bcr@ Differential Revision: https://reviews.freebsd.org/D23593 --- usr.sbin/bsnmpd/modules/snmp_hostres/hostres_partition_tbl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_partition_tbl.c b/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_partition_tbl.c index 1992c93cdf3..63289f3a146 100644 --- a/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_partition_tbl.c +++ b/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_partition_tbl.c @@ -484,7 +484,7 @@ partition_tbl_handle_disk(int32_t ds_index, const char *disk_dev_name) /* * Get the "SUN" GEOM class. - * Here we'll find all the info needed about the BSD slices. + * Here we'll find all the info needed about the SUN slices. */ if ((classp = find_class(&mesh, "SUN")) != NULL) { get_bsd_sun(classp, ds_index, disk_dev_name); From 31719b4962765958a28a4b57bf17efa9116cd343 Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Mon, 10 Feb 2020 17:16:54 +0000 Subject: [PATCH 052/144] For valid arch values (really $MACHINE), remove references to alpha and sparc64. Add references to arm64 and riscv Reivewed by: cy@, bcr@ Differential Revision: https://reviews.freebsd.org/D23593 --- usr.sbin/config/config.5 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/usr.sbin/config/config.5 b/usr.sbin/config/config.5 index 4b854542fc6..dc8bdeb86ec 100644 --- a/usr.sbin/config/config.5 +++ b/usr.sbin/config/config.5 @@ -23,7 +23,7 @@ .\" .\" $FreeBSD$ .\" -.Dd July 11, 2018 +.Dd February 9, 2020 .Dt CONFIG 5 .Os .Sh NAME @@ -251,10 +251,10 @@ Legal values for include: .Pp .Bl -tag -width ".Cm powerpc" -compact -.It Cm alpha -The DEC Alpha architecture. +.It Cm arm64 +The 64-bit ARM application architecture. .It Cm arm -The ARM architecture. +The ARM architecture .It Cm amd64 The AMD x86-64 architecture. .It Cm i386 @@ -263,8 +263,8 @@ The Intel x86 based PC architecture. The MIPS architecture. .It Cm powerpc The IBM PowerPC architecture. -.It Cm sparc64 -The Sun Sparc64 architecture. +.It Cm riscv +The RISC-V architecture. .El .Pp If argument From 28e7a2a9f142aefa25971aba45ebe02f8e61448b Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Mon, 10 Feb 2020 17:16:59 +0000 Subject: [PATCH 053/144] Remove sparc64 specific eeprom command This command was only ever for sparc64, so remove it. Remove usr.sbin/Makeiile.sparc64 as well since it only references ofwdump (cross platform) and eeprom. Reivewed by: cy@, bcr@ Differential Revision: https://reviews.freebsd.org/D23593 --- usr.sbin/Makefile.sparc64 | 4 - usr.sbin/eeprom/Makefile | 11 - usr.sbin/eeprom/Makefile.depend | 15 - usr.sbin/eeprom/eeprom.8 | 700 -------------------------------- usr.sbin/eeprom/eeprom.c | 148 ------- usr.sbin/eeprom/ofw_options.c | 312 -------------- usr.sbin/eeprom/ofw_options.h | 36 -- 7 files changed, 1226 deletions(-) delete mode 100644 usr.sbin/Makefile.sparc64 delete mode 100644 usr.sbin/eeprom/Makefile delete mode 100644 usr.sbin/eeprom/Makefile.depend delete mode 100644 usr.sbin/eeprom/eeprom.8 delete mode 100644 usr.sbin/eeprom/eeprom.c delete mode 100644 usr.sbin/eeprom/ofw_options.c delete mode 100644 usr.sbin/eeprom/ofw_options.h diff --git a/usr.sbin/Makefile.sparc64 b/usr.sbin/Makefile.sparc64 deleted file mode 100644 index 81f7a9b953a..00000000000 --- a/usr.sbin/Makefile.sparc64 +++ /dev/null @@ -1,4 +0,0 @@ -# $FreeBSD$ - -SUBDIR+= eeprom -SUBDIR+= ofwdump diff --git a/usr.sbin/eeprom/Makefile b/usr.sbin/eeprom/Makefile deleted file mode 100644 index 73d5a4eefb0..00000000000 --- a/usr.sbin/eeprom/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -# $FreeBSD$ - -.PATH: ${.CURDIR:H}/ofwdump - -PROG= eeprom -MAN= eeprom.8 -MANSUBDIR= /sparc64 -SRCS= eeprom.c ofw_options.c ofw_util.c -CFLAGS+= -I${.CURDIR:H}/ofwdump - -.include diff --git a/usr.sbin/eeprom/Makefile.depend b/usr.sbin/eeprom/Makefile.depend deleted file mode 100644 index c729e17c52d..00000000000 --- a/usr.sbin/eeprom/Makefile.depend +++ /dev/null @@ -1,15 +0,0 @@ -# $FreeBSD$ -# Autogenerated - do NOT edit! - -DIRDEPS = \ - include \ - include/xlocale \ - lib/${CSU_DIR} \ - lib/libc \ - - -.include - -.if ${DEP_RELDIR} == ${_DEP_RELDIR} -# local dependencies - needed for -jN in clean tree -.endif diff --git a/usr.sbin/eeprom/eeprom.8 b/usr.sbin/eeprom/eeprom.8 deleted file mode 100644 index b5b08bb9ae4..00000000000 --- a/usr.sbin/eeprom/eeprom.8 +++ /dev/null @@ -1,700 +0,0 @@ -.\" Copyright (c) 1996 The NetBSD Foundation, Inc. -.\" Copyright (c) 2004 Marius Strobl -.\" All rights reserved. -.\" -.\" This code is derived from software contributed to The NetBSD Foundation -.\" by Jason R. Thorpe. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS -.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS -.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -.\" POSSIBILITY OF SUCH DAMAGE. -.\" -.\" from: NetBSD: eeprom.8,v 1.11 2003/03/31 01:31:39 perry Exp -.\" $FreeBSD$ -.\" -.Dd September 1, 2006 -.Dt EEPROM 8 sparc64 -.Os -.Sh NAME -.Nm eeprom -.Nd "display or modify contents of the EEPROM or NVRAM" -.Sh SYNOPSIS -.Nm -.Fl a -.Nm -.Op Fl -.Ar name Ns Op = Ns Ar value -.Ar ... -.Sh DESCRIPTION -The -.Nm -utility provides an interface for displaying and changing the system's -configuration variables contained in EEPROM or NVRAM. -In the first synopsis form, all available configuration variables and their -current values are printed. -In the second form, only the variable selected by -.Ar name -and its value is printed or changed if -.Ar name -is followed by -.Ql = -and a -.Ar value . -.Pp -The following options are available: -.Bl -tag -width indent -.It Fl -Commands for displaying or changing variables are taken from stdin, allowing -one -.Ar name -or one -.Ar name -and -.Ar value -pair per line. -The output is printed on stdout. -.It Fl a -Print all available configuration variables and their current values. -.El -.Sh VARIABLES AND VALUES -Below are variables and values that one is likely to find on a system equipped -with OpenBoot 3.x and Open Firmware respectively. -.Pp -Note: the attempt to set a variable to an illegal value results in the -Open Firmware setting it to some legal value instead. -The -.Nm -utility will detect this, try to recover the previous value of the variable -and issue a warning telling that the requested value could not be set. -.Bl -tag -width ".Va last-hardware-update" -.It Va auto-boot? -If -.Dq Li true , -the system will try to boot automatically from the devices listed in -.Va boot-device -and -.Va diag-device -respectively, using the command specified in -.Va boot-command -at power-up. -Default: -.Dq Li true . -.It Va auto-boot-retry? -If set to -.Dq Li true -and -.Va auto-boot? -is also set to -.Dq Li true , -the system will try to boot from the specified boot devices forever. -Default: -.Dq Li false . -.It Va ansi-terminal? -If -.Dq Li false , -.Tn ANSI -escape sequences are not interpreted by the terminal emulator. -Default: -.Dq Li true . -.It Va boot-command -Command executed when -.Va auto-boot? -is set to -.Dq Li true . -Default: -.Dq Li boot . -.It Va boot-device -Default device to boot from if -.Va diag-switch? -is set to -.Dq Li false . -Takes one or more device aliases or device paths. -The boot devices are sequentially tried to boot from, beginning with the first -one specified. -Default: -.Dq Li "net disk" . -.It Va cpci-probe-list -Digits in the format -.Dq Li 0,1,2 -specifying in which order to probe the devices on the CompactPCI bus at -power-up. -Default: system-dependent. -.It Va boot-file -Default arguments for boot when -.Va diag-switch? -is set to -.Dq Li false . -When empty, the secondary boot loader will choose the file to boot. -Default: empty string. -.It Va diag-device -Like -.Va boot-device . -Used when -.Va diag-switch? -is set to -.Dq Li true . -Default: -.Dq Li net . -.It Va diag-file -Like -.Va boot-file . -Used when -.Va diag-switch? -is set to -.Dq Li true . -Default: empty string. -.It Va diag-level -Level of diagnostics to run when -.Va diag-switch? -is set to -.Dq Li true . -Possible values are -.Dq Li max , -.Dq Li menus , -.Dq Li min -and -.Dq Li off -(depending on the system model). -When set to -.Dq Li off , -the Power-On Self Test (POST) is not run. -The other values are interpreted by the POST. -Default: -.Dq Li min -or -.Dq Li max -(system-dependent). -.It Va diag-switch? -If -.Dq Li true , -the system will boot and run in diagnostic mode. -Default: -.Dq Li false -or -.Dq Li true -(system-dependent). -.It Va env-monitor -Enables or disables the Advanced System Monitoring (ASM). -Possible values are -.Dq Li enabled -and -.Dq Li disabled . -Default: -.Dq Li enabled . -.It Va fcode-debug? -Used for debugging FCode programs. -If set to -.Dq Li true , -names of additional FCodes are registered in the Forth dictionary. -Default: -.Dq Li false . -.It Va hardware-revision -A string describing the system hardware version. -Default: system-dependent. -.It Va input-device -One of the strings -.Dq Li keyboard , -.Dq Li ttya , -or -.Dq Li ttyb , -specifying the default console input device. -Default: -.Dq Li keyboard -or -.Dq Li ttya -(system-dependent). -.It Va keyboard-click? -If set to -.Dq Li true , -the keys click annoyingly. -Default: -.Dq Li false . -.It Va keymap -Keymap for a custom keyboard. -Default: empty string. -.It Va last-hardware-update -Similar to -.Va hardware-revision , -describing when the hardware was last updated. -Default: system-dependent. -.It Va last-poweroff-cause -Cause of the last power-off. -Used internally by the OpenBoot PROM. -Default: -.Dq Li 0 . -.It Va load-base -Default address where client programs are loaded to. -It is unlikely that this value should ever be changed. -Default: -.Dq Li 16384 . -.It Va local-mac-address? -If set to -.Dq Li false , -all Ethernet devices with FCode will use the system default MAC address. -If set to -.Dq Li true , -Ethernet devices with FCode that contains a unique MAC address will use it -rather than the system's default MAC address. -Default: -.Dq Li false . -.Pp -Ethernet devices with FCode include those supported by -.Xr dc 4 , -.Xr gem 4 -and -.Xr hme 4 . -Please see the respective manual page for further information. -.It Va mfg-mode -Manufacture test mode interpreted by the POST. -Possible values are -.Dq Li chamber -and -.Dq Li off . -Default: -.Dq Li off . -.It Va mfg-switch? -If set to -.Dq Li true , -manufacturing tests are repeated until stopped by pressing STOP-A. -Default: -.Dq Li off . -.It Va net-timeout -If set to -.Dq Li 0 , -the system will try to boot forever when the boot device used is a network -device. -Any non-zero value is interpreted as minutes to try a network boot. -Default: -.Dq Li 0 . -.It Va nvramrc -Contents of the NVRAMRC. -Default: empty string. -.Pp -While -.Va nvramrc -can be set using -.Nm , -it is preferred to use -.Ic nvedit -in the boot monitor instead. -.It Va oem-banner -A string displayed at power-up, rather than the default banner. -Used when -.Va oem-banner? -is set to -.Dq Li true . -Default: system-dependent. -.It Va oem-banner? -If set to -.Dq Li true , -the string stored in -.Va oem-banner -is displayed at power-up rather than the default banner. -Default: system-dependent. -.It Va oem-logo -A logo displayed at power-up when -.Va oem-logo? -is set to -.Dq Li true , -rather than the default logo. -The logo has to be 512 bytes in size, containing a 64x64-bit monochrome image -in Sun Raster format without the leading 32-byte header. -Default: system-dependent. -.Pp -To set the logo with -.Nm , -give the pathname of the file containing the image as the -.Ar value . -Using an empty -.Ar value -will remove the image. -.It Va oem-logo? -If set to -.Dq Li true , -the logo stored in -.Va oem-logo -is displayed at power-up rather than the default logo. -.It Va output-device -One of the strings -.Dq Li screen , -.Dq Li ttya , -or -.Dq Li ttyb , -specifying the default console output device. -Default: -.Dq Li screen -or -.Dq Li ttya -(system-dependent). -.It Va pcia-probe-list -Digits in the format -.Dq Li 1,2,3 -specifying in which order to probe the devices on the PCI bus A. -Default: system-dependent. -.It Va pcib-probe-list -Like -.Va pcia-probe-list , -but for PCI bus B. -Default: system-dependent. -.It Va #power-cycles -Number of power-cycles. -Automatically incremented on each power-cycle. -Default: system-dependent. -.It Va sbus-probe-list -Digits in the format -.Dq Li 0123 -specifying in which order to probe the SBus slots at power-up. -Default: system-dependent. -.It Va screen-#columns -An integer specifying the screen width in characters per line. -Default: -.Dq Li 80 . -.It Va screen-#rows -An integer specifying the screen height in lines. -Default: -.Dq Li 34 . -.It Va scsi-initiator-id -The SCSI ID of SCSI controllers in the range of [0-7] or [0-f] (depending -on the controller). -A SCSI controller may or may not adhere to this setting, depending on its -FCode and device driver. -Default: -.Dq Li 7 . -.It Va security-#badlogins -Number of incorrect password attempts when -.Va security-mode -is set to -.Dq Li command -or -.Dq Li full . -Default: -.Dq Li 0 . -.It Va security-mode -Boot monitor security level. -One of the three possible values -.Dq Li full , -.Dq Li command , -or -.Dq Li none . -When set to -.Dq Li full , -all boot monitor commands except for -.Ic go -require the password. -When set to -.Dq Li command , -all boot monitor commands except for -.Ic boot -and -.Ic go -require the password. -When set to -.Dq Li none , -no password is required. -Default: -.Dq Li none . -.Pp -When -.Nm -is used to set -.Va security-mode -to -.Dq Li full -or -.Dq Li command , -you will be prompted for the password. -When -.Va security-mode -is set to -.Dq Li none , -.Nm -will clear the password. -.It Va security-password -The password used when -.Va security-mode -is set to -.Dq Li full -or -.Dq Li command . -The maximum length for this password is 8 characters. -All characters exceeding this length will be ignored. -The value displayed for -.Va security-password -is always an empty string, even when a password is set. -Default: empty string. -.Pp -When -.Va security-mode -is set to -.Dq Li full -or -.Dq Li command , -.Nm -can be used to enter a new password using any -.Ar value -for -.Va security-password -on the command line. -You will be prompted by -.Nm -to type in the new password in this case. -Trying to set -.Va security-password -when -.Va security-mode -is set to -.Dq Li none -using -.Nm -has no effect. -.It Va selftest-#megs -An integer specifying the number of megabytes of memory to test upon -power-up when -.Va diag-switch? -is set to -.Dq Li false . -Default: -.Dq Li 1 . -.It Va shutdown-temperature -Temperature at which the ASM issues an over-temperature shutdown. -Default: system-dependent. -.It Va silent-mode -If set to -.Dq Li true , -memory test messages will not be displayed at power-up. -Default: -.Dq Li false . -.It Va sunmon-compat? -If set to -.Dq Li true , -the old bootROM interface will be used while in the boot monitor, -rather than the OpenBoot PROM interface. -Default: -.Dq Li false . -.It Va system-board-date -Manufacturing date of the system board. -Default: system-dependent. -.It Va system-board-serial# -Serial number of the system board. -Default: system-dependent. -.It Va tpe-link-test? -Enable link test on 10baseT and 100baseTX Ethernet devices. -Default: -.Dq Li true . -.It Va ttya-mode -A string of five comma separated fields in the format -.Dq Li 9600,8,n,1,- . -The first field is the baud rate. -The second field is the number of data bits. -The third field is the parity; acceptable values for parity are -.Ql n -(none), -.Ql e -(even), -.Ql o -(odd), -.Ql m -(mark), and -.Ql s -(space). -The fourth field is the number of stop bits. -The fifth field is the -.Dq handshake -field; acceptable values are -.Ql - -(none), -.Ql h -(RTS/CTS), and -.Ql s -(Xon/Xoff). -Default: -.Dq Li 9600,8,n,1,- . -.It Va ttya-ignore-cd -If set to -.Dq Li true , -the system will ignore carrier detect. -Default: -.Dq Li true . -.It Va ttya-rts-dtr-off -If set to -.Dq Li true , -the system will ignore RTS/DTR. -Default: -.Dq Li false . -.It Va ttyb-mode -Like -.Va ttya-mode , -but for ttyb. -Default: -.Dq Li 9600,8,n,1,- . -.It Va ttyb-ignore-cd -Like -.Va ttya-ignore-cd , -but for ttyb. -Default: -.Dq Li true . -.It Va ttyb-rts-dtr-off -Like -.Va ttya-rts-dtr-off , -but for ttyb. -Default: -.Dq Li false . -.It Va use-boot-table? -Use boot table defined by the OEM. -Default: system-dependent. -.It Va use-nvramrc? -If set to -.Dq Li true , -the script stored in -.Va nvramrc -will be executed during start-up. -Default: -.Dq Li false . -.It Va warning-temperature -Temperature at which the ASM issues an over-temperature warning. -Default: system-dependent. -.It Va watchdog-enable? -Enables or disables the system watchdog timer. -Default: -.Dq Li false . -.It Va watchdog-reboot? -If set to -.Dq Li true , -the system will reboot upon terminal count of the system watchdog timer. -If set to -.Dq Li false , -the system will fall into the boot monitor. -Default: -.Dq Li false . -.It Va watchdog-timeout -Expiry limit for the system watchdog timer. -Range and unit depend on the system model. -Default: system-dependent. -.El -.Sh EXAMPLES -Print all available configuration variables and their current values: -.Pp -.Dl "eeprom -a" -.Pp -Print the current value of the -.Va local-mac-address? -variable: -.Pp -.Dl "eeprom local-mac-address\e?" -.Pp -Set the value of the -.Va local-mac-address? -variable to -.Dq Li true : -.Pp -.Dl "eeprom local-mac-address\e?=true" -.Pp -Note that the -.Ql \e -in the above examples is used to keep the shell from interpreting the -.Ql \&? . -.Pp -Write an image to the -.Va oem-logo -variable: -.Pp -.Dl "eeprom oem-logo=/path/to/image.raw" -.Pp -Remove the image from the -.Va oem-logo -variable again: -.Pp -.Dl "eeprom oem-logo=" -.Pp -Set the value of the -.Va security-mode -variable to -.Dq Li full , -and set the password: -.Bd -literal -offset indent -eeprom security-mode=full -New password: -Retype new password: -.Ed -.Pp -Remember that the maximum length for the password is 8 characters. -All characters exceeding this length will be ignored. -.Pp -Set a new password when the -.Va security-mode -variable is set to -.Dq Li command -or -.Dq Li full : -.Bd -literal -offset indent -eeprom security-password= -New password: -Retype new password: -.Ed -.Sh SEE ALSO -.Xr dc 4 , -.Xr gem 4 , -.Xr hme 4 , -.Xr ofwdump 8 -.Sh HISTORY -The -.Nm -utility first appeared in -.Bx 4.4 . -It was adopted from there by -.Fx 2.0 . -The -.Nm -utility was removed from -.Fx -again after -.Fx 2.1.7 -because the utility was unused at that time. -The present implementation of the -.Nm -utility first appeared in -.Fx 5.3 . -It is inspired by the -.Nx -.Xr eeprom 8 -and SunOS/Solaris -.Xr eeprom 1M -utilities. -.Sh AUTHORS -.An -nosplit -The -.Nm -utility uses base code from the -.Nx -version written by -.An Jason R. Thorpe . -The handlers for the Open Firmware -.Pa /options -node were written by -.An Marius Strobl Aq Mt marius@FreeBSD.org . -The code for accessing the Open Firmware device tree is shared with the -.Xr ofwdump 8 -utility written by -.An Thomas Moestl Aq Mt tmm@FreeBSD.org . -.Sh BUGS -Currently, -.Nm -only supports systems equipped with Open Firmware and is only tested on Sun -Microsystems sun4u machines. diff --git a/usr.sbin/eeprom/eeprom.c b/usr.sbin/eeprom/eeprom.c deleted file mode 100644 index b6fef59d4f9..00000000000 --- a/usr.sbin/eeprom/eeprom.c +++ /dev/null @@ -1,148 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-NetBSD - * - * Copyright (c) 1996 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Jason R. Thorpe. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * from: NetBSD: main.c,v 1.15 2001/02/19 23:22:42 cgd Exp - */ - -#include -__FBSDID("$FreeBSD$"); - -#include -#include -#include -#include -#include -#include - -#include "ofw_options.h" - -static int action(char *); -static void dump_config(void); -static void usage(void); - -static void -usage(void) -{ - - fprintf(stderr, - "usage: eeprom -a\n" - " eeprom [-] name[=value] ...\n"); - exit(EX_USAGE); -} - -int -main(int argc, char *argv[]) -{ - int do_stdin, opt; - int aflag, rv; - char *cp; - char line[BUFSIZ]; - - aflag = do_stdin = 0; - rv = EX_OK; - while ((opt = getopt(argc, argv, "-a")) != -1) { - switch (opt) { - case '-': - if (aflag) - usage(); - do_stdin = 1; - break; - case 'a': - if (do_stdin) - usage(); - aflag = 1; - break; - case '?': - default: - usage(); - /* NOTREACHED */ - } - } - argc -= optind; - argv += optind; - - if (aflag) { - if (argc != 0) - usage(); - dump_config(); - } else { - if (do_stdin) { - while (fgets(line, BUFSIZ, stdin) != NULL && - rv == EX_OK) { - if (line[0] == '\n') - continue; - if ((cp = strrchr(line, '\n')) != NULL) - *cp = '\0'; - rv = action(line); - } - if (ferror(stdin)) - err(EX_NOINPUT, "stdin"); - } else { - if (argc == 0) - usage(); - while (argc && rv == EX_OK) { - rv = action(*argv); - ++argv; - --argc; - } - } - } - return (rv); -} - -static int -action(char *line) -{ - int rv; - char *keyword, *arg; - - keyword = strdup(line); - if (keyword == NULL) - err(EX_OSERR, "malloc() failed"); - if ((arg = strrchr(keyword, '=')) != NULL) - *arg++ = '\0'; - switch (rv = ofwo_action(keyword, arg)) { - case EX_UNAVAILABLE: - warnx("nothing available for '%s'.", keyword); - break; - case EX_DATAERR: - warnx("invalid value '%s' for '%s'.", arg, keyword); - break; - } - free(keyword); - return(rv); -} - -static void -dump_config(void) -{ - - ofwo_dump(); -} diff --git a/usr.sbin/eeprom/ofw_options.c b/usr.sbin/eeprom/ofw_options.c deleted file mode 100644 index 3b9e3124c77..00000000000 --- a/usr.sbin/eeprom/ofw_options.c +++ /dev/null @@ -1,312 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 2004 Marius Strobl - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -__FBSDID("$FreeBSD$"); - -/* - * Handlers for Open Firmware /options node. - */ - -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "ofw_options.h" -#include "ofw_util.h" - -#define OFWO_LOGO 512 -#define OFWO_MAXPROP 31 -#define OFWO_MAXPWD 8 - -struct ofwo_extabent { - const char *ex_prop; - int (*ex_handler)(const struct ofwo_extabent *, int, - const void *, int, const char *); -}; - -static int ofwo_oemlogo(const struct ofwo_extabent *, int, const void *, - int, const char *); -static int ofwo_secmode(const struct ofwo_extabent *, int, const void *, - int, const char *); -static int ofwo_secpwd(const struct ofwo_extabent *, int, const void *, - int, const char *); - -static const struct ofwo_extabent ofwo_extab[] = { - { "oem-logo", ofwo_oemlogo }, - { "security-mode", ofwo_secmode }, - { "security-password", ofwo_secpwd }, - { NULL, NULL } -}; - -static int ofwo_setpass(int); -static int ofwo_setstr(int, const void *, int, const char *, const char *); - -static __inline void -ofwo_printprop(const char *prop, const char* buf, int buflen) -{ - - printf("%s: %.*s\n", prop, buflen, buf); -} - -static int -ofwo_oemlogo(const struct ofwo_extabent *exent, int fd, const void *buf, - int buflen, const char *val) -{ - int lfd; - char logo[OFWO_LOGO + 1]; - - if (val) { - if (val[0] == '\0') - ofw_setprop(fd, ofw_optnode(fd), exent->ex_prop, "", 1); - else { - if ((lfd = open(val, O_RDONLY)) == -1) { - warn("could not open '%s'", val); - return (EX_USAGE); - } - if (read(lfd, logo, OFWO_LOGO) != OFWO_LOGO || - lseek(lfd, 0, SEEK_END) != OFWO_LOGO) { - close(lfd); - warnx("logo '%s' has wrong size.", val); - return (EX_USAGE); - } - close(lfd); - logo[OFWO_LOGO] = '\0'; - if (ofw_setprop(fd, ofw_optnode(fd), exent->ex_prop, - logo, OFWO_LOGO + 1) != OFWO_LOGO) - errx(EX_IOERR, "writing logo failed."); - } - } else - if (buflen != 0) - printf("%s: \n", exent->ex_prop); - else - ofwo_printprop(exent->ex_prop, (const char *)buf, - buflen); - return (EX_OK); -} - -static int -ofwo_secmode(const struct ofwo_extabent *exent, int fd, const void *buf, - int buflen, const char *val) -{ - int res; - - if (val) { - if (strcmp(val, "full") == 0 || strcmp(val, "command") == 0) { - if ((res = ofwo_setpass(fd)) != EX_OK) - return (res); - if ((res = ofwo_setstr(fd, buf, buflen, exent->ex_prop, - val)) != EX_OK) - ofw_setprop(fd, ofw_optnode(fd), - "security-password", "", 1); - return (res); - } - if (strcmp(val, "none") == 0) { - ofw_setprop(fd, ofw_optnode(fd), "security-password", - "", 1); - return (ofwo_setstr(fd, buf, buflen, exent->ex_prop, - val)); - } - return (EX_DATAERR); - } else - ofwo_printprop(exent->ex_prop, (const char *)buf, buflen); - return (EX_OK); -} - -static int -ofwo_secpwd(const struct ofwo_extabent *exent, int fd, const void *buf, - int buflen, const char *val) -{ - void *pbuf; - int len, pblen, rv; - - pblen = 0; - rv = EX_OK; - pbuf = NULL; - if (val) { - len = ofw_getprop_alloc(fd, ofw_optnode(fd), "security-mode", - &pbuf, &pblen, 1); - if (len <= 0 || strncmp("none", (char *)pbuf, len) == 0) { - rv = EX_CONFIG; - warnx("no security mode set."); - } else if (strncmp("command", (char *)pbuf, len) == 0 || - strncmp("full", (char *)pbuf, len) == 0) { - rv = ofwo_setpass(fd); - } else { - rv = EX_CONFIG; - warnx("invalid security mode."); - } - } else - ofwo_printprop(exent->ex_prop, (const char *)buf, buflen); - if (pbuf != NULL) - free(pbuf); - return (rv); -} - -static int -ofwo_setpass(int fd) -{ - char pwd1[OFWO_MAXPWD + 1], pwd2[OFWO_MAXPWD + 1]; - - if (readpassphrase("New password:", pwd1, sizeof(pwd1), - RPP_ECHO_OFF | RPP_REQUIRE_TTY) == NULL || - readpassphrase("Retype new password:", pwd2, sizeof(pwd2), - RPP_ECHO_OFF | RPP_REQUIRE_TTY) == NULL) - errx(EX_USAGE, "failed to get password."); - if (strlen(pwd1) == 0) { - printf("Password unchanged.\n"); - return (EX_OK); - } - if (strcmp(pwd1, pwd2) != 0) { - printf("Mismatch - password unchanged.\n"); - return (EX_USAGE); - } - ofw_setprop(fd, ofw_optnode(fd), "security-password", pwd1, - strlen(pwd1) + 1); - return (EX_OK); -} - -static int -ofwo_setstr(int fd, const void *buf, int buflen, const char *prop, - const char *val) -{ - void *pbuf; - int len, pblen, rv; - phandle_t optnode; - char *oval; - - pblen = 0; - rv = EX_OK; - pbuf = NULL; - optnode = ofw_optnode(fd); - ofw_setprop(fd, optnode, prop, val, strlen(val) + 1); - len = ofw_getprop_alloc(fd, optnode, prop, &pbuf, &pblen, 1); - if (len < 0 || strncmp(val, (char *)pbuf, len) != 0) { - /* - * The value is too long for this property and the OFW has - * truncated it to fit or the value is illegal and a legal - * one has been written instead (e.g. attempted to write - * "foobar" to a "true"/"false"-property) - try to recover - * the old value. - */ - rv = EX_DATAERR; - if ((oval = malloc(buflen + 1)) == NULL) - err(EX_OSERR, "malloc() failed."); - strncpy(oval, buf, buflen); - oval[buflen] = '\0'; - len = ofw_setprop(fd, optnode, prop, oval, buflen + 1); - if (len != buflen) - errx(EX_IOERR, "recovery of old value failed."); - free(oval); - goto out; - } - printf("%s: %.*s%s->%s%.*s\n", prop, buflen, (const char *)buf, - buflen > 0 ? " " : "", len > 0 ? " " : "", len, (char *)pbuf); -out: - if (pbuf != NULL) - free(pbuf); - return (rv); -} - -void -ofwo_dump(void) -{ - void *pbuf; - int fd, len, nlen, pblen; - phandle_t optnode; - char prop[OFWO_MAXPROP + 1]; - const struct ofwo_extabent *ex; - - pblen = 0; - pbuf = NULL; - fd = ofw_open(O_RDONLY); - optnode = ofw_optnode(fd); - for (nlen = ofw_firstprop(fd, optnode, prop, sizeof(prop)); nlen != 0; - nlen = ofw_nextprop(fd, optnode, prop, prop, sizeof(prop))) { - len = ofw_getprop_alloc(fd, optnode, prop, &pbuf, &pblen, 1); - if (len < 0) - continue; - if (strcmp(prop, "name") == 0) - continue; - for (ex = ofwo_extab; ex->ex_prop != NULL; ++ex) - if (strcmp(ex->ex_prop, prop) == 0) - break; - if (ex->ex_prop != NULL) - (*ex->ex_handler)(ex, fd, pbuf, len, NULL); - else - ofwo_printprop(prop, (char *)pbuf, len); - } - if (pbuf != NULL) - free(pbuf); - ofw_close(fd); -} - -int -ofwo_action(const char *prop, const char *val) -{ - void *pbuf; - int fd, len, pblen, rv; - const struct ofwo_extabent *ex; - - pblen = 0; - rv = EX_OK; - pbuf = NULL; - if (strcmp(prop, "name") == 0) - return (EX_UNAVAILABLE); - if (val) - fd = ofw_open(O_RDWR); - else - fd = ofw_open(O_RDONLY); - len = ofw_getprop_alloc(fd, ofw_optnode(fd), prop, &pbuf, &pblen, 1); - if (len < 0) { - rv = EX_UNAVAILABLE; - goto out; - } - for (ex = ofwo_extab; ex->ex_prop != NULL; ++ex) - if (strcmp(ex->ex_prop, prop) == 0) - break; - if (ex->ex_prop != NULL) - rv = (*ex->ex_handler)(ex, fd, pbuf, len, val); - else if (val) - rv = ofwo_setstr(fd, pbuf, len, prop, val); - else - ofwo_printprop(prop, (char *)pbuf, len); -out: - if (pbuf != NULL) - free(pbuf); - ofw_close(fd); - return (rv); -} diff --git a/usr.sbin/eeprom/ofw_options.h b/usr.sbin/eeprom/ofw_options.h deleted file mode 100644 index 41b2640762f..00000000000 --- a/usr.sbin/eeprom/ofw_options.h +++ /dev/null @@ -1,36 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 2004 Marius Strobl - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#ifndef OFW_OPTIONS_H -#define OFW_OPTIONS_H - -void ofwo_dump(void); -int ofwo_action(const char *prop, const char *val); - -#endif /* OFW_OPTIONS_H */ From 6666787858319fd242f34b66f73a39558005e407 Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Mon, 10 Feb 2020 17:17:03 +0000 Subject: [PATCH 054/144] Refresh architecture list with latest: Remove: sparc, sparc64 (twice), ia64, alpha Add: riscv64 Remove now-useless sparc64 ifdef Reivewed by: cy@, bcr@ Differential Revision: https://reviews.freebsd.org/D23593 --- usr.sbin/ntp/config.h | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/usr.sbin/ntp/config.h b/usr.sbin/ntp/config.h index a8ea51a6236..5fbf31f625d 100644 --- a/usr.sbin/ntp/config.h +++ b/usr.sbin/ntp/config.h @@ -1578,11 +1578,7 @@ /* #undef STRERROR_R_CHAR_P */ /* canonical system (cpu-vendor-os) of where we should run */ -#if defined(__alpha__) -#define STR_SYSTEM "alpha-undermydesk-freebsd" -#elif defined(__sparc64__) -#define STR_SYSTEM "sparc64-undermydesk-freebsd" -#elif defined(__amd64__) +#if defined(__amd64__) #define STR_SYSTEM "amd64-undermydesk-freebsd" #elif defined(__powerpc64__) #define STR_SYSTEM "powerpc64-undermydesk-freebsd" @@ -1596,12 +1592,8 @@ #define STR_SYSTEM "arm64-undermydesk-freebsd" #elif defined(__arm__) #define STR_SYSTEM "arm-undermydesk-freebsd" -#elif defined(__sparc64__) -#define STR_SYSTEM "sparc64-undermydesk-freebsd" -#elif defined(__sparc__) -#define STR_SYSTEM "sparc-undermydesk-freebsd" -#elif defined(__ia64__) -#define STR_SYSTEM "ia64-undermydesk-freebsd" +#elif defined(__riscv__) +#define STR_SYSTEM "riscv64-undermydesk-freebsd" #else #define STR_SYSTEM "i386-undermydesk-freebsd" #endif @@ -1669,7 +1661,7 @@ typedef unsigned int uintptr_t; /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined(__ARMEB__) || defined(__MIPSEB__) || defined(__powerpc__) || \ - defined(__powerpc64__) || defined(__sparc64__) + defined(__powerpc64__) #define WORDS_BIGENDIAN 1 #endif From 0d3f465b5de86e2d2022f2fd82b254bc2e5e3df6 Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Mon, 10 Feb 2020 17:17:08 +0000 Subject: [PATCH 055/144] Remove ifdefs for ia64 and sparc64. Reivewed by: cy@, bcr@ Differential Revision: https://reviews.freebsd.org/D23593 --- usr.sbin/ntp/libntpevent/Makefile | 4 ---- 1 file changed, 4 deletions(-) diff --git a/usr.sbin/ntp/libntpevent/Makefile b/usr.sbin/ntp/libntpevent/Makefile index f6cc3be687f..487faedc00a 100644 --- a/usr.sbin/ntp/libntpevent/Makefile +++ b/usr.sbin/ntp/libntpevent/Makefile @@ -21,12 +21,8 @@ SRCS+= bufferevent_openssl.c NTP_ATOMIC=x86_32 .elif ${MACHINE_ARCH} == "amd64" NTP_ATOMIC=x86_64 -.elif ${MACHINE_ARCH} == "ia64" -NTP_ATOMIC=ia64 .elif ${MACHINE_ARCH} == "powerpc64" NTP_ATOMIC=powerpc -.elif ${MACHINE_ARCH} == "sparc64" -NTP_ATOMIC=sparc64 .else NTP_ATOMIC=noatomic .endif From 3c200db9d2a831e17307710bfd1b581aa325cee2 Mon Sep 17 00:00:00 2001 From: "Jonathan T. Looney" Date: Mon, 10 Feb 2020 18:06:38 +0000 Subject: [PATCH 056/144] Modify the vm.panic_on_oom sysctl to take a count of events. Currently, the vm.panic_on_oom sysctl is a boolean which controls the behavior of the VM system when it encounters an out-of-memory situation. If set to 0, the VM system kills the largest process. If set to any other value, the VM system will initiate a panic. This change makes the sysctl a count of events. If set to 0, the VM system kills the largest process. If set to any other value, the VM system will kill the largest process until it has seen the specified number of out-of-memory events. Once it reaches the specified number of events, it will initiate a panic. This change is helpful in capturing cores when the system is in a perpetual cycle of out-of-memory events (as opposed to just hitting one or two sporadic out-of-memory events). Reviewed by: kib MFC after: 2 weeks Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D23601 --- sys/vm/vm_pageout.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c index 12d23fb4f4b..e660a4c2552 100644 --- a/sys/vm/vm_pageout.c +++ b/sys/vm/vm_pageout.c @@ -158,7 +158,7 @@ static int vm_panic_on_oom = 0; SYSCTL_INT(_vm, OID_AUTO, panic_on_oom, CTLFLAG_RWTUN, &vm_panic_on_oom, 0, - "panic on out of memory instead of killing the largest process"); + "Panic on the given number of out-of-memory errors instead of killing the largest process"); SYSCTL_INT(_vm, OID_AUTO, pageout_update_period, CTLFLAG_RWTUN, &vm_pageout_update_period, 0, @@ -1933,7 +1933,7 @@ vm_pageout_oom(int shortage) } sx_sunlock(&allproc_lock); if (bigproc != NULL) { - if (vm_panic_on_oom != 0) + if (vm_panic_on_oom != 0 && --vm_panic_on_oom == 0) panic("out of swap space"); PROC_LOCK(bigproc); killproc(bigproc, "out of swap space"); From 5b2df92a390dafb90d6594ee996e8992b7334e51 Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Mon, 10 Feb 2020 18:28:02 +0000 Subject: [PATCH 057/144] Use __riscv instead of __riscv__ I misread arch(7) when I added this... Noticed by: jhb@ and mhorne@ --- usr.sbin/ntp/config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usr.sbin/ntp/config.h b/usr.sbin/ntp/config.h index 5fbf31f625d..68e215a1a0c 100644 --- a/usr.sbin/ntp/config.h +++ b/usr.sbin/ntp/config.h @@ -1592,7 +1592,7 @@ #define STR_SYSTEM "arm64-undermydesk-freebsd" #elif defined(__arm__) #define STR_SYSTEM "arm-undermydesk-freebsd" -#elif defined(__riscv__) +#elif defined(__riscv) #define STR_SYSTEM "riscv64-undermydesk-freebsd" #else #define STR_SYSTEM "i386-undermydesk-freebsd" From f912e8f2ffe2167ac7c157eefb2e8ec8c6612c05 Mon Sep 17 00:00:00 2001 From: Hans Petter Selasky Date: Mon, 10 Feb 2020 20:23:08 +0000 Subject: [PATCH 058/144] Fix for unbalanced EPOCH(9) usage in the generic kernel interrupt handler. Interrupt handlers are removed via intr_event_execute_handlers() when IH_DEAD is set. The thread removing the interrupt is woken up, and calls intr_event_update(). When this happens, the ie_hflags are cleared and re-built from all the remaining handlers sharing the event. When the last IH_NET handler is removed, the IH_NET flag will be cleared from ih_hflags (or ie_hflags may still be being rebuilt in a different context), and the ithread_execute_handlers() may return with ie_hflags missing IH_NET. This can lead to a scenario where IH_NET was present before calling ithread_execute_handlers, and is not present at its return, meaning the need for epoch must be cached locally. This can happen when loading and unloading network drivers. Also make sure the ie_hflags is not cleared before being updated. This is a regression issue after r357004. Backtrace: panic() # trying to access epoch tracker on stack of dead thread _epoch_enter_preempt() ifunit_ref() ifioctl() fo_ioctl() kern_ioctl() sys_ioctl() syscallenter() amd64_syscall() Differential Revision: https://reviews.freebsd.org/D23483 Reviewed by: glebius@, gallatin@, mav@, jeff@ and kib@ Sponsored by: Mellanox Technologies --- sys/kern/kern_intr.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/sys/kern/kern_intr.c b/sys/kern/kern_intr.c index 523811f38da..020a89cc750 100644 --- a/sys/kern/kern_intr.c +++ b/sys/kern/kern_intr.c @@ -189,12 +189,12 @@ intr_event_update(struct intr_event *ie) { struct intr_handler *ih; char *last; - int missed, space; + int missed, space, flags; /* Start off with no entropy and just the name of the event. */ mtx_assert(&ie->ie_lock, MA_OWNED); strlcpy(ie->ie_fullname, ie->ie_name, sizeof(ie->ie_fullname)); - ie->ie_hflags = 0; + flags = 0; missed = 0; space = 1; @@ -207,8 +207,9 @@ intr_event_update(struct intr_event *ie) space = 0; } else missed++; - ie->ie_hflags |= ih->ih_flags; + flags |= ih->ih_flags; } + ie->ie_hflags = flags; /* * If there is only one handler and its name is too long, just copy in @@ -1208,6 +1209,7 @@ ithread_loop(void *arg) struct thread *td; struct proc *p; int wake, epoch_count; + bool needs_epoch; td = curthread; p = td->td_proc; @@ -1242,20 +1244,22 @@ ithread_loop(void *arg) * that the load of ih_need in ithread_execute_handlers() * is ordered after the load of it_need here. */ - if (ie->ie_hflags & IH_NET) { + needs_epoch = + (atomic_load_int(&ie->ie_hflags) & IH_NET) != 0; + if (needs_epoch) { epoch_count = 0; NET_EPOCH_ENTER(et); } while (atomic_cmpset_acq_int(&ithd->it_need, 1, 0) != 0) { ithread_execute_handlers(p, ie); - if ((ie->ie_hflags & IH_NET) && + if (needs_epoch && ++epoch_count >= intr_epoch_batch) { NET_EPOCH_EXIT(et); epoch_count = 0; NET_EPOCH_ENTER(et); } } - if (ie->ie_hflags & IH_NET) + if (needs_epoch) NET_EPOCH_EXIT(et); WITNESS_WARN(WARN_PANIC, NULL, "suspending ithread"); mtx_assert(&Giant, MA_NOTOWNED); From 37d4ece7c5a8fb46fd5cca10c25c4989f3f2f97d Mon Sep 17 00:00:00 2001 From: Li-Wen Hsu Date: Mon, 10 Feb 2020 20:53:59 +0000 Subject: [PATCH 059/144] Restore the behavior of allowing empty string in a string sysctl Added as a special case to avoid unnecessary memory operations. Reviewed by: delphij Sponsored by: The FreeBSD Foundation --- sys/kern/kern_sysctl.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c index 407254c6829..f18f16a9f03 100644 --- a/sys/kern/kern_sysctl.c +++ b/sys/kern/kern_sysctl.c @@ -1687,8 +1687,12 @@ sysctl_handle_string(SYSCTL_HANDLER_ARGS) return (error); if (req->newlen - req->newidx >= arg2 || - req->newlen - req->newidx <= 0) { + req->newlen - req->newidx < 0) { error = EINVAL; + } else if (req->newlen - req->newidx == 0) { + sx_xlock(&sysctlstringlock); + ((char *)arg1)[0] = '\0'; + sx_xunlock(&sysctlstringlock); } else { arg2 = req->newlen - req->newidx; tmparg = malloc(arg2, M_SYSCTLTMP, M_WAITOK); From 2e57c8fde7335793b4d4da78a08946342403ba54 Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Mon, 10 Feb 2020 22:28:54 +0000 Subject: [PATCH 060/144] vfs: fix device count leak on vrele racing with vgone The race is: CPU1 CPU2 devfs_reclaim_vchr make v_usecount 0 VI_LOCK sees v_usecount == 0, no updates vp->v_rdev = NULL; ... VI_UNLOCK VI_LOCK v_decr_devcount sees v_rdev == NULL, no updates In this scenario si_devcount decrement is not performed. Note this can only happen if the vnode lock is not held. Reviewed by: kib Tested by: pho Differential Revision: https://reviews.freebsd.org/D23529 --- sys/kern/vfs_subr.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index 70c8e777b00..71772f311a3 100644 --- a/sys/kern/vfs_subr.c +++ b/sys/kern/vfs_subr.c @@ -3192,12 +3192,22 @@ vputx(struct vnode *vp, enum vputx_op func) * count which provides liveness of the vnode, in which case we * have to vdrop. */ - if (!refcount_release(&vp->v_usecount)) { - if (func == VPUTX_VPUT) - VOP_UNLOCK(vp); - return; + if (__predict_false(vp->v_type == VCHR && func == VPUTX_VRELE)) { + if (refcount_release_if_not_last(&vp->v_usecount)) + return; + VI_LOCK(vp); + if (!refcount_release(&vp->v_usecount)) { + VI_UNLOCK(vp); + return; + } + } else { + if (!refcount_release(&vp->v_usecount)) { + if (func == VPUTX_VPUT) + VOP_UNLOCK(vp); + return; + } + VI_LOCK(vp); } - VI_LOCK(vp); v_decr_devcount(vp); /* * By the time we got here someone else might have transitioned From d82420cbfce81ded27dd1debbf197a2235ec070d Mon Sep 17 00:00:00 2001 From: Colin Percival Date: Tue, 11 Feb 2020 04:03:22 +0000 Subject: [PATCH 061/144] Remove /qemu from EC2 ARM AMIs I forgot to do this as part of r345858 -- I added it to the vm_extra_pre_umount in vmimage.subr but forgot that function was overridden in the EC2 build. MFC after: 2 weeks --- release/tools/ec2.conf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/release/tools/ec2.conf b/release/tools/ec2.conf index 4f2af08061b..176b98f7a2b 100644 --- a/release/tools/ec2.conf +++ b/release/tools/ec2.conf @@ -116,6 +116,9 @@ vm_extra_pre_umount() { # * firstboot_pkgs (install packages) touch ${DESTDIR}/firstboot + if ! [ -z "${QEMUSTATIC}" ]; then + rm -f ${DESTDIR}/${EMULATOR} + fi rm -f ${DESTDIR}/etc/resolv.conf return 0 From 9f7cca9218bd3439dfe79d53e4d6baea9ef7fa8b Mon Sep 17 00:00:00 2001 From: Colin Percival Date: Tue, 11 Feb 2020 04:05:45 +0000 Subject: [PATCH 062/144] Mount /dev while deinstalling pkg inside EC2 AMIs. This gets rid of (harmless) warnings: "pkg: Cannot open /dev/null:No such file or directory". MFC after: 2 weeks --- release/tools/ec2.conf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/release/tools/ec2.conf b/release/tools/ec2.conf index 176b98f7a2b..98bb6694ac7 100644 --- a/release/tools/ec2.conf +++ b/release/tools/ec2.conf @@ -40,8 +40,10 @@ vm_extra_pre_umount() { # catalogue and install or update pkg when the instance first # launches, so these files would just be replaced anyway; removing # them from the image allows it to boot faster. + mount -t devfs devfs ${DESTDIR}/dev chroot ${DESTDIR} ${EMULATOR} env ASSUME_ALWAYS_YES=yes \ /usr/sbin/pkg delete -f -y pkg + umount ${DESTDIR}/dev rm ${DESTDIR}/var/db/pkg/repo-*.sqlite # The size of the EC2 root disk can be configured at instance launch From e9104c31422d8a98f5039d19e8cdf230a4f0ba35 Mon Sep 17 00:00:00 2001 From: Kyle Evans Date: Tue, 11 Feb 2020 06:12:02 +0000 Subject: [PATCH 063/144] backup-passwd: mask out all passwords in the diff The previous expression borked if a username had a plus or hyphen in it. This is needlessly restrictive- at leSt a hyphen in the middle is valid. Instead of playing this game, let's just assume the username can't contain a colon and mask out the second field. Submitted by: sigsys gmail com MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D23548 --- usr.sbin/periodic/etc/daily/200.backup-passwd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usr.sbin/periodic/etc/daily/200.backup-passwd b/usr.sbin/periodic/etc/daily/200.backup-passwd index 638e227e3ac..1e9bb896404 100755 --- a/usr.sbin/periodic/etc/daily/200.backup-passwd +++ b/usr.sbin/periodic/etc/daily/200.backup-passwd @@ -42,7 +42,7 @@ case "$daily_backup_passwd_enable" in [ $rc -lt 1 ] && rc=1 echo "$host passwd diffs:" diff -uI '^#' $bak/master.passwd.bak /etc/master.passwd |\ - sed 's/^\([-+ ][^-+:]*\):[^:]*:/\1:(password):/' + sed 's/^\([-+ ][^:]*\):[^:]*:/\1:(password):/' mv $bak/master.passwd.bak $bak/master.passwd.bak2 cp -p /etc/master.passwd $bak/master.passwd.bak || rc=3 fi From 95d27478d2b3ee876906c666a9a8569506d5ecfc Mon Sep 17 00:00:00 2001 From: Michael Tuexen Date: Tue, 11 Feb 2020 14:00:27 +0000 Subject: [PATCH 064/144] Use an int instead of a bool variable, since bool is not supported on all platforms the stack is running on in userland. --- sys/netinet/sctp_pcb.c | 4 ++-- sys/netinet/sctputil.c | 4 ++-- sys/netinet/sctputil.h | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sys/netinet/sctp_pcb.c b/sys/netinet/sctp_pcb.c index a5ddb763a79..24f3a4f53dc 100644 --- a/sys/netinet/sctp_pcb.c +++ b/sys/netinet/sctp_pcb.c @@ -4766,7 +4766,7 @@ sctp_free_assoc(struct sctp_inpcb *inp, struct sctp_tcb *stcb, int from_inpcbfre } } /* Now clean up any other timers */ - sctp_stop_association_timers(stcb, false); + sctp_stop_association_timers(stcb, 0); /* Now the read queue needs to be cleaned up (only once) */ if ((stcb->asoc.state & SCTP_STATE_ABOUT_TO_BE_FREED) == 0) { SCTP_ADD_SUBSTATE(stcb, SCTP_STATE_ABOUT_TO_BE_FREED); @@ -4934,7 +4934,7 @@ sctp_free_assoc(struct sctp_inpcb *inp, struct sctp_tcb *stcb, int from_inpcbfre /* * Now restop the timers to be sure this is paranoia at is finest! */ - sctp_stop_association_timers(stcb, true); + sctp_stop_association_timers(stcb, 1); /* * The chunk lists and such SHOULD be empty but we check them just diff --git a/sys/netinet/sctputil.c b/sys/netinet/sctputil.c index cd4a3ca95b2..73e213f27b1 100644 --- a/sys/netinet/sctputil.c +++ b/sys/netinet/sctputil.c @@ -802,7 +802,7 @@ sctp_stop_timers_for_shutdown(struct sctp_tcb *stcb) } void -sctp_stop_association_timers(struct sctp_tcb *stcb, bool stop_assoc_kill_timer) +sctp_stop_association_timers(struct sctp_tcb *stcb, int stop_assoc_kill_timer) { struct sctp_inpcb *inp; struct sctp_nets *net; @@ -812,7 +812,7 @@ sctp_stop_association_timers(struct sctp_tcb *stcb, bool stop_assoc_kill_timer) SCTP_FROM_SCTPUTIL + SCTP_LOC_18); sctp_timer_stop(SCTP_TIMER_TYPE_STRRESET, inp, stcb, NULL, SCTP_FROM_SCTPUTIL + SCTP_LOC_19); - if (stop_assoc_kill_timer) { + if (stop_assoc_kill_timer != 0) { sctp_timer_stop(SCTP_TIMER_TYPE_ASOCKILL, inp, stcb, NULL, SCTP_FROM_SCTPUTIL + SCTP_LOC_20); } diff --git a/sys/netinet/sctputil.h b/sys/netinet/sctputil.h index 031ad615a0f..fa945935693 100644 --- a/sys/netinet/sctputil.h +++ b/sys/netinet/sctputil.h @@ -165,7 +165,7 @@ sctp_pull_off_control_to_new_inp(struct sctp_inpcb *old_inp, void sctp_stop_timers_for_shutdown(struct sctp_tcb *); /* Stop all timers for association and remote addresses. */ -void sctp_stop_association_timers(struct sctp_tcb *, bool); +void sctp_stop_association_timers(struct sctp_tcb *, int); void sctp_report_all_outbound(struct sctp_tcb *, uint16_t, int, int From 667c3fc0f658d3d345ff0e1b4b7c6bf42a959040 Mon Sep 17 00:00:00 2001 From: Ruslan Bukin Date: Tue, 11 Feb 2020 15:12:09 +0000 Subject: [PATCH 065/144] Add PCI Express driver for the ARM Neoverse N1 System Development Platform (N1SDP). Neoverse N1 is a high-performance ARM microarchitecture designed by the ARM Holdings for the server market. The PCI part on N1SDP was shipped untested and suffers from some integration issues. For instance accessing to not existing BDFs causes System Error (SError) exception. To mitigate this, the firmware scans the bus, catches SErrors and creates a table with valid BDFs. That allows us to filter-out accesses to invalid BDFs in this driver. Also the root complex config space (BDF == 0) has an unusual location in memory map, so remapping accesses to it is required. Finally, the config space is restricted to 32-bit accesses only. This was tested on the ARM boxes kindly provided by the ARM Ltd to the DARPA CHERI Project. In collaboration with: andrew Reviewed by: andrew Sponsored by: DARPA, AFRL Differential Revision: https://reviews.freebsd.org/D23349 --- sys/arm64/conf/GENERIC | 1 + sys/conf/files.arm64 | 1 + sys/dev/pci/controller/pci_n1sdp.c | 350 ++++++++++++++++++++++++++++ sys/dev/pci/pci_host_generic_acpi.c | 14 +- sys/dev/pci/pci_host_generic_acpi.h | 2 +- 5 files changed, 366 insertions(+), 2 deletions(-) create mode 100644 sys/dev/pci/controller/pci_n1sdp.c diff --git a/sys/arm64/conf/GENERIC b/sys/arm64/conf/GENERIC index 42203de4cd2..5bb5b59feba 100644 --- a/sys/arm64/conf/GENERIC +++ b/sys/arm64/conf/GENERIC @@ -147,6 +147,7 @@ device cpufreq # Bus drivers device pci +device pci_n1sdp # ARM Neoverse N1 SDP PCI device al_pci # Annapurna Alpine PCI-E options PCI_HP # PCI-Express native HotPlug options PCI_IOV # PCI SR-IOV support diff --git a/sys/conf/files.arm64 b/sys/conf/files.arm64 index 0c155bcaf55..dcf1d643119 100644 --- a/sys/conf/files.arm64 +++ b/sys/conf/files.arm64 @@ -248,6 +248,7 @@ dev/neta/if_mvneta_fdt.c optional neta fdt dev/neta/if_mvneta.c optional neta mdio mii dev/ofw/ofw_cpu.c optional fdt dev/ofw/ofwpci.c optional fdt pci +dev/pci/controller/pci_n1sdp.c optional pci_n1sdp acpi dev/pci/pci_host_generic.c optional pci dev/pci/pci_host_generic_acpi.c optional pci acpi dev/pci/pci_host_generic_fdt.c optional pci fdt diff --git a/sys/dev/pci/controller/pci_n1sdp.c b/sys/dev/pci/controller/pci_n1sdp.c new file mode 100644 index 00000000000..d51641c432f --- /dev/null +++ b/sys/dev/pci/controller/pci_n1sdp.c @@ -0,0 +1,350 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2019 Andrew Turner + * Copyright (c) 2019 Ruslan Bukin + * + * This software was developed by SRI International and the University of + * Cambridge Computer Laboratory (Department of Computer Science and + * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the + * DARPA SSITH research programme. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include +#include + +#include "pcib_if.h" + +#define AP_NS_SHARED_MEM_BASE 0x06000000 +#define N1SDP_MAX_SEGMENTS 2 /* Two PCIe root complex devices. */ +#define BDF_TABLE_SIZE (16 * 1024) +#define PCI_CFG_SPACE_SIZE 0x1000 + +struct pcie_discovery_data { + uint32_t rc_base_addr; + uint32_t nr_bdfs; + uint32_t valid_bdfs[0]; +}; + +struct generic_pcie_n1sdp_softc { + struct generic_pcie_acpi_softc acpi; + struct pcie_discovery_data *n1_discovery_data; + bus_space_handle_t n1_bsh; +}; + +static int +n1sdp_init(struct generic_pcie_n1sdp_softc *sc) +{ + struct pcie_discovery_data *shared_data; + vm_offset_t vaddr; + vm_paddr_t paddr_rc; + vm_paddr_t paddr; + int table_count; + int bdfs_size; + int error, i; + + paddr = AP_NS_SHARED_MEM_BASE + sc->acpi.segment * BDF_TABLE_SIZE; + vaddr = kva_alloc((vm_size_t)BDF_TABLE_SIZE); + if (vaddr == 0) { + printf("%s: Can't allocate KVA memory.", __func__); + return (ENXIO); + } + pmap_kenter(vaddr, (vm_size_t)BDF_TABLE_SIZE, paddr, + VM_MEMATTR_UNCACHEABLE); + + shared_data = (struct pcie_discovery_data *)vaddr; + bdfs_size = sizeof(struct pcie_discovery_data) + + sizeof(uint32_t) * shared_data->nr_bdfs; + sc->n1_discovery_data = malloc(bdfs_size, M_DEVBUF, M_WAITOK | M_ZERO); + memcpy(sc->n1_discovery_data, shared_data, bdfs_size); + + paddr_rc = (vm_offset_t)shared_data->rc_base_addr; + error = bus_space_map(sc->acpi.base.bst, paddr_rc, PCI_CFG_SPACE_SIZE, + 0, &sc->n1_bsh); + if (error != 0) + return (error); + + if (bootverbose) { + table_count = sc->n1_discovery_data->nr_bdfs; + for (i = 0; i < table_count; i++) + printf("valid bdf %x\n", + sc->n1_discovery_data->valid_bdfs[i]); + } + + pmap_kremove(vaddr); + kva_free(vaddr, (vm_size_t)BDF_TABLE_SIZE); + + return (0); +} + +static int +n1sdp_check_bdf(struct generic_pcie_n1sdp_softc *sc, + u_int bus, u_int slot, u_int func) +{ + int table_count; + int bdf; + int i; + + bdf = PCIE_ADDR_OFFSET(bus, slot, func, 0); + if (bdf == 0) + return (1); + + table_count = sc->n1_discovery_data->nr_bdfs; + + for (i = 0; i < table_count; i++) + if (bdf == sc->n1_discovery_data->valid_bdfs[i]) + return (1); + + return (0); +} + +static int +n1sdp_pcie_acpi_probe(device_t dev) +{ + ACPI_DEVICE_INFO *devinfo; + ACPI_TABLE_HEADER *hdr; + ACPI_STATUS status; + ACPI_HANDLE h; + int root; + + if (acpi_disabled("pcib") || (h = acpi_get_handle(dev)) == NULL || + ACPI_FAILURE(AcpiGetObjectInfo(h, &devinfo))) + return (ENXIO); + + root = (devinfo->Flags & ACPI_PCI_ROOT_BRIDGE) != 0; + AcpiOsFree(devinfo); + if (!root) + return (ENXIO); + + /* TODO: Move this to an ACPI quirk? */ + status = AcpiGetTable(ACPI_SIG_MCFG, 1, &hdr); + if (ACPI_FAILURE(status)) + return (ENXIO); + + if (memcmp(hdr->OemId, "ARMLTD", ACPI_OEM_ID_SIZE) != 0 || + memcmp(hdr->OemTableId, "ARMN1SDP", ACPI_OEM_TABLE_ID_SIZE) != 0 || + hdr->OemRevision != 0x20181101) + return (ENXIO); + + device_set_desc(dev, "ARM N1SDP PCI host controller"); + return (BUS_PROBE_DEFAULT); +} + +static int +n1sdp_pcie_acpi_attach(device_t dev) +{ + struct generic_pcie_n1sdp_softc *sc; + ACPI_HANDLE handle; + ACPI_STATUS status; + int err; + + err = pci_host_generic_acpi_init(dev); + if (err != 0) + return (err); + + sc = device_get_softc(dev); + handle = acpi_get_handle(dev); + + /* Get PCI Segment (domain) needed for IOMMU space remap. */ + status = acpi_GetInteger(handle, "_SEG", &sc->acpi.segment); + if (ACPI_FAILURE(status)) { + device_printf(dev, "No _SEG for PCI Bus\n"); + return (ENXIO); + } + + if (sc->acpi.segment >= N1SDP_MAX_SEGMENTS) { + device_printf(dev, "Unknown PCI Bus segment (domain) %d\n", + sc->acpi.segment); + return (ENXIO); + } + + err = n1sdp_init(sc); + if (err) + return (err); + + device_add_child(dev, "pci", -1); + return (bus_generic_attach(dev)); +} + +static int +n1sdp_get_bus_space(device_t dev, u_int bus, u_int slot, u_int func, u_int reg, + bus_space_tag_t *bst, bus_space_handle_t *bsh, bus_size_t *offset) +{ + struct generic_pcie_n1sdp_softc *sc; + + sc = device_get_softc(dev); + + if (n1sdp_check_bdf(sc, bus, slot, func) == 0) + return (EINVAL); + + if (bus == sc->acpi.base.bus_start) { + if (slot != 0 || func != 0) + return (EINVAL); + *bsh = sc->n1_bsh; + } else { + *bsh = sc->acpi.base.bsh; + } + + *bst = sc->acpi.base.bst; + *offset = PCIE_ADDR_OFFSET(bus - sc->acpi.base.bus_start, slot, func, + reg); + + return (0); +} + +static uint32_t +n1sdp_pcie_read_config(device_t dev, u_int bus, u_int slot, + u_int func, u_int reg, int bytes) +{ + struct generic_pcie_n1sdp_softc *sc_n1sdp; + struct generic_pcie_acpi_softc *sc_acpi; + struct generic_pcie_core_softc *sc; + bus_space_handle_t h; + bus_space_tag_t t; + bus_size_t offset; + uint32_t data; + + sc_n1sdp = device_get_softc(dev); + sc_acpi = &sc_n1sdp->acpi; + sc = &sc_acpi->base; + + if ((bus < sc->bus_start) || (bus > sc->bus_end)) + return (~0U); + if ((slot > PCI_SLOTMAX) || (func > PCI_FUNCMAX) || + (reg > PCIE_REGMAX)) + return (~0U); + + if (n1sdp_get_bus_space(dev, bus, slot, func, reg, &t, &h, &offset) !=0) + return (~0U); + + data = bus_space_read_4(t, h, offset & ~3); + + switch (bytes) { + case 1: + data >>= (offset & 3) * 8; + data &= 0xff; + break; + case 2: + data >>= (offset & 3) * 8; + data = le16toh(data); + break; + case 4: + data = le32toh(data); + break; + default: + return (~0U); + } + + return (data); +} + +static void +n1sdp_pcie_write_config(device_t dev, u_int bus, u_int slot, + u_int func, u_int reg, uint32_t val, int bytes) +{ + struct generic_pcie_n1sdp_softc *sc_n1sdp; + struct generic_pcie_acpi_softc *sc_acpi; + struct generic_pcie_core_softc *sc; + bus_space_handle_t h; + bus_space_tag_t t; + bus_size_t offset; + uint32_t data; + + sc_n1sdp = device_get_softc(dev); + sc_acpi = &sc_n1sdp->acpi; + sc = &sc_acpi->base; + + if ((bus < sc->bus_start) || (bus > sc->bus_end)) + return; + if ((slot > PCI_SLOTMAX) || (func > PCI_FUNCMAX) || + (reg > PCIE_REGMAX)) + return; + + if (n1sdp_get_bus_space(dev, bus, slot, func, reg, &t, &h, &offset) !=0) + return; + + data = bus_space_read_4(t, h, offset & ~3); + + switch (bytes) { + case 1: + data &= ~(0xff << ((offset & 3) * 8)); + data |= (val & 0xff) << ((offset & 3) * 8); + break; + case 2: + data &= ~(0xffff << ((offset & 3) * 8)); + data |= (val & 0xffff) << ((offset & 3) * 8); + break; + case 4: + data = val; + break; + default: + return; + } + + bus_space_write_4(t, h, offset & ~3, data); +} + +static device_method_t n1sdp_pcie_acpi_methods[] = { + DEVMETHOD(device_probe, n1sdp_pcie_acpi_probe), + DEVMETHOD(device_attach, n1sdp_pcie_acpi_attach), + + /* pcib interface */ + DEVMETHOD(pcib_read_config, n1sdp_pcie_read_config), + DEVMETHOD(pcib_write_config, n1sdp_pcie_write_config), + + DEVMETHOD_END +}; + +DEFINE_CLASS_1(pcib, n1sdp_pcie_acpi_driver, n1sdp_pcie_acpi_methods, + sizeof(struct generic_pcie_n1sdp_softc), generic_pcie_acpi_driver); + +static devclass_t n1sdp_pcie_acpi_devclass; + +DRIVER_MODULE(n1sdp_pcib, acpi, n1sdp_pcie_acpi_driver, + n1sdp_pcie_acpi_devclass, 0, 0); diff --git a/sys/dev/pci/pci_host_generic_acpi.c b/sys/dev/pci/pci_host_generic_acpi.c index c5ca9ab0a1d..f853c69a3af 100644 --- a/sys/dev/pci/pci_host_generic_acpi.c +++ b/sys/dev/pci/pci_host_generic_acpi.c @@ -230,7 +230,7 @@ pci_host_acpi_get_ecam_resource(device_t dev) } int -pci_host_generic_acpi_attach(device_t dev) +pci_host_generic_acpi_init(device_t dev) { struct generic_pcie_acpi_softc *sc; ACPI_HANDLE handle; @@ -302,6 +302,18 @@ pci_host_generic_acpi_attach(device_t dev) } } + return (0); +} + +static int +pci_host_generic_acpi_attach(device_t dev) +{ + int error; + + error = pci_host_generic_acpi_init(dev); + if (error != 0) + return (error); + device_add_child(dev, "pci", -1); return (bus_generic_attach(dev)); } diff --git a/sys/dev/pci/pci_host_generic_acpi.h b/sys/dev/pci/pci_host_generic_acpi.h index eb9b2309470..58bfd90a9fd 100644 --- a/sys/dev/pci/pci_host_generic_acpi.h +++ b/sys/dev/pci/pci_host_generic_acpi.h @@ -42,6 +42,6 @@ struct generic_pcie_acpi_softc { DECLARE_CLASS(generic_pcie_acpi_driver); -int pci_host_generic_acpi_attach(device_t dev); +int pci_host_generic_acpi_init(device_t dev); #endif /* !_DEV_PCI_PCI_HOST_GENERIC_ACPI_H_ */ From a249895df889ef1624fb0918cc8c4ef5bcfd7cd1 Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Tue, 11 Feb 2020 17:41:45 +0000 Subject: [PATCH 066/144] if_media.c: use __FBSDID(). Reviewed by: hselasky Sponsored by: Mellanox Technologies Differential revision: https://reviews.freebsd.org/D23620 --- sys/net/if_media.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sys/net/if_media.c b/sys/net/if_media.c index 390d48ab13a..2d1f8c91723 100644 --- a/sys/net/if_media.c +++ b/sys/net/if_media.c @@ -1,5 +1,4 @@ /* $NetBSD: if_media.c,v 1.1 1997/03/17 02:55:15 thorpej Exp $ */ -/* $FreeBSD$ */ /*- * SPDX-License-Identifier: BSD-4-Clause @@ -48,6 +47,9 @@ * to implement this interface. */ +#include +__FBSDID("$FreeBSD$"); + #include "opt_ifmedia.h" #include From 48ad3b215c6c5d1e3d5569b13861356c3989d55a Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Tue, 11 Feb 2020 17:45:01 +0000 Subject: [PATCH 067/144] if_media.c: staticize and constify ifmedia description structures used under IFMEDIA_DEBUG. The reason for this change is to make it clear the scope of the in-kernel usage of IFM_TYPE_DESCRIPTIONS and IFM_SUBTYPE_ETHERNET_DESCRIPTIONS macros. Also it is somewhat better C. Reviewed by: hselasky Sponsored by: Mellanox Technologies Differential revision: https://reviews.freebsd.org/D23620 --- sys/net/if_media.c | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/sys/net/if_media.c b/sys/net/if_media.c index 2d1f8c91723..4df6b8b5594 100644 --- a/sys/net/if_media.c +++ b/sys/net/if_media.c @@ -392,44 +392,47 @@ ifmedia_baudrate(int mword) } #ifdef IFMEDIA_DEBUG -struct ifmedia_description ifm_type_descriptions[] = +static const struct ifmedia_description ifm_type_descriptions[] = IFM_TYPE_DESCRIPTIONS; -struct ifmedia_description ifm_subtype_ethernet_descriptions[] = +static const struct ifmedia_description ifm_subtype_ethernet_descriptions[] = IFM_SUBTYPE_ETHERNET_DESCRIPTIONS; -struct ifmedia_description ifm_subtype_ethernet_option_descriptions[] = +static const struct ifmedia_description + ifm_subtype_ethernet_option_descriptions[] = IFM_SUBTYPE_ETHERNET_OPTION_DESCRIPTIONS; -struct ifmedia_description ifm_subtype_ieee80211_descriptions[] = +static const struct ifmedia_description ifm_subtype_ieee80211_descriptions[] = IFM_SUBTYPE_IEEE80211_DESCRIPTIONS; -struct ifmedia_description ifm_subtype_ieee80211_option_descriptions[] = +static const struct ifmedia_description + ifm_subtype_ieee80211_option_descriptions[] = IFM_SUBTYPE_IEEE80211_OPTION_DESCRIPTIONS; -struct ifmedia_description ifm_subtype_ieee80211_mode_descriptions[] = +static const struct ifmedia_description + ifm_subtype_ieee80211_mode_descriptions[] = IFM_SUBTYPE_IEEE80211_MODE_DESCRIPTIONS; -struct ifmedia_description ifm_subtype_atm_descriptions[] = +static const struct ifmedia_description ifm_subtype_atm_descriptions[] = IFM_SUBTYPE_ATM_DESCRIPTIONS; -struct ifmedia_description ifm_subtype_atm_option_descriptions[] = +static const struct ifmedia_description ifm_subtype_atm_option_descriptions[] = IFM_SUBTYPE_ATM_OPTION_DESCRIPTIONS; -struct ifmedia_description ifm_subtype_shared_descriptions[] = +static const struct ifmedia_description ifm_subtype_shared_descriptions[] = IFM_SUBTYPE_SHARED_DESCRIPTIONS; -struct ifmedia_description ifm_shared_option_descriptions[] = +static const struct ifmedia_description ifm_shared_option_descriptions[] = IFM_SHARED_OPTION_DESCRIPTIONS; struct ifmedia_type_to_subtype { - struct ifmedia_description *subtypes; - struct ifmedia_description *options; - struct ifmedia_description *modes; + const struct ifmedia_description *subtypes; + const struct ifmedia_description *options; + const struct ifmedia_description *modes; }; /* must be in the same order as IFM_TYPE_DESCRIPTIONS */ -struct ifmedia_type_to_subtype ifmedia_types_to_subtypes[] = { +static const struct ifmedia_type_to_subtype ifmedia_types_to_subtypes[] = { { &ifm_subtype_ethernet_descriptions[0], &ifm_subtype_ethernet_option_descriptions[0], @@ -454,8 +457,8 @@ static void ifmedia_printword(ifmw) int ifmw; { - struct ifmedia_description *desc; - struct ifmedia_type_to_subtype *ttos; + const struct ifmedia_description *desc; + const struct ifmedia_type_to_subtype *ttos; int seen_option = 0; /* Find the top-level interface type. */ From 5d1277ca9a60f478967c302c0848e0702de00aed Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Tue, 11 Feb 2020 18:03:45 +0000 Subject: [PATCH 068/144] if_media.h: Add 50G KR4 ethernet media type. Submitted by: Adam Peace Reviewed by: hselasky Differential revision: https://reviews.freebsd.org/D23620 --- sys/net/ieee8023ad_lacp.c | 1 + sys/net/if_media.h | 3 +++ 2 files changed, 4 insertions(+) diff --git a/sys/net/ieee8023ad_lacp.c b/sys/net/ieee8023ad_lacp.c index 7358b7cfa5e..c5e4125d1d8 100644 --- a/sys/net/ieee8023ad_lacp.c +++ b/sys/net/ieee8023ad_lacp.c @@ -1194,6 +1194,7 @@ lacp_compose_key(struct lacp_port *lp) case IFM_50G_PCIE: case IFM_50G_CR2: case IFM_50G_KR2: + case IFM_50G_KR4: case IFM_50G_SR2: case IFM_50G_LR2: case IFM_50G_LAUI2_AC: diff --git a/sys/net/if_media.h b/sys/net/if_media.h index 8192a6790a0..dad2555e6bd 100644 --- a/sys/net/if_media.h +++ b/sys/net/if_media.h @@ -258,6 +258,7 @@ uint64_t ifmedia_baudrate(int); #define IFM_400G_DR4 IFM_X(115) /* 400GBase-DR4 */ #define IFM_400G_AUI8_AC IFM_X(116) /* 400G-AUI8 active copper/optical */ #define IFM_400G_AUI8 IFM_X(117) /* 400G-AUI8 */ +#define IFM_50G_KR4 IFM_X(118) /* 50GBase-KR4 */ /* * Please update ieee8023ad_lacp.c:lacp_compose_key() @@ -484,6 +485,7 @@ struct ifmedia_description { { IFM_25G_SR, "25GBase-SR" }, \ { IFM_50G_CR2, "50GBase-CR2" }, \ { IFM_50G_KR2, "50GBase-KR2" }, \ + { IFM_50G_KR4, "50GBase-KR4" }, \ { IFM_25G_LR, "25GBase-LR" }, \ { IFM_10G_AOC, "10GBase-AOC" }, \ { IFM_25G_ACC, "25GBase-ACC" }, \ @@ -827,6 +829,7 @@ struct ifmedia_baudrate { { IFM_ETHER | IFM_25G_SR, IF_Gbps(25ULL) }, \ { IFM_ETHER | IFM_50G_CR2, IF_Gbps(50ULL) }, \ { IFM_ETHER | IFM_50G_KR2, IF_Gbps(50ULL) }, \ + { IFM_ETHER | IFM_50G_KR4, IF_Gbps(50ULL) }, \ { IFM_ETHER | IFM_25G_LR, IF_Gbps(25ULL) }, \ { IFM_ETHER | IFM_10G_AOC, IF_Gbps(10ULL) }, \ { IFM_ETHER | IFM_25G_ACC, IF_Gbps(25ULL) }, \ From 1b853b62f352ec3c6fced5411b43df27a6d7482a Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Tue, 11 Feb 2020 18:13:53 +0000 Subject: [PATCH 069/144] capsicum: restore the cap_rights_contains symbol It is expected to be provided by libc. PR: 244033 Reported by: Jan Kokemueller --- sys/kern/subr_capability.c | 24 ++++++++++++++++++++++++ sys/sys/capsicum.h | 5 ++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/sys/kern/subr_capability.c b/sys/kern/subr_capability.c index 559dc8e52cc..5f2862b4ef3 100644 --- a/sys/kern/subr_capability.c +++ b/sys/kern/subr_capability.c @@ -394,3 +394,27 @@ cap_rights_remove(cap_rights_t *dst, const cap_rights_t *src) return (dst); } + +#ifndef _KERNEL +bool +cap_rights_contains(const cap_rights_t *big, const cap_rights_t *little) +{ + unsigned int i, n; + + assert(CAPVER(big) == CAP_RIGHTS_VERSION_00); + assert(CAPVER(little) == CAP_RIGHTS_VERSION_00); + assert(CAPVER(big) == CAPVER(little)); + + n = CAPARSIZE(big); + assert(n >= CAPARSIZE_MIN && n <= CAPARSIZE_MAX); + + for (i = 0; i < n; i++) { + if ((big->cr_rights[i] & little->cr_rights[i]) != + little->cr_rights[i]) { + return (false); + } + } + + return (true); +} +#endif diff --git a/sys/sys/capsicum.h b/sys/sys/capsicum.h index 405dc79c2ab..fd5743ec2fe 100644 --- a/sys/sys/capsicum.h +++ b/sys/sys/capsicum.h @@ -344,7 +344,7 @@ cap_rights_t *cap_rights_merge(cap_rights_t *dst, const cap_rights_t *src); cap_rights_t *cap_rights_remove(cap_rights_t *dst, const cap_rights_t *src); void __cap_rights_sysinit(void *arg); - +#ifdef _KERNEL /* * We only support one size to reduce branching. */ @@ -390,6 +390,9 @@ cap_check_inline_transient(const cap_rights_t *havep, const cap_rights_t *needp) return (1); return (0); } +#else +bool cap_rights_contains(const cap_rights_t *big, const cap_rights_t *little); +#endif __END_DECLS struct cap_rights_init_args { From e7ce9c32a720eba10621598f5a99cd03505f4733 Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Tue, 11 Feb 2020 18:15:23 +0000 Subject: [PATCH 070/144] amd64: remove redundant sa->code assignment from cpu_fetch_syscall_args_fallback It is already set in the only caller. --- sys/amd64/amd64/trap.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/sys/amd64/amd64/trap.c b/sys/amd64/amd64/trap.c index 19157ce2fb3..08423b6182c 100644 --- a/sys/amd64/amd64/trap.c +++ b/sys/amd64/amd64/trap.c @@ -993,8 +993,6 @@ cpu_fetch_syscall_args_fallback(struct thread *td, struct syscall_args *sa) reg = 0; regcnt = NARGREGS; - sa->code = frame->tf_rax; - if (sa->code == SYS_syscall || sa->code == SYS___syscall) { sa->code = frame->tf_rdi; reg++; From 9803f01cdb894b7b77959f551dd741dbc26d0fdd Mon Sep 17 00:00:00 2001 From: Michael Tuexen Date: Tue, 11 Feb 2020 18:15:57 +0000 Subject: [PATCH 071/144] Don't start an SCTP timer using a net, which has been removed. Submitted by: Taylor Brandstetter MFC after: 1 week --- sys/netinet/sctp_pcb.c | 1 + sys/netinet/sctputil.c | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/sys/netinet/sctp_pcb.c b/sys/netinet/sctp_pcb.c index 24f3a4f53dc..44e09678440 100644 --- a/sys/netinet/sctp_pcb.c +++ b/sys/netinet/sctp_pcb.c @@ -4480,6 +4480,7 @@ out: SCTP_FROM_SCTP_PCB + SCTP_LOC_9); sctp_timer_stop(SCTP_TIMER_TYPE_HEARTBEAT, inp, stcb, net, SCTP_FROM_SCTP_PCB + SCTP_LOC_10); + net->dest_state |= SCTP_ADDR_BEING_DELETED; sctp_free_remote_addr(net); } diff --git a/sys/netinet/sctputil.c b/sys/netinet/sctputil.c index 73e213f27b1..74360cfe1a3 100644 --- a/sys/netinet/sctputil.c +++ b/sys/netinet/sctputil.c @@ -2050,6 +2050,10 @@ sctp_timer_start(int t_type, struct sctp_inpcb *inp, struct sctp_tcb *stcb, if (stcb) { SCTP_TCB_LOCK_ASSERT(stcb); } + /* Don't restart timer on net that's been removed. */ + if (net != NULL && (net->dest_state & SCTP_ADDR_BEING_DELETED)) { + return; + } switch (t_type) { case SCTP_TIMER_TYPE_ADDR_WQ: /* Only 1 tick away :-) */ From b4426a7175a318c237119e8a81434b64a6cfffe4 Mon Sep 17 00:00:00 2001 From: Hans Petter Selasky Date: Tue, 11 Feb 2020 18:16:29 +0000 Subject: [PATCH 072/144] Add missing EPOCH(9) wrapper in ipfw(8). Backtrace: panic() ip_output() dyn_tick() softclock_call_cc() softclock() ithread_loop() Differential Revision: https://reviews.freebsd.org/D23599 Reviewed by: glebius@ and ae@ Found by: mmacy@ Reported by: jmd@ Sponsored by: Mellanox Technologies --- sys/netpfil/ipfw/ip_fw_dynamic.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sys/netpfil/ipfw/ip_fw_dynamic.c b/sys/netpfil/ipfw/ip_fw_dynamic.c index d2a5c94347c..6825c5d1eba 100644 --- a/sys/netpfil/ipfw/ip_fw_dynamic.c +++ b/sys/netpfil/ipfw/ip_fw_dynamic.c @@ -2718,6 +2718,7 @@ dyn_grow_hashtable(struct ip_fw_chain *chain, uint32_t new) static void dyn_tick(void *vnetx) { + struct epoch_tracker et; uint32_t buckets; CURVNET_SET((struct vnet *)vnetx); @@ -2740,10 +2741,12 @@ dyn_tick(void *vnetx) if (V_dyn_keepalive != 0 && V_dyn_keepalive_last + V_dyn_keepalive_period <= time_uptime) { V_dyn_keepalive_last = time_uptime; + NET_EPOCH_ENTER(et); dyn_send_keepalive_ipv4(&V_layer3_chain); #ifdef INET6 dyn_send_keepalive_ipv6(&V_layer3_chain); #endif + NET_EPOCH_EXIT(et); } /* * Check if we need to resize the hash: From 57349a4f415fdcf38d1d668072c9c455eff665fc Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Tue, 11 Feb 2020 18:19:56 +0000 Subject: [PATCH 073/144] vfs: fix vhold race in mnt_vnode_next_lazy_relock vdrop can set the hold count to 0 and wait for the ->mnt_listmtx held by mnt_vnode_next_lazy_relock caller. The routine incorrectly asserted the count has to be > 0. Reported by: pho Tested by: pho --- sys/kern/vfs_subr.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index 71772f311a3..527f893e435 100644 --- a/sys/kern/vfs_subr.c +++ b/sys/kern/vfs_subr.c @@ -6264,7 +6264,13 @@ mnt_vnode_next_lazy_relock(struct vnode *mvp, struct mount *mp, TAILQ_REMOVE(&mp->mnt_lazyvnodelist, mvp, v_lazylist); TAILQ_INSERT_BEFORE(vp, mvp, v_lazylist); - vholdnz(vp); + /* + * Note we may be racing against vdrop which transitioned the hold + * count to 0 and now waits for the ->mnt_listmtx lock. This is fine, + * if we are the only user after we get the interlock we will just + * vdrop. + */ + vhold(vp); mtx_unlock(&mp->mnt_listmtx); VI_LOCK(vp); if (VN_IS_DOOMED(vp)) { @@ -6273,8 +6279,7 @@ mnt_vnode_next_lazy_relock(struct vnode *mvp, struct mount *mp, } VNPASS(vp->v_mflag & VMP_LAZYLIST, vp); /* - * Since we had a period with no locks held we may be the last - * remaining user, in which case there is nothing to do. + * There is nothing to do if we are the last user. */ if (!refcount_release_if_not_last(&vp->v_holdcnt)) goto out_lost; From 4426b2e64bd6ff5b05997d985140323b3db67085 Mon Sep 17 00:00:00 2001 From: Gleb Smirnoff Date: Tue, 11 Feb 2020 18:48:07 +0000 Subject: [PATCH 074/144] Add flag to struct task to mark the task as requiring network epoch. When processing a taskqueue and a task has associated epoch, then enter for duration of the task. If consecutive tasks belong to the same epoch, batch them. Now we are talking about the network epoch only. Shrink the ta_priority size to 8-bits. No current consumers use a priority that won't fit into 8 bits. Also complexity of taskqueue_enqueue() is a square of maximum value of priority, so we unlikely ever want to go over UCHAR_MAX here. Reviewed by: hselasky Differential Revision: https://reviews.freebsd.org/D23518 --- sys/kern/subr_gtaskqueue.c | 13 +++++++++++++ sys/kern/subr_taskqueue.c | 15 ++++++++++++++- sys/sys/_task.h | 9 ++++++++- sys/sys/epoch.h | 3 +++ sys/sys/gtaskqueue.h | 6 +----- sys/sys/taskqueue.h | 24 +++++++++++++++--------- 6 files changed, 54 insertions(+), 16 deletions(-) diff --git a/sys/kern/subr_gtaskqueue.c b/sys/kern/subr_gtaskqueue.c index 16418b32253..9bf4b0ca3ad 100644 --- a/sys/kern/subr_gtaskqueue.c +++ b/sys/kern/subr_gtaskqueue.c @@ -41,6 +41,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -342,13 +343,16 @@ gtaskqueue_unblock(struct gtaskqueue *queue) static void gtaskqueue_run_locked(struct gtaskqueue *queue) { + struct epoch_tracker et; struct gtaskqueue_busy tb; struct gtask *gtask; + bool in_net_epoch; KASSERT(queue != NULL, ("tq is NULL")); TQ_ASSERT_LOCKED(queue); tb.tb_running = NULL; LIST_INSERT_HEAD(&queue->tq_active, &tb, tb_link); + in_net_epoch = false; while ((gtask = STAILQ_FIRST(&queue->tq_queue)) != NULL) { STAILQ_REMOVE_HEAD(&queue->tq_queue, ta_link); @@ -358,11 +362,20 @@ gtaskqueue_run_locked(struct gtaskqueue *queue) TQ_UNLOCK(queue); KASSERT(gtask->ta_func != NULL, ("task->ta_func is NULL")); + if (!in_net_epoch && TASK_IS_NET(gtask)) { + in_net_epoch = true; + NET_EPOCH_ENTER(et); + } else if (in_net_epoch && !TASK_IS_NET(gtask)) { + NET_EPOCH_EXIT(et); + in_net_epoch = false; + } gtask->ta_func(gtask->ta_context); TQ_LOCK(queue); wakeup(gtask); } + if (in_net_epoch) + NET_EPOCH_EXIT(et); LIST_REMOVE(&tb, tb_link); } diff --git a/sys/kern/subr_taskqueue.c b/sys/kern/subr_taskqueue.c index 69f6c5376c9..0f1503c7f7c 100644 --- a/sys/kern/subr_taskqueue.c +++ b/sys/kern/subr_taskqueue.c @@ -42,6 +42,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -371,7 +372,7 @@ taskqueue_drain_tq_queue(struct taskqueue *queue) * anyway) so just insert it at tail while we have the * queue lock. */ - TASK_INIT(&t_barrier, USHRT_MAX, taskqueue_task_nop_fn, &t_barrier); + TASK_INIT(&t_barrier, UCHAR_MAX, taskqueue_task_nop_fn, &t_barrier); STAILQ_INSERT_TAIL(&queue->tq_queue, &t_barrier, ta_link); queue->tq_hint = &t_barrier; t_barrier.ta_pending = 1; @@ -442,14 +443,17 @@ taskqueue_unblock(struct taskqueue *queue) static void taskqueue_run_locked(struct taskqueue *queue) { + struct epoch_tracker et; struct taskqueue_busy tb; struct task *task; + bool in_net_epoch; int pending; KASSERT(queue != NULL, ("tq is NULL")); TQ_ASSERT_LOCKED(queue); tb.tb_running = NULL; LIST_INSERT_HEAD(&queue->tq_active, &tb, tb_link); + in_net_epoch = false; while ((task = STAILQ_FIRST(&queue->tq_queue)) != NULL) { STAILQ_REMOVE_HEAD(&queue->tq_queue, ta_link); @@ -462,11 +466,20 @@ taskqueue_run_locked(struct taskqueue *queue) TQ_UNLOCK(queue); KASSERT(task->ta_func != NULL, ("task->ta_func is NULL")); + if (!in_net_epoch && TASK_IS_NET(task)) { + in_net_epoch = true; + NET_EPOCH_ENTER(et); + } else if (in_net_epoch && !TASK_IS_NET(task)) { + NET_EPOCH_EXIT(et); + in_net_epoch = false; + } task->ta_func(task->ta_context, pending); TQ_LOCK(queue); wakeup(task); } + if (in_net_epoch) + NET_EPOCH_EXIT(et); LIST_REMOVE(&tb, tb_link); } diff --git a/sys/sys/_task.h b/sys/sys/_task.h index 6ee48800cad..043707d3b5f 100644 --- a/sys/sys/_task.h +++ b/sys/sys/_task.h @@ -48,11 +48,18 @@ typedef void task_fn_t(void *context, int pending); struct task { STAILQ_ENTRY(task) ta_link; /* (q) link for queue */ uint16_t ta_pending; /* (q) count times queued */ - u_short ta_priority; /* (c) Priority */ + uint8_t ta_priority; /* (c) Priority */ + uint8_t ta_flags; /* (c) Flags */ task_fn_t *ta_func; /* (c) task handler */ void *ta_context; /* (c) argument for handler */ }; +#define TASK_ENQUEUED 0x1 +#define TASK_NOENQUEUE 0x2 +#define TASK_NETWORK 0x4 + +#define TASK_IS_NET(ta) ((ta)->ta_flags & TASK_NETWORK) + #ifdef _KERNEL typedef void gtask_fn_t(void *context); diff --git a/sys/sys/epoch.h b/sys/sys/epoch.h index a6aea56b140..25d2bb3dc6e 100644 --- a/sys/sys/epoch.h +++ b/sys/sys/epoch.h @@ -104,6 +104,9 @@ extern epoch_t net_epoch_preempt; #define NET_EPOCH_WAIT() epoch_wait_preempt(net_epoch_preempt) #define NET_EPOCH_CALL(f, c) epoch_call(net_epoch_preempt, (f), (c)) #define NET_EPOCH_ASSERT() MPASS(in_epoch(net_epoch_preempt)) +#define NET_TASK_INIT(t, p, f, c) TASK_INIT_FLAGS(t, p, f, c, TASK_NETWORK) +#define NET_GROUPTASK_INIT(gtask, prio, func, ctx) \ + GTASK_INIT(&(gtask)->gt_task, TASK_NETWORK, (prio), (func), (ctx)) #endif /* _KERNEL */ #endif /* _SYS_EPOCH_H_ */ diff --git a/sys/sys/gtaskqueue.h b/sys/sys/gtaskqueue.h index a03bfebc09b..96fd57dfb76 100644 --- a/sys/sys/gtaskqueue.h +++ b/sys/sys/gtaskqueue.h @@ -84,10 +84,6 @@ void taskqgroup_config_gtask_init(void *ctx, struct grouptask *gtask, gtask_fn_t *fn, const char *name); void taskqgroup_config_gtask_deinit(struct grouptask *gtask); -#define TASK_ENQUEUED 0x1 -#define TASK_SKIP_WAKEUP 0x2 -#define TASK_NOENQUEUE 0x4 - #define GTASK_INIT(gtask, flags, priority, func, context) do { \ (gtask)->ta_flags = flags; \ (gtask)->ta_priority = (priority); \ @@ -96,7 +92,7 @@ void taskqgroup_config_gtask_deinit(struct grouptask *gtask); } while (0) #define GROUPTASK_INIT(gtask, priority, func, context) \ - GTASK_INIT(&(gtask)->gt_task, TASK_SKIP_WAKEUP, priority, func, context) + GTASK_INIT(&(gtask)->gt_task, 0, priority, func, context) #define GROUPTASK_ENQUEUE(gtask) \ grouptaskqueue_enqueue((gtask)->gt_taskqueue, &(gtask)->gt_task) diff --git a/sys/sys/taskqueue.h b/sys/sys/taskqueue.h index 3f7ff1f529a..2be3c96bdae 100644 --- a/sys/sys/taskqueue.h +++ b/sys/sys/taskqueue.h @@ -107,8 +107,7 @@ void taskqueue_set_callback(struct taskqueue *queue, taskqueue_callback_fn callback, void *context); #define TASK_INITIALIZER(priority, func, context) \ - { .ta_pending = 0, \ - .ta_priority = (priority), \ + { .ta_priority = (priority), \ .ta_func = (func), \ .ta_context = (context) } @@ -121,18 +120,25 @@ void taskqueue_thread_enqueue(void *context); /* * Initialise a task structure. */ -#define TASK_INIT(task, priority, func, context) do { \ - (task)->ta_pending = 0; \ - (task)->ta_priority = (priority); \ - (task)->ta_func = (func); \ - (task)->ta_context = (context); \ +#define TASK_INIT_FLAGS(task, priority, func, context, flags) do { \ + MPASS((priority) >= 0 && (priority) <= 255); \ + (task)->ta_pending = 0; \ + (task)->ta_priority = (priority); \ + (task)->ta_flags = (flags); \ + (task)->ta_func = (func); \ + (task)->ta_context = (context); \ } while (0) +#define TASK_INIT(t, p, f, c) TASK_INIT_FLAGS(t, p, f, c, 0) + void _timeout_task_init(struct taskqueue *queue, struct timeout_task *timeout_task, int priority, task_fn_t func, void *context); -#define TIMEOUT_TASK_INIT(queue, timeout_task, priority, func, context) \ - _timeout_task_init(queue, timeout_task, priority, func, context); +#define TIMEOUT_TASK_INIT(queue, timeout_task, priority, func, context) do { \ + _Static_assert((priority) >= 0 && (priority) <= 255, \ + "struct task priority is 8 bit in size"); \ + _timeout_task_init(queue, timeout_task, priority, func, context); \ +} while (0) /* * Declare a reference to a taskqueue. From 6c3e93cb5a4aa4b8a2d8d4d326f2a7c34d3a4458 Mon Sep 17 00:00:00 2001 From: Gleb Smirnoff Date: Tue, 11 Feb 2020 18:57:07 +0000 Subject: [PATCH 075/144] Use NET_TASK_INIT() and NET_GROUPTASK_INIT() for drivers that process incoming packets in taskqueue context. Reviewed by: hselasky Differential Revision: https://reviews.freebsd.org/D23518 --- sys/dev/al_eth/al_eth.c | 2 +- sys/dev/alc/if_alc.c | 2 +- sys/dev/ale/if_ale.c | 2 +- sys/dev/ath/if_ath.c | 2 +- sys/dev/ath/if_ath_rx.c | 3 --- sys/dev/bge/if_bge.c | 5 +---- sys/dev/bwn/if_bwn.c | 2 +- sys/dev/bxe/bxe.c | 2 +- sys/dev/cas/if_cas.c | 5 ++++- sys/dev/ena/ena.c | 2 +- sys/dev/malo/if_malo.c | 2 +- sys/dev/mwl/if_mwl.c | 2 +- sys/dev/netmap/if_ptnet.c | 7 ++++--- sys/dev/nfe/if_nfe.c | 2 +- sys/dev/qlxgbe/ql_os.c | 2 +- sys/dev/re/if_re.c | 8 ++------ sys/dev/rt/if_rt.c | 2 +- sys/dev/smc/if_smc.c | 2 +- sys/dev/virtio/network/if_vtnet.c | 2 +- sys/dev/vnic/nicvf_queues.c | 4 ++-- sys/dev/vr/if_vr.c | 2 +- sys/dev/wtap/if_wtap.c | 2 +- sys/dev/xl/if_xl.c | 2 +- sys/net/iflib.c | 7 ++----- 24 files changed, 32 insertions(+), 41 deletions(-) diff --git a/sys/dev/al_eth/al_eth.c b/sys/dev/al_eth/al_eth.c index f3b7ad370df..b2bd94bb504 100644 --- a/sys/dev/al_eth/al_eth.c +++ b/sys/dev/al_eth/al_eth.c @@ -2512,7 +2512,7 @@ al_eth_setup_rx_resources(struct al_eth_adapter *adapter, unsigned int qid) return (ENOMEM); /* Allocate taskqueues */ - TASK_INIT(&rx_ring->enqueue_task, 0, al_eth_rx_recv_work, rx_ring); + NET_TASK_INIT(&rx_ring->enqueue_task, 0, al_eth_rx_recv_work, rx_ring); rx_ring->enqueue_tq = taskqueue_create_fast("al_rx_enque", M_NOWAIT, taskqueue_thread_enqueue, &rx_ring->enqueue_tq); taskqueue_start_threads(&rx_ring->enqueue_tq, 1, PI_NET, "%s rxeq", diff --git a/sys/dev/alc/if_alc.c b/sys/dev/alc/if_alc.c index 172b8fab4d4..531c9f18fc8 100644 --- a/sys/dev/alc/if_alc.c +++ b/sys/dev/alc/if_alc.c @@ -1387,7 +1387,7 @@ alc_attach(device_t dev) mtx_init(&sc->alc_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK, MTX_DEF); callout_init_mtx(&sc->alc_tick_ch, &sc->alc_mtx, 0); - TASK_INIT(&sc->alc_int_task, 0, alc_int_task, sc); + NET_TASK_INIT(&sc->alc_int_task, 0, alc_int_task, sc); sc->alc_ident = alc_find_ident(dev); /* Map the device. */ diff --git a/sys/dev/ale/if_ale.c b/sys/dev/ale/if_ale.c index 27aa9321357..4a8afd887de 100644 --- a/sys/dev/ale/if_ale.c +++ b/sys/dev/ale/if_ale.c @@ -467,7 +467,7 @@ ale_attach(device_t dev) mtx_init(&sc->ale_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK, MTX_DEF); callout_init_mtx(&sc->ale_tick_ch, &sc->ale_mtx, 0); - TASK_INIT(&sc->ale_int_task, 0, ale_int_task, sc); + NET_TASK_INIT(&sc->ale_int_task, 0, ale_int_task, sc); /* Map the device. */ pci_enable_busmaster(dev); diff --git a/sys/dev/ath/if_ath.c b/sys/dev/ath/if_ath.c index fa3081cff29..0745d00ce3a 100644 --- a/sys/dev/ath/if_ath.c +++ b/sys/dev/ath/if_ath.c @@ -760,7 +760,7 @@ ath_attach(u_int16_t devid, struct ath_softc *sc) taskqueue_start_threads(&sc->sc_tq, 1, PI_NET, "%s taskq", device_get_nameunit(sc->sc_dev)); - TASK_INIT(&sc->sc_rxtask, 0, sc->sc_rx.recv_tasklet, sc); + NET_TASK_INIT(&sc->sc_rxtask, 0, sc->sc_rx.recv_tasklet, sc); TASK_INIT(&sc->sc_bmisstask, 0, ath_bmiss_proc, sc); TASK_INIT(&sc->sc_bstucktask,0, ath_bstuck_proc, sc); TASK_INIT(&sc->sc_resettask,0, ath_reset_proc, sc); diff --git a/sys/dev/ath/if_ath_rx.c b/sys/dev/ath/if_ath_rx.c index 13a42c5038d..93a1d745519 100644 --- a/sys/dev/ath/if_ath_rx.c +++ b/sys/dev/ath/if_ath_rx.c @@ -647,7 +647,6 @@ ath_rx_pkt(struct ath_softc *sc, struct ath_rx_status *rs, HAL_STATUS status, uint64_t tsf, int nf, HAL_RX_QUEUE qtype, struct ath_buf *bf, struct mbuf *m) { - struct epoch_tracker et; uint64_t rstamp; /* XXX TODO: make this an mbuf tag? */ struct ieee80211_rx_stats rxs; @@ -942,7 +941,6 @@ rx_accept: rxs.c_nf_ext[i] = nf; } - NET_EPOCH_ENTER(et); if (ni != NULL) { /* * Only punt packets for ampdu reorder processing for @@ -988,7 +986,6 @@ rx_accept: type = ieee80211_input_mimo_all(ic, m); m = NULL; } - NET_EPOCH_EXIT(et); /* * At this point we have passed the frame up the stack; thus diff --git a/sys/dev/bge/if_bge.c b/sys/dev/bge/if_bge.c index b91ee5de964..551c18f8bf4 100644 --- a/sys/dev/bge/if_bge.c +++ b/sys/dev/bge/if_bge.c @@ -3306,7 +3306,7 @@ bge_attach(device_t dev) sc->bge_dev = dev; BGE_LOCK_INIT(sc, device_get_nameunit(dev)); - TASK_INIT(&sc->bge_intr_task, 0, bge_intr_task, sc); + NET_TASK_INIT(&sc->bge_intr_task, 0, bge_intr_task, sc); callout_init_mtx(&sc->bge_stat_ch, &sc->bge_mtx, 0); pci_enable_busmaster(dev); @@ -4601,7 +4601,6 @@ bge_msi_intr(void *arg) static void bge_intr_task(void *arg, int pending) { - struct epoch_tracker et; struct bge_softc *sc; if_t ifp; uint32_t status, status_tag; @@ -4644,9 +4643,7 @@ bge_intr_task(void *arg, int pending) sc->bge_rx_saved_considx != rx_prod) { /* Check RX return ring producer/consumer. */ BGE_UNLOCK(sc); - NET_EPOCH_ENTER(et); bge_rxeof(sc, rx_prod, 0); - NET_EPOCH_EXIT(et); BGE_LOCK(sc); } if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) { diff --git a/sys/dev/bwn/if_bwn.c b/sys/dev/bwn/if_bwn.c index 8f22de45389..6fefaf4ccd8 100644 --- a/sys/dev/bwn/if_bwn.c +++ b/sys/dev/bwn/if_bwn.c @@ -621,7 +621,7 @@ bwn_attach(device_t dev) mac->mac_flags |= BWN_MAC_FLAG_BADFRAME_PREEMP; TASK_INIT(&mac->mac_hwreset, 0, bwn_hwreset, mac); - TASK_INIT(&mac->mac_intrtask, 0, bwn_intrtask, mac); + NET_TASK_INIT(&mac->mac_intrtask, 0, bwn_intrtask, mac); TASK_INIT(&mac->mac_txpower, 0, bwn_txpwr, mac); error = bwn_attach_core(mac); diff --git a/sys/dev/bxe/bxe.c b/sys/dev/bxe/bxe.c index a1231ac40bd..7dc0154ecda 100644 --- a/sys/dev/bxe/bxe.c +++ b/sys/dev/bxe/bxe.c @@ -9241,7 +9241,7 @@ bxe_interrupt_attach(struct bxe_softc *sc) fp = &sc->fp[i]; snprintf(fp->tq_name, sizeof(fp->tq_name), "bxe%d_fp%d_tq", sc->unit, i); - TASK_INIT(&fp->tq_task, 0, bxe_handle_fp_tq, fp); + NET_TASK_INIT(&fp->tq_task, 0, bxe_handle_fp_tq, fp); TASK_INIT(&fp->tx_task, 0, bxe_tx_mq_start_deferred, fp); fp->tq = taskqueue_create(fp->tq_name, M_NOWAIT, taskqueue_thread_enqueue, diff --git a/sys/dev/cas/if_cas.c b/sys/dev/cas/if_cas.c index 1a20596f292..653448eea40 100644 --- a/sys/dev/cas/if_cas.c +++ b/sys/dev/cas/if_cas.c @@ -208,7 +208,7 @@ cas_attach(struct cas_softc *sc) callout_init_mtx(&sc->sc_tick_ch, &sc->sc_mtx, 0); callout_init_mtx(&sc->sc_rx_ch, &sc->sc_mtx, 0); /* Create local taskq. */ - TASK_INIT(&sc->sc_intr_task, 0, cas_intr_task, sc); + NET_TASK_INIT(&sc->sc_intr_task, 0, cas_intr_task, sc); TASK_INIT(&sc->sc_tx_task, 1, cas_tx_task, ifp); sc->sc_tq = taskqueue_create_fast("cas_taskq", M_WAITOK, taskqueue_thread_enqueue, &sc->sc_tq); @@ -1608,11 +1608,14 @@ cas_tint(struct cas_softc *sc) static void cas_rint_timeout(void *arg) { + struct epoch_tracker et; struct cas_softc *sc = arg; CAS_LOCK_ASSERT(sc, MA_OWNED); + NET_EPOCH_ENTER(et); cas_rint(sc); + NET_EPOCH_EXIT(et); } static void diff --git a/sys/dev/ena/ena.c b/sys/dev/ena/ena.c index a5687d0213f..f4a7236339c 100644 --- a/sys/dev/ena/ena.c +++ b/sys/dev/ena/ena.c @@ -1353,7 +1353,7 @@ ena_create_io_queues(struct ena_adapter *adapter) for (i = 0; i < adapter->num_queues; i++) { queue = &adapter->que[i]; - TASK_INIT(&queue->cleanup_task, 0, ena_cleanup, queue); + NET_TASK_INIT(&queue->cleanup_task, 0, ena_cleanup, queue); queue->cleanup_tq = taskqueue_create_fast("ena cleanup", M_WAITOK, taskqueue_thread_enqueue, &queue->cleanup_tq); diff --git a/sys/dev/malo/if_malo.c b/sys/dev/malo/if_malo.c index ae21af8b453..a7823dd6003 100644 --- a/sys/dev/malo/if_malo.c +++ b/sys/dev/malo/if_malo.c @@ -253,7 +253,7 @@ malo_attach(uint16_t devid, struct malo_softc *sc) taskqueue_start_threads(&sc->malo_tq, 1, PI_NET, "%s taskq", device_get_nameunit(sc->malo_dev)); - TASK_INIT(&sc->malo_rxtask, 0, malo_rx_proc, sc); + NET_TASK_INIT(&sc->malo_rxtask, 0, malo_rx_proc, sc); TASK_INIT(&sc->malo_txtask, 0, malo_tx_proc, sc); ic->ic_softc = sc; diff --git a/sys/dev/mwl/if_mwl.c b/sys/dev/mwl/if_mwl.c index 6e8e560ba66..9918366f2c7 100644 --- a/sys/dev/mwl/if_mwl.c +++ b/sys/dev/mwl/if_mwl.c @@ -360,7 +360,7 @@ mwl_attach(uint16_t devid, struct mwl_softc *sc) taskqueue_start_threads(&sc->sc_tq, 1, PI_NET, "%s taskq", device_get_nameunit(sc->sc_dev)); - TASK_INIT(&sc->sc_rxtask, 0, mwl_rx_proc, sc); + NET_TASK_INIT(&sc->sc_rxtask, 0, mwl_rx_proc, sc); TASK_INIT(&sc->sc_radartask, 0, mwl_radar_proc, sc); TASK_INIT(&sc->sc_chanswitchtask, 0, mwl_chanswitch_proc, sc); TASK_INIT(&sc->sc_bawatchdogtask, 0, mwl_bawatchdog_proc, sc); diff --git a/sys/dev/netmap/if_ptnet.c b/sys/dev/netmap/if_ptnet.c index 38149ac2650..99d21c38f8a 100644 --- a/sys/dev/netmap/if_ptnet.c +++ b/sys/dev/netmap/if_ptnet.c @@ -695,11 +695,12 @@ ptnet_irqs_init(struct ptnet_softc *sc) cpu_cur = CPU_FIRST(); for (i = 0; i < nvecs; i++) { struct ptnet_queue *pq = sc->queues + i; - static void (*handler)(void *context, int pending); - handler = (i < sc->num_tx_rings) ? ptnet_tx_task : ptnet_rx_task; + if (i < sc->num_tx_rings) + TASK_INIT(&pq->task, 0, ptnet_tx_task, pq); + else + NET_TASK_INIT(&pq->task, 0, ptnet_rx_task, pq); - TASK_INIT(&pq->task, 0, handler, pq); pq->taskq = taskqueue_create_fast("ptnet_queue", M_NOWAIT, taskqueue_thread_enqueue, &pq->taskq); taskqueue_start_threads(&pq->taskq, 1, PI_NET, "%s-pq-%d", diff --git a/sys/dev/nfe/if_nfe.c b/sys/dev/nfe/if_nfe.c index 940bad64503..246e257e3b2 100644 --- a/sys/dev/nfe/if_nfe.c +++ b/sys/dev/nfe/if_nfe.c @@ -654,7 +654,7 @@ nfe_attach(device_t dev) } ether_ifattach(ifp, sc->eaddr); - TASK_INIT(&sc->nfe_int_task, 0, nfe_int_task, sc); + NET_TASK_INIT(&sc->nfe_int_task, 0, nfe_int_task, sc); sc->nfe_tq = taskqueue_create_fast("nfe_taskq", M_WAITOK, taskqueue_thread_enqueue, &sc->nfe_tq); taskqueue_start_threads(&sc->nfe_tq, 1, PI_NET, "%s taskq", diff --git a/sys/dev/qlxgbe/ql_os.c b/sys/dev/qlxgbe/ql_os.c index 137936dc62e..ad6bab9f5ce 100644 --- a/sys/dev/qlxgbe/ql_os.c +++ b/sys/dev/qlxgbe/ql_os.c @@ -1543,7 +1543,7 @@ qla_create_fp_taskqueues(qla_host_t *ha) bzero(tq_name, sizeof (tq_name)); snprintf(tq_name, sizeof (tq_name), "ql_fp_tq_%d", i); - TASK_INIT(&fp->fp_task, 0, qla_fp_taskqueue, fp); + NET_TASK_INIT(&fp->fp_task, 0, qla_fp_taskqueue, fp); fp->fp_taskqueue = taskqueue_create_fast(tq_name, M_NOWAIT, taskqueue_thread_enqueue, diff --git a/sys/dev/re/if_re.c b/sys/dev/re/if_re.c index 76fa06f6358..66fe980dfc1 100644 --- a/sys/dev/re/if_re.c +++ b/sys/dev/re/if_re.c @@ -1656,7 +1656,7 @@ re_attach(device_t dev) ifp->if_snd.ifq_drv_maxlen = RL_IFQ_MAXLEN; IFQ_SET_READY(&ifp->if_snd); - TASK_INIT(&sc->rl_inttask, 0, re_int_task, sc); + NET_TASK_INIT(&sc->rl_inttask, 0, re_int_task, sc); #define RE_PHYAD_INTERNAL 0 @@ -2576,7 +2576,6 @@ re_intr(void *arg) static void re_int_task(void *arg, int npending) { - struct epoch_tracker et; struct rl_softc *sc; struct ifnet *ifp; u_int16_t status; @@ -2603,11 +2602,8 @@ re_int_task(void *arg, int npending) } #endif - if (status & (RL_ISR_RX_OK|RL_ISR_RX_ERR|RL_ISR_FIFO_OFLOW)) { - NET_EPOCH_ENTER(et); + if (status & (RL_ISR_RX_OK|RL_ISR_RX_ERR|RL_ISR_FIFO_OFLOW)) rval = re_rxeof(sc, NULL); - NET_EPOCH_EXIT(et); - } /* * Some chips will ignore a second TX request issued diff --git a/sys/dev/rt/if_rt.c b/sys/dev/rt/if_rt.c index e3305997ea8..cd47d051f36 100644 --- a/sys/dev/rt/if_rt.c +++ b/sys/dev/rt/if_rt.c @@ -552,7 +552,7 @@ rt_attach(device_t dev) ifp->if_capenable |= IFCAP_RXCSUM|IFCAP_TXCSUM; /* init task queue */ - TASK_INIT(&sc->rx_done_task, 0, rt_rx_done_task, sc); + NET_TASK_INIT(&sc->rx_done_task, 0, rt_rx_done_task, sc); TASK_INIT(&sc->tx_done_task, 0, rt_tx_done_task, sc); TASK_INIT(&sc->periodic_task, 0, rt_periodic_task, sc); diff --git a/sys/dev/smc/if_smc.c b/sys/dev/smc/if_smc.c index 6b69deb74d9..d3f911d8327 100644 --- a/sys/dev/smc/if_smc.c +++ b/sys/dev/smc/if_smc.c @@ -395,7 +395,7 @@ smc_attach(device_t dev) /* Set up taskqueue */ TASK_INIT(&sc->smc_intr, SMC_INTR_PRIORITY, smc_task_intr, ifp); - TASK_INIT(&sc->smc_rx, SMC_RX_PRIORITY, smc_task_rx, ifp); + NET_TASK_INIT(&sc->smc_rx, SMC_RX_PRIORITY, smc_task_rx, ifp); TASK_INIT(&sc->smc_tx, SMC_TX_PRIORITY, smc_task_tx, ifp); sc->smc_tq = taskqueue_create_fast("smc_taskq", M_NOWAIT, taskqueue_thread_enqueue, &sc->smc_tq); diff --git a/sys/dev/virtio/network/if_vtnet.c b/sys/dev/virtio/network/if_vtnet.c index 697e8de8fe3..ceb3ffaaf2b 100644 --- a/sys/dev/virtio/network/if_vtnet.c +++ b/sys/dev/virtio/network/if_vtnet.c @@ -717,7 +717,7 @@ vtnet_init_rxq(struct vtnet_softc *sc, int id) if (rxq->vtnrx_sg == NULL) return (ENOMEM); - TASK_INIT(&rxq->vtnrx_intrtask, 0, vtnet_rxq_tq_intr, rxq); + NET_TASK_INIT(&rxq->vtnrx_intrtask, 0, vtnet_rxq_tq_intr, rxq); rxq->vtnrx_tq = taskqueue_create(rxq->vtnrx_name, M_NOWAIT, taskqueue_thread_enqueue, &rxq->vtnrx_tq); diff --git a/sys/dev/vnic/nicvf_queues.c b/sys/dev/vnic/nicvf_queues.c index d469067c1cf..ebef89e31ab 100644 --- a/sys/dev/vnic/nicvf_queues.c +++ b/sys/dev/vnic/nicvf_queues.c @@ -931,7 +931,7 @@ nicvf_init_cmp_queue(struct nicvf *nic, struct cmp_queue *cq, int q_len, &cq->mtx); /* Allocate taskqueue */ - TASK_INIT(&cq->cmp_task, 0, nicvf_cmp_task, cq); + NET_TASK_INIT(&cq->cmp_task, 0, nicvf_cmp_task, cq); cq->cmp_taskq = taskqueue_create_fast("nicvf_cmp_taskq", M_WAITOK, taskqueue_thread_enqueue, &cq->cmp_taskq); taskqueue_start_threads(&cq->cmp_taskq, 1, PI_NET, "%s: cmp_taskq(%d)", @@ -1577,7 +1577,7 @@ nicvf_alloc_resources(struct nicvf *nic) } /* Allocate QS error taskqueue */ - TASK_INIT(&qs->qs_err_task, 0, nicvf_qs_err_task, nic); + NET_TASK_INIT(&qs->qs_err_task, 0, nicvf_qs_err_task, nic); qs->qs_err_taskq = taskqueue_create_fast("nicvf_qs_err_taskq", M_WAITOK, taskqueue_thread_enqueue, &qs->qs_err_taskq); taskqueue_start_threads(&qs->qs_err_taskq, 1, PI_NET, "%s: qs_taskq", diff --git a/sys/dev/vr/if_vr.c b/sys/dev/vr/if_vr.c index 7cbc36b4480..cf942c5cd19 100644 --- a/sys/dev/vr/if_vr.c +++ b/sys/dev/vr/if_vr.c @@ -676,7 +676,7 @@ vr_attach(device_t dev) ifp->if_snd.ifq_maxlen = VR_TX_RING_CNT - 1; IFQ_SET_READY(&ifp->if_snd); - TASK_INIT(&sc->vr_inttask, 0, vr_int_task, sc); + NET_TASK_INIT(&sc->vr_inttask, 0, vr_int_task, sc); /* Configure Tx FIFO threshold. */ sc->vr_txthresh = VR_TXTHRESH_MIN; diff --git a/sys/dev/wtap/if_wtap.c b/sys/dev/wtap/if_wtap.c index 3244c67213d..e7a2986d054 100644 --- a/sys/dev/wtap/if_wtap.c +++ b/sys/dev/wtap/if_wtap.c @@ -637,7 +637,7 @@ wtap_attach(struct wtap_softc *sc, const uint8_t *macaddr) sc->sc_tq = taskqueue_create("wtap_taskq", M_NOWAIT | M_ZERO, taskqueue_thread_enqueue, &sc->sc_tq); taskqueue_start_threads(&sc->sc_tq, 1, PI_SOFT, "%s taskQ", sc->name); - TASK_INIT(&sc->sc_rxtask, 0, wtap_rx_proc, sc); + NET_TASK_INIT(&sc->sc_rxtask, 0, wtap_rx_proc, sc); ic->ic_softc = sc; ic->ic_name = sc->name; diff --git a/sys/dev/xl/if_xl.c b/sys/dev/xl/if_xl.c index 9daea3dc4fa..ca618475881 100644 --- a/sys/dev/xl/if_xl.c +++ b/sys/dev/xl/if_xl.c @@ -1218,7 +1218,7 @@ xl_attach(device_t dev) } callout_init_mtx(&sc->xl_tick_callout, &sc->xl_mtx, 0); - TASK_INIT(&sc->xl_task, 0, xl_rxeof_task, sc); + NET_TASK_INIT(&sc->xl_task, 0, xl_rxeof_task, sc); /* * Now allocate a tag for the DMA descriptor lists and a chunk diff --git a/sys/net/iflib.c b/sys/net/iflib.c index 26c5b097404..a9fc8090c48 100644 --- a/sys/net/iflib.c +++ b/sys/net/iflib.c @@ -3781,7 +3781,6 @@ _task_fn_tx(void *context) static void _task_fn_rx(void *context) { - struct epoch_tracker et; iflib_rxq_t rxq = context; if_ctx_t ctx = rxq->ifr_ctx; bool more; @@ -3805,7 +3804,6 @@ _task_fn_rx(void *context) budget = ctx->ifc_sysctl_rx_budget; if (budget == 0) budget = 16; /* XXX */ - NET_EPOCH_ENTER(et); if (more == false || (more = iflib_rxeof(rxq, budget)) == false) { if (ctx->ifc_flags & IFC_LEGACY) IFDI_INTR_ENABLE(ctx); @@ -3813,7 +3811,6 @@ _task_fn_rx(void *context) IFDI_RX_QUEUE_INTR_ENABLE(ctx, rxq->ifr_id); DBG_COUNTER_INC(rx_intr_enables); } - NET_EPOCH_EXIT(et); if (__predict_false(!(if_getdrvflags(ctx->ifc_ifp) & IFF_DRV_RUNNING))) return; if (more) @@ -5971,7 +5968,7 @@ iflib_irq_alloc_generic(if_ctx_t ctx, if_irq_t irq, int rid, tqg = qgroup_if_io_tqg; fn = _task_fn_rx; intr_fast = iflib_fast_intr; - GROUPTASK_INIT(gtask, 0, fn, q); + NET_GROUPTASK_INIT(gtask, 0, fn, q); break; case IFLIB_INTR_RXTX: q = &ctx->ifc_rxqs[qid]; @@ -5980,7 +5977,7 @@ iflib_irq_alloc_generic(if_ctx_t ctx, if_irq_t irq, int rid, tqg = qgroup_if_io_tqg; fn = _task_fn_rx; intr_fast = iflib_fast_intr_rxtx; - GROUPTASK_INIT(gtask, 0, fn, q); + NET_GROUPTASK_INIT(gtask, 0, fn, q); break; case IFLIB_INTR_ADMIN: q = ctx; From 301a87ac4c841f51f16ade21c4b843ce2982cb9a Mon Sep 17 00:00:00 2001 From: Gleb Smirnoff Date: Tue, 11 Feb 2020 19:13:34 +0000 Subject: [PATCH 076/144] Mark lio taskqueue as requiring network epoch. --- sys/dev/liquidio/base/lio_droq.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/dev/liquidio/base/lio_droq.c b/sys/dev/liquidio/base/lio_droq.c index d8a58e52faf..6124768a582 100644 --- a/sys/dev/liquidio/base/lio_droq.c +++ b/sys/dev/liquidio/base/lio_droq.c @@ -329,7 +329,7 @@ lio_init_droq(struct octeon_device *oct, uint32_t q_no, * output queue packet processing. */ lio_dev_dbg(oct, "Initializing droq%d taskqueue\n", q_no); - TASK_INIT(&droq->droq_task, 0, lio_droq_bh, (void *)droq); + NET_TASK_INIT(&droq->droq_task, 0, lio_droq_bh, (void *)droq); droq->droq_taskqueue = taskqueue_create_fast("lio_droq_task", M_NOWAIT, taskqueue_thread_enqueue, From d65c432aa693043a241e9061d040c4d2b3e86d96 Mon Sep 17 00:00:00 2001 From: Alexander Leidinger Date: Tue, 11 Feb 2020 19:39:59 +0000 Subject: [PATCH 077/144] Fix duplicate target warning. --- tools/kerneldoc/subsys/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/kerneldoc/subsys/Makefile b/tools/kerneldoc/subsys/Makefile index 596654fa7fc..b8397f810a0 100644 --- a/tools/kerneldoc/subsys/Makefile +++ b/tools/kerneldoc/subsys/Makefile @@ -10,7 +10,7 @@ TARGET_ARCH?= ${MACHINE_ARCH} S?=/usr/src/sys LOCALBASE?=/usr/local -MFILES!= find ${S} -name \*.m | sed -e 's:${S}/::g' +MFILES!= find ${S} -name \*.m | egrep '/(dev|libkern|kgssapi|opencrypto|isa|geom|kern|xen|net|${TARGET_ARCH})/' | sed -e 's:${S}/::g' HFILES= ${MFILES:T:S/.m$/.h/} AWK?= awk From 8803350d6d4421d49462eeaf6a34cf986718ee9e Mon Sep 17 00:00:00 2001 From: Michael Tuexen Date: Tue, 11 Feb 2020 20:02:20 +0000 Subject: [PATCH 078/144] Revert https://svnweb.freebsd.org/changeset/base/357761 This was suggested by cem@ --- sys/netinet/sctp_pcb.c | 4 ++-- sys/netinet/sctputil.c | 4 ++-- sys/netinet/sctputil.h | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sys/netinet/sctp_pcb.c b/sys/netinet/sctp_pcb.c index 44e09678440..add79e8e9dc 100644 --- a/sys/netinet/sctp_pcb.c +++ b/sys/netinet/sctp_pcb.c @@ -4767,7 +4767,7 @@ sctp_free_assoc(struct sctp_inpcb *inp, struct sctp_tcb *stcb, int from_inpcbfre } } /* Now clean up any other timers */ - sctp_stop_association_timers(stcb, 0); + sctp_stop_association_timers(stcb, false); /* Now the read queue needs to be cleaned up (only once) */ if ((stcb->asoc.state & SCTP_STATE_ABOUT_TO_BE_FREED) == 0) { SCTP_ADD_SUBSTATE(stcb, SCTP_STATE_ABOUT_TO_BE_FREED); @@ -4935,7 +4935,7 @@ sctp_free_assoc(struct sctp_inpcb *inp, struct sctp_tcb *stcb, int from_inpcbfre /* * Now restop the timers to be sure this is paranoia at is finest! */ - sctp_stop_association_timers(stcb, 1); + sctp_stop_association_timers(stcb, true); /* * The chunk lists and such SHOULD be empty but we check them just diff --git a/sys/netinet/sctputil.c b/sys/netinet/sctputil.c index 74360cfe1a3..f18db7460b0 100644 --- a/sys/netinet/sctputil.c +++ b/sys/netinet/sctputil.c @@ -802,7 +802,7 @@ sctp_stop_timers_for_shutdown(struct sctp_tcb *stcb) } void -sctp_stop_association_timers(struct sctp_tcb *stcb, int stop_assoc_kill_timer) +sctp_stop_association_timers(struct sctp_tcb *stcb, bool stop_assoc_kill_timer) { struct sctp_inpcb *inp; struct sctp_nets *net; @@ -812,7 +812,7 @@ sctp_stop_association_timers(struct sctp_tcb *stcb, int stop_assoc_kill_timer) SCTP_FROM_SCTPUTIL + SCTP_LOC_18); sctp_timer_stop(SCTP_TIMER_TYPE_STRRESET, inp, stcb, NULL, SCTP_FROM_SCTPUTIL + SCTP_LOC_19); - if (stop_assoc_kill_timer != 0) { + if (stop_assoc_kill_timer) { sctp_timer_stop(SCTP_TIMER_TYPE_ASOCKILL, inp, stcb, NULL, SCTP_FROM_SCTPUTIL + SCTP_LOC_20); } diff --git a/sys/netinet/sctputil.h b/sys/netinet/sctputil.h index fa945935693..031ad615a0f 100644 --- a/sys/netinet/sctputil.h +++ b/sys/netinet/sctputil.h @@ -165,7 +165,7 @@ sctp_pull_off_control_to_new_inp(struct sctp_inpcb *old_inp, void sctp_stop_timers_for_shutdown(struct sctp_tcb *); /* Stop all timers for association and remote addresses. */ -void sctp_stop_association_timers(struct sctp_tcb *, int); +void sctp_stop_association_timers(struct sctp_tcb *, bool); void sctp_report_all_outbound(struct sctp_tcb *, uint16_t, int, int From 4ab3aee8fbcea0d0407d78619f319cc6d5d64fab Mon Sep 17 00:00:00 2001 From: Mark Johnston Date: Tue, 11 Feb 2020 20:06:33 +0000 Subject: [PATCH 079/144] Reduce lock hold time in keg_drain(). Maintain a count of free slabs in the per-domain keg structure and use that to clear the free slab list in constant time for most cases. This helps minimize lock contention induced by reclamation, in preparation for proactive trimming of excesses of free memory. Reviewed by: jeff, rlibby Tested by: pho Differential Revision: https://reviews.freebsd.org/D23532 --- sys/vm/uma_core.c | 79 +++++++++++++++++++++++++---------------------- sys/vm/uma_int.h | 3 +- 2 files changed, 44 insertions(+), 38 deletions(-) diff --git a/sys/vm/uma_core.c b/sys/vm/uma_core.c index bd1aaa5ca75..f4632036ca4 100644 --- a/sys/vm/uma_core.c +++ b/sys/vm/uma_core.c @@ -1258,39 +1258,34 @@ keg_free_slab(uma_keg_t keg, uma_slab_t slab, int start) static void keg_drain(uma_keg_t keg) { - struct slabhead freeslabs = { 0 }; + struct slabhead freeslabs; uma_domain_t dom; uma_slab_t slab, tmp; int i, n; - /* - * We don't want to take pages from statically allocated kegs at this - * time - */ if (keg->uk_flags & UMA_ZONE_NOFREE || keg->uk_freef == NULL) return; for (i = 0; i < vm_ndomains; i++) { CTR4(KTR_UMA, "keg_drain %s(%p) domain %d free items: %u", - keg->uk_name, keg, i, dom->ud_free); - n = 0; + keg->uk_name, keg, i, dom->ud_free_items); dom = &keg->uk_domain[i]; - KEG_LOCK(keg, i); - LIST_FOREACH_SAFE(slab, &dom->ud_free_slab, us_link, tmp) { - if (keg->uk_flags & UMA_ZFLAG_HASH) - UMA_HASH_REMOVE(&keg->uk_hash, slab); - n++; - LIST_REMOVE(slab, us_link); - LIST_INSERT_HEAD(&freeslabs, slab, us_link); - } - dom->ud_pages -= n * keg->uk_ppera; - dom->ud_free -= n * keg->uk_ipers; - KEG_UNLOCK(keg, i); - } + LIST_INIT(&freeslabs); - while ((slab = LIST_FIRST(&freeslabs)) != NULL) { - LIST_REMOVE(slab, us_link); - keg_free_slab(keg, slab, keg->uk_ipers); + KEG_LOCK(keg, i); + if ((keg->uk_flags & UMA_ZFLAG_HASH) != 0) { + LIST_FOREACH(slab, &dom->ud_free_slab, us_link) + UMA_HASH_REMOVE(&keg->uk_hash, slab); + } + n = dom->ud_free_slabs; + LIST_SWAP(&freeslabs, &dom->ud_free_slab, uma_slab, us_link); + dom->ud_free_slabs = 0; + dom->ud_free_items -= n * keg->uk_ipers; + dom->ud_pages -= n * keg->uk_ppera; + KEG_UNLOCK(keg, i); + + LIST_FOREACH_SAFE(slab, &freeslabs, us_link, tmp) + keg_free_slab(keg, slab, keg->uk_ipers); } } @@ -1458,7 +1453,7 @@ keg_alloc_slab(uma_keg_t keg, uma_zone_t zone, int domain, int flags, dom = &keg->uk_domain[domain]; LIST_INSERT_HEAD(&dom->ud_part_slab, slab, us_link); dom->ud_pages += keg->uk_ppera; - dom->ud_free += keg->uk_ipers; + dom->ud_free_items += keg->uk_ipers; return (slab); @@ -2286,7 +2281,7 @@ zone_alloc_sysctl(uma_zone_t zone, void *unused) "pages", CTLFLAG_RD, &dom->ud_pages, 0, "Total pages currently allocated from VM"); SYSCTL_ADD_U32(NULL, SYSCTL_CHILDREN(oid), OID_AUTO, - "free", CTLFLAG_RD, &dom->ud_free, 0, + "free_items", CTLFLAG_RD, &dom->ud_free_items, 0, "items free in the slab layer"); } } else @@ -2572,7 +2567,7 @@ keg_dtor(void *arg, int size, void *udata) keg = (uma_keg_t)arg; free = pages = 0; for (i = 0; i < vm_ndomains; i++) { - free += keg->uk_domain[i].ud_free; + free += keg->uk_domain[i].ud_free_items; pages += keg->uk_domain[i].ud_pages; KEG_LOCK_FINI(keg, i); } @@ -3386,11 +3381,11 @@ keg_first_slab(uma_keg_t keg, int domain, bool rr) start = domain; do { dom = &keg->uk_domain[domain]; - if (!LIST_EMPTY(&dom->ud_part_slab)) - return (LIST_FIRST(&dom->ud_part_slab)); - if (!LIST_EMPTY(&dom->ud_free_slab)) { - slab = LIST_FIRST(&dom->ud_free_slab); + if ((slab = LIST_FIRST(&dom->ud_part_slab)) != NULL) + return (slab); + if ((slab = LIST_FIRST(&dom->ud_free_slab)) != NULL) { LIST_REMOVE(slab, us_link); + dom->ud_free_slabs--; LIST_INSERT_HEAD(&dom->ud_part_slab, slab, us_link); return (slab); } @@ -3417,7 +3412,7 @@ keg_fetch_free_slab(uma_keg_t keg, int domain, bool rr, int flags) KEG_LOCK(keg, domain); reserve = (flags & M_USE_RESERVE) != 0 ? 0 : keg->uk_reserve; - if (keg->uk_domain[domain].ud_free <= reserve || + if (keg->uk_domain[domain].ud_free_items <= reserve || (slab = keg_first_slab(keg, domain, rr)) == NULL) { KEG_UNLOCK(keg, domain); return (NULL); @@ -3502,9 +3497,13 @@ slab_alloc_item(uma_keg_t keg, uma_slab_t slab) BIT_CLR(keg->uk_ipers, freei, &slab->us_free); item = slab_item(slab, keg, freei); slab->us_freecount--; - dom->ud_free--; + dom->ud_free_items--; - /* Move this slab to the full list */ + /* + * Move this slab to the full list. It must be on the partial list, so + * we do not need to update the free slab count. In particular, + * keg_fetch_slab() always returns slabs on the partial list. + */ if (slab->us_freecount == 0) { LIST_REMOVE(slab, us_link); LIST_INSERT_HEAD(&dom->ud_full_slab, slab, us_link); @@ -3538,7 +3537,7 @@ zone_import(void *arg, void **bucket, int max, int domain, int flags) dom = &keg->uk_domain[slab->us_domain]; while (slab->us_freecount && i < max) { bucket[i++] = slab_alloc_item(keg, slab); - if (dom->ud_free <= keg->uk_reserve) + if (dom->ud_free_items <= keg->uk_reserve) break; #ifdef NUMA /* @@ -4240,9 +4239,10 @@ slab_free_item(uma_zone_t zone, uma_slab_t slab, void *item) /* Do we need to remove from any lists? */ dom = &keg->uk_domain[slab->us_domain]; - if (slab->us_freecount+1 == keg->uk_ipers) { + if (slab->us_freecount + 1 == keg->uk_ipers) { LIST_REMOVE(slab, us_link); LIST_INSERT_HEAD(&dom->ud_free_slab, slab, us_link); + dom->ud_free_slabs++; } else if (slab->us_freecount == 0) { LIST_REMOVE(slab, us_link); LIST_INSERT_HEAD(&dom->ud_part_slab, slab, us_link); @@ -4254,7 +4254,7 @@ slab_free_item(uma_zone_t zone, uma_slab_t slab, void *item) slab->us_freecount++; /* Keg statistics. */ - dom->ud_free++; + dom->ud_free_items++; } static void @@ -4635,9 +4635,14 @@ uma_prealloc(uma_zone_t zone, int items) aflags); if (slab != NULL) { dom = &keg->uk_domain[slab->us_domain]; + /* + * keg_alloc_slab() always returns a slab on the + * partial list. + */ LIST_REMOVE(slab, us_link); LIST_INSERT_HEAD(&dom->ud_free_slab, slab, us_link); + dom->ud_free_slabs++; KEG_UNLOCK(keg, slab->us_domain); break; } @@ -4915,7 +4920,7 @@ sysctl_vm_zone_stats(SYSCTL_HANDLER_ARGS) LIST_FOREACH(kz, &uma_kegs, uk_link) { kfree = pages = 0; for (i = 0; i < vm_ndomains; i++) { - kfree += kz->uk_domain[i].ud_free; + kfree += kz->uk_domain[i].ud_free_items; pages += kz->uk_domain[i].ud_pages; } LIST_FOREACH(z, &kz->uk_zones, uz_link) { @@ -5219,7 +5224,7 @@ get_uma_stats(uma_keg_t kz, uma_zone_t z, uint64_t *allocs, uint64_t *used, *cachefree += z->uz_domain[i].uzd_nitems; if (!((z->uz_flags & UMA_ZONE_SECONDARY) && (LIST_FIRST(&kz->uk_zones) != z))) - *cachefree += kz->uk_domain[i].ud_free; + *cachefree += kz->uk_domain[i].ud_free_items; } *used = *allocs - frees; return (((int64_t)*used + *cachefree) * kz->uk_size); diff --git a/sys/vm/uma_int.h b/sys/vm/uma_int.h index 5df643bad11..d55acfaddc2 100644 --- a/sys/vm/uma_int.h +++ b/sys/vm/uma_int.h @@ -324,7 +324,8 @@ struct uma_domain { struct slabhead ud_free_slab; /* completely unallocated slabs */ struct slabhead ud_full_slab; /* fully allocated slabs */ uint32_t ud_pages; /* Total page count */ - uint32_t ud_free; /* Count of items free in slabs */ + uint32_t ud_free_items; /* Count of items free in all slabs */ + uint32_t ud_free_slabs; /* Count of free slabs */ } __aligned(CACHE_LINE_SIZE); typedef struct uma_domain * uma_domain_t; From 25aa4a3c078bea25d748a491b3ff3317a36d8004 Mon Sep 17 00:00:00 2001 From: Mark Johnston Date: Tue, 11 Feb 2020 20:15:49 +0000 Subject: [PATCH 080/144] libmemstat: Catch up with r357776. Reported by: O. Hartmann --- lib/libmemstat/memstat_uma.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/libmemstat/memstat_uma.c b/lib/libmemstat/memstat_uma.c index c063a33604d..f9d13dbc04a 100644 --- a/lib/libmemstat/memstat_uma.c +++ b/lib/libmemstat/memstat_uma.c @@ -476,7 +476,7 @@ skip_percpu: ret = kread(kvm, &kzp->uk_domain[i], &ukd, sizeof(ukd), 0); if (ret != 0) - kegfree += ukd.ud_free; + kegfree += ukd.ud_free_items; } mtp->mt_kegfree = kegfree; mtp->mt_free += mtp->mt_kegfree; From ec5fd09524e6e8736a0679085c2c489b5affca7e Mon Sep 17 00:00:00 2001 From: Li-Wen Hsu Date: Tue, 11 Feb 2020 20:41:51 +0000 Subject: [PATCH 081/144] Reduce nc timeout in sys.mac.portacl.* It is not necessary to wait that long for localhost. Sponsored by: The FreeBSD Foundation --- tests/sys/mac/portacl/misc.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/sys/mac/portacl/misc.sh b/tests/sys/mac/portacl/misc.sh index 5a9e67bae74..9a6320357ea 100644 --- a/tests/sys/mac/portacl/misc.sh +++ b/tests/sys/mac/portacl/misc.sh @@ -17,6 +17,7 @@ check_bind() { local host idtype name proto port udpflag host="127.0.0.1" + timeout=1 idtype=${1} name=${2} @@ -28,7 +29,7 @@ check_bind() { out=$( case "${idtype}" in uid|gid) - ( echo -n | su -m ${name} -c "nc ${udpflag} -l -w 10 $host $port" 2>&1 ) & + ( echo -n | su -m ${name} -c "nc ${udpflag} -l -w ${timeout} $host $port" 2>&1 ) & ;; jail) kill $$ @@ -37,7 +38,7 @@ check_bind() { kill $$ esac sleep 0.3 - echo | nc ${udpflag} -w 10 $host $port >/dev/null 2>&1 + echo | nc ${udpflag} -w ${timeout} $host $port >/dev/null 2>&1 wait ) case "${out}" in From 47602aa4e9eb67f64db56c4e044b1a3a819a7039 Mon Sep 17 00:00:00 2001 From: Gleb Smirnoff Date: Tue, 11 Feb 2020 20:59:41 +0000 Subject: [PATCH 082/144] Remove assertion from TASK_INIT() macro, since some users of sys/taskqueue.h may not have includes that define MPASS. It was useful during testing of r357771, but can be omitted now. An invalid value of priority will yield only in potential priority inversion, not a crash. This fixes compilation of ports/x11/nvidia-driver. --- sys/sys/taskqueue.h | 1 - 1 file changed, 1 deletion(-) diff --git a/sys/sys/taskqueue.h b/sys/sys/taskqueue.h index 2be3c96bdae..f0cc00af986 100644 --- a/sys/sys/taskqueue.h +++ b/sys/sys/taskqueue.h @@ -121,7 +121,6 @@ void taskqueue_thread_enqueue(void *context); * Initialise a task structure. */ #define TASK_INIT_FLAGS(task, priority, func, context, flags) do { \ - MPASS((priority) >= 0 && (priority) <= 255); \ (task)->ta_pending = 0; \ (task)->ta_priority = (priority); \ (task)->ta_flags = (flags); \ From 0c556b7f9872a4667bccdb10ce923cdcf7df12b4 Mon Sep 17 00:00:00 2001 From: Li-Wen Hsu Date: Tue, 11 Feb 2020 22:21:22 +0000 Subject: [PATCH 083/144] Temporarily skip sys.geom.class.multipath.failloop.failloop in CI This case uses `dtrace -c` but it has some issues at the moment PR: 244053 Sponsored by: The FreeBSD Foundation --- tests/sys/geom/class/multipath/failloop.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/sys/geom/class/multipath/failloop.sh b/tests/sys/geom/class/multipath/failloop.sh index f9a1417ae37..8e5237130a7 100755 --- a/tests/sys/geom/class/multipath/failloop.sh +++ b/tests/sys/geom/class/multipath/failloop.sh @@ -36,6 +36,10 @@ failloop_head() } failloop_body() { + if [ "$(atf_config_get ci false)" = "true" ]; then + atf_skip "https://bugs.freebsd.org/244053" + fi + sysctl -n kern.geom.notaste > kern.geom.notaste.txt load_gnop load_gmultipath From f192f6484897d1d3c8c4cbd2723d66a7269306d6 Mon Sep 17 00:00:00 2001 From: Li-Wen Hsu Date: Tue, 11 Feb 2020 22:48:12 +0000 Subject: [PATCH 084/144] Temporarily skip failing test case sys.kern/ptrace_test/ptrace__parent_wait_after_attach PR: 244055 Sponsored by: The FreeBSD Foundation --- tests/sys/kern/ptrace_test.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/sys/kern/ptrace_test.c b/tests/sys/kern/ptrace_test.c index cc103bed199..5c163ea80a8 100644 --- a/tests/sys/kern/ptrace_test.c +++ b/tests/sys/kern/ptrace_test.c @@ -213,6 +213,9 @@ ATF_TC_BODY(ptrace__parent_wait_after_attach, tc) int cpipe[2], status; char c; + if (atf_tc_get_config_var_as_bool_wd(tc, "ci", false)) + atf_tc_skip("https://bugs.freebsd.org/244055"); + ATF_REQUIRE(pipe(cpipe) == 0); ATF_REQUIRE((child = fork()) != -1); if (child == 0) { From 519aaa1500cf304a91277926d5829a1551f84466 Mon Sep 17 00:00:00 2001 From: Li-Wen Hsu Date: Tue, 11 Feb 2020 23:17:58 +0000 Subject: [PATCH 085/144] Temporarily skip flakey test case sys.kern.ptrace_test.ptrace__parent_exits_before_child PR: 244056 Sponsored by: The FreeBSD Foundation --- tests/sys/kern/ptrace_test.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/sys/kern/ptrace_test.c b/tests/sys/kern/ptrace_test.c index 5c163ea80a8..5422cce8071 100644 --- a/tests/sys/kern/ptrace_test.c +++ b/tests/sys/kern/ptrace_test.c @@ -469,6 +469,9 @@ ATF_TC_BODY(ptrace__parent_exits_before_child, tc) int cpipe1[2], cpipe2[2], gcpipe[2], status; pid_t child, gchild; + if (atf_tc_get_config_var_as_bool_wd(tc, "ci", false)) + atf_tc_skip("https://bugs.freebsd.org/244056"); + ATF_REQUIRE(pipe(cpipe1) == 0); ATF_REQUIRE(pipe(cpipe2) == 0); ATF_REQUIRE(pipe(gcpipe) == 0); From 8185c4ae244f9a52ad987b36e7d6300500054d00 Mon Sep 17 00:00:00 2001 From: Martin Matuska Date: Tue, 11 Feb 2020 23:48:03 +0000 Subject: [PATCH 086/144] Update vendor/libarchive/dist to git 3288ebb0353beb51dfb09d444dedbe9235ead53d Libarchive 3.4.2 Relevant vendor changes: PR #1289: atomic extraction support (bsdtar -x --safe-writes) PR #1308: big endian fix for UTF16 support in LHA reader PR #1326: reject RAR5 files that declare invalid header flags Issue #987: fix support 7z archive entries with Delta filter Issue #1317: fix compression output buffer handling in XAR writer Issue #1319: fix uname or gname longer than 32 characters in pax writer Issue #1325: fix use after free when archiving hardlinks in ISO9660 or XAR Use localtime_r() and gmtime_r() instead of localtime() and gmtime() --- .github/workflows/ci.yml | 26 +- CMakeLists.txt | 13 +- Makefile.am | 5 + NEWS | 8 + build/ci/build.sh | 7 +- build/ci/github_actions/ci.cmd | 65 ++- build/cmake/config.h.in | 3 + build/release/Dockerfile | 11 + build/release/release.sh | 8 + build/version | 2 +- cat/bsdcat.h | 5 + cat/test/test_0.c | 2 +- configure.ac | 4 +- contrib/archivetest.c | 16 +- cpio/cpio.c | 22 +- cpio/test/test_basic.c | 14 +- cpio/test/test_format_newc.c | 15 +- libarchive/CMakeLists.txt | 1 + libarchive/archive.h | 4 +- libarchive/archive_acl_private.h | 6 +- libarchive/archive_blake2.h | 5 +- libarchive/archive_blake2_impl.h | 5 +- libarchive/archive_cmdline_private.h | 6 +- libarchive/archive_crc32.h | 5 + libarchive/archive_cryptor_private.h | 7 +- libarchive/archive_digest_private.h | 7 +- libarchive/archive_endian.h | 11 +- libarchive/archive_entry.c | 10 +- libarchive/archive_entry_locale.h | 6 +- libarchive/archive_entry_private.h | 6 +- libarchive/archive_getdate.c | 149 ++++++- libarchive/archive_getdate.h | 6 +- libarchive/archive_hmac_private.h | 7 +- libarchive/archive_openssl_evp_private.h | 5 + libarchive/archive_openssl_hmac_private.h | 5 + libarchive/archive_options_private.h | 4 + libarchive/archive_pack_dev.c | 9 +- libarchive/archive_pack_dev.h | 6 +- libarchive/archive_pathmatch.h | 6 +- libarchive/archive_platform_acl.h | 6 + libarchive/archive_platform_xattr.h | 6 + libarchive/archive_ppmd7.c | 2 +- libarchive/archive_ppmd7_private.h | 6 +- libarchive/archive_ppmd8_private.h | 4 +- libarchive/archive_ppmd_private.h | 6 +- libarchive/archive_private.h | 11 +- libarchive/archive_random_private.h | 6 +- libarchive/archive_rb.h | 21 +- libarchive/archive_read.c | 2 +- libarchive/archive_read_disk_posix.c | 37 +- libarchive/archive_read_disk_private.h | 6 +- libarchive/archive_read_private.h | 6 +- libarchive/archive_read_set_options.3 | 34 +- libarchive/archive_read_support_filter_uu.c | 30 +- libarchive/archive_read_support_format_7zip.c | 9 +- libarchive/archive_read_support_format_lha.c | 35 +- .../archive_read_support_format_mtree.c | 1 + libarchive/archive_read_support_format_rar.c | 69 ++- libarchive/archive_read_support_format_rar5.c | 242 ++++++----- libarchive/archive_read_support_format_warc.c | 3 +- libarchive/archive_read_support_format_xar.c | 17 +- libarchive/archive_string.c | 3 +- libarchive/archive_string.h | 6 +- libarchive/archive_string_composition.h | 6 +- libarchive/archive_util.c | 230 ++++++---- libarchive/archive_windows.h | 8 +- libarchive/archive_write_disk.3 | 7 +- libarchive/archive_write_disk_posix.c | 78 +++- libarchive/archive_write_disk_private.h | 6 +- libarchive/archive_write_disk_windows.c | 110 ++++- libarchive/archive_write_private.h | 6 +- libarchive/archive_write_set_format.c | 45 ++ libarchive/archive_write_set_format_7zip.c | 3 +- libarchive/archive_write_set_format_ar.c | 1 + libarchive/archive_write_set_format_cpio.c | 1 + .../archive_write_set_format_cpio_newc.c | 1 + libarchive/archive_write_set_format_gnutar.c | 15 +- libarchive/archive_write_set_format_iso9660.c | 22 +- libarchive/archive_write_set_format_pax.c | 100 +++-- libarchive/archive_write_set_format_private.h | 42 ++ libarchive/archive_write_set_format_shar.c | 5 +- libarchive/archive_write_set_format_ustar.c | 30 +- libarchive/archive_write_set_format_v7tar.c | 29 +- libarchive/archive_write_set_format_warc.c | 18 +- libarchive/archive_write_set_format_xar.c | 65 ++- libarchive/archive_write_set_format_zip.c | 23 +- libarchive/archive_write_set_options.3 | 239 ++++++++-- libarchive/archive_xxhash.h | 5 +- libarchive/filter_fork.h | 6 +- ...t_archive_write_set_format_filter_by_ext.c | 2 +- libarchive/test/test_compat_zip.c | 10 +- libarchive/test/test_fuzz.c | 3 +- libarchive/test/test_read_extract.c | 2 +- libarchive/test/test_read_format_7zip.c | 19 +- .../test_read_format_7zip_delta4_lzma1.7z.uu | 407 ++++++++++++++++++ .../test_read_format_7zip_delta4_lzma2.7z.uu | 407 ++++++++++++++++++ .../test_read_format_7zip_packinfo_digests.c | 76 ++-- .../test/test_read_format_gtar_sparse.c | 5 +- libarchive/test/test_read_format_rar5.c | 15 + ...format_rar5_block_size_is_too_small.rar.uu | 8 + libarchive/test/test_read_format_zip.c | 8 +- .../test_read_format_zip_7075_utf8_paths.c | 2 +- .../test_read_format_zip_comment_stored.c | 2 +- .../test/test_read_format_zip_extra_padding.c | 2 +- .../test_read_format_zip_high_compression.c | 2 +- libarchive/test/test_read_format_zip_jar.c | 2 +- .../test/test_read_format_zip_mac_metadata.c | 2 +- .../test/test_read_format_zip_malformed.c | 2 +- libarchive/test/test_read_format_zip_msdos.c | 2 +- libarchive/test/test_read_format_zip_nested.c | 2 +- .../test/test_read_format_zip_nofiletype.c | 2 +- libarchive/test/test_read_format_zip_padded.c | 2 +- libarchive/test/test_read_format_zip_sfx.c | 2 +- ...format_zip_with_invalid_traditional_eocd.c | 2 +- libarchive/test/test_read_format_zip_zip64.c | 4 +- libarchive/test/test_read_pax_truncated.c | 6 +- libarchive/test/test_read_truncated_filter.c | 4 +- libarchive/test/test_sparse_basic.c | 6 +- libarchive/test/test_write_disk.c | 2 +- .../test/test_write_format_cpio_empty.c | 2 +- libarchive/test/test_write_format_pax.c | 46 ++ .../test/test_write_format_shar_empty.c | 2 +- libarchive/test/test_write_format_tar.c | 2 +- .../test/test_write_format_tar_sparse.c | 4 +- libarchive/test/test_write_format_xar.c | 3 + libarchive/test/test_write_format_zip_file.c | 2 +- .../test/test_write_format_zip_file_zip64.c | 2 +- libarchive_fe/err.h | 9 +- tar/bsdtar.1 | 51 ++- tar/bsdtar.c | 6 + tar/bsdtar.h | 7 + tar/cmdline.c | 2 + tar/test/CMakeLists.txt | 1 + tar/test/test_basic.c | 2 +- tar/test/test_copy.c | 4 +- tar/test/test_option_C_upper.c | 2 +- tar/test/test_option_s.c | 6 +- tar/test/test_option_safe_writes.c | 77 ++++ tar/util.c | 22 +- test_utils/test_common.h | 28 +- test_utils/test_main.c | 42 +- 141 files changed, 2771 insertions(+), 732 deletions(-) create mode 100644 build/release/Dockerfile create mode 100755 build/release/release.sh create mode 100644 libarchive/archive_write_set_format_private.h create mode 100644 libarchive/test/test_read_format_7zip_delta4_lzma1.7z.uu create mode 100644 libarchive/test/test_read_format_7zip_delta4_lzma2.7z.uu create mode 100644 libarchive/test/test_read_format_rar5_block_size_is_too_small.rar.uu create mode 100644 tar/test/test_option_safe_writes.c diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 510cb9c2915..2ffa282479b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,6 +33,14 @@ jobs: run: ./build/ci/build.sh -a install env: BS: ${{ matrix.bs }} + - name: Artifact + run: ./build/ci/build.sh -a artifact + env: + BS: ${{ matrix.bs }} + - uses: actions/upload-artifact@v1 + with: + name: libarchive-macos-${{ matrix.bs }}-${{ github.sha }} + path: libarchive.tar.xz Ubuntu: runs-on: ubuntu-latest @@ -66,7 +74,14 @@ jobs: run: ./build/ci/build.sh -a install env: BS: ${{ matrix.bs }} - + - name: Artifact + run: ./build/ci/build.sh -a artifact + env: + BS: ${{ matrix.bs }} + - uses: actions/upload-artifact@v1 + with: + name: libarchive-ubuntu-${{ matrix.bs }}-${{ matrix.crypto }}-${{ github.sha }} + path: libarchive.tar.xz Ubuntu-distcheck: runs-on: ubuntu-latest steps: @@ -114,3 +129,12 @@ jobs: shell: cmd env: BE: ${{ matrix.be }} + - name: Artifact + run: ./build/ci/github_actions/ci.cmd artifact + shell: cmd + env: + BE: ${{ matrix.be }} + - uses: actions/upload-artifact@v1 + with: + name: libarchive-windows-${{ matrix.be }}-${{ github.sha }} + path: libarchive.zip diff --git a/CMakeLists.txt b/CMakeLists.txt index 51c4c00d356..5a9b3250443 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ endif() # RelWithDebInfo : Release build with Debug Info # MinSizeRel : Release Min Size build IF(NOT CMAKE_BUILD_TYPE) - SET(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Build Type" FORCE) + SET(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build Type" FORCE) ENDIF(NOT CMAKE_BUILD_TYPE) # Set a value type to properly display CMAKE_BUILD_TYPE on GUI if the # value type is "UNINITIALIZED". @@ -155,9 +155,9 @@ IF (MSVC) ################################################################# # Set compile flags for debug build. # This is added into CMAKE_C_FLAGS when CMAKE_BUILD_TYPE is "Debug" - # Enable level 4 C4061: The enumerate has no associated handler in a switch - # statement. - SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /we4061") + # Enable level 4 C4062: The enumerate has no associated handler in a switch + # statement and there is no default that can catch it. + SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /we4062") # Enable level 4 C4254: A larger bit field was assigned to a smaller bit # field. SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /we4254") @@ -287,6 +287,10 @@ IF("${CMAKE_C_PLATFORM_ID}" MATCHES "^(HP-UX)$") ADD_DEFINITIONS(-D_XOPEN_SOURCE=500) # Ask wchar.h for mbstate_t ENDIF() +IF(MINGW) + ADD_DEFINITIONS(-D__USE_MINGW_ANSI_STDIO) +ENDIF() + # INCLUDE(CheckCSourceCompiles) INCLUDE(CheckCSourceRuns) @@ -1392,6 +1396,7 @@ CHECK_FUNCTION_EXISTS_GLIBC(wctomb HAVE_WCTOMB) CHECK_FUNCTION_EXISTS_GLIBC(_ctime64_s HAVE__CTIME64_S) CHECK_FUNCTION_EXISTS_GLIBC(_fseeki64 HAVE__FSEEKI64) CHECK_FUNCTION_EXISTS_GLIBC(_get_timezone HAVE__GET_TIMEZONE) +CHECK_FUNCTION_EXISTS_GLIBC(_gmtime64_s HAVE__GMTIME64_S) CHECK_FUNCTION_EXISTS_GLIBC(_localtime64_s HAVE__LOCALTIME64_S) CHECK_FUNCTION_EXISTS_GLIBC(_mkgmtime64 HAVE__MKGMTIME64) diff --git a/Makefile.am b/Makefile.am index 781bbf726c2..41b2808e9f7 100644 --- a/Makefile.am +++ b/Makefile.am @@ -228,6 +228,7 @@ libarchive_la_SOURCES= \ libarchive/archive_write_set_format_iso9660.c \ libarchive/archive_write_set_format_mtree.c \ libarchive/archive_write_set_format_pax.c \ + libarchive/archive_write_set_format_private.h \ libarchive/archive_write_set_format_raw.c \ libarchive/archive_write_set_format_shar.c \ libarchive/archive_write_set_format_ustar.c \ @@ -751,7 +752,9 @@ libarchive_test_EXTRA_DIST=\ libarchive/test/test_read_format_7zip_copy_2.7z.uu \ libarchive/test/test_read_format_7zip_deflate.7z.uu \ libarchive/test/test_read_format_7zip_delta_lzma1.7z.uu \ + libarchive/test/test_read_format_7zip_delta4_lzma1.7z.uu \ libarchive/test/test_read_format_7zip_delta_lzma2.7z.uu \ + libarchive/test/test_read_format_7zip_delta4_lzma2.7z.uu \ libarchive/test/test_read_format_7zip_empty_archive.7z.uu \ libarchive/test/test_read_format_7zip_empty_file.7z.uu \ libarchive/test/test_read_format_7zip_encryption.7z.uu \ @@ -876,6 +879,7 @@ libarchive_test_EXTRA_DIST=\ libarchive/test/test_read_format_rar5_win32.rar.uu \ libarchive/test/test_read_format_rar5_arm_filter_on_window_boundary.rar.uu \ libarchive/test/test_read_format_rar5_different_winsize_on_merge.rar.uu \ + libarchive/test/test_read_format_rar5_block_size_is_too_small.rar.uu \ libarchive/test/test_read_format_raw.bufr.uu \ libarchive/test/test_read_format_raw.data.gz.uu \ libarchive/test/test_read_format_raw.data.Z.uu \ @@ -1081,6 +1085,7 @@ bsdtar_test_SOURCES= \ tar/test/test_option_q.c \ tar/test/test_option_r.c \ tar/test/test_option_s.c \ + tar/test/test_option_safe_writes.c \ tar/test/test_option_uid_uname.c \ tar/test/test_option_uuencode.c \ tar/test/test_option_xattrs.c \ diff --git a/NEWS b/NEWS index deffabca0f7..15360f5d9d0 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,11 @@ +Feb 11, 2020: libarchive 3.4.2 released + +Jan 23, 2020: Important fixes for writing XAR archives + +Jan 20, 2020: New tar option: --safe-writes (atomical file extraction) + +Jan 03, 2020: Support mbed TLS (PolarSSL) as optional crypto provider + Dec 30, 2019: libarchive 3.4.1 released Dec 11, 2019: New pax write option "xattrhdr" diff --git a/build/ci/build.sh b/build/ci/build.sh index 97d570b5e01..0e0c2fbab0c 100755 --- a/build/ci/build.sh +++ b/build/ci/build.sh @@ -42,6 +42,7 @@ while getopts a:b:c:d:s: opt; do test) ;; install) ;; distcheck) ;; + artifact) ;; *) inputerror "Invalid action (-a)" ;; esac ACTIONS="${ACTIONS} ${OPTARG}" @@ -147,12 +148,16 @@ for action in ${ACTIONS}; do install) ${MAKE} ${MAKE_ARGS} install DESTDIR="${BUILDDIR}/destdir" RET="$?" - cd ${BUILDDIR}/destdir && ls -lR . + cd "${BUILDDIR}/destdir" && ls -lR . ;; distcheck) ${MAKE} ${MAKE_ARGS} distcheck RET="$?" ;; + artifact) + tar -c -J -C "${BUILDDIR}/destdir" -f "${CURDIR}/libarchive.tar.xz" usr + ls -l "${CURDIR}/libarchive.tar.xz" + ;; esac if [ "${RET}" != "0" ]; then exit "${RET}" diff --git a/build/ci/github_actions/ci.cmd b/build/ci/github_actions/ci.cmd index 30626d5c2a4..954d515c3b4 100755 --- a/build/ci/github_actions/ci.cmd +++ b/build/ci/github_actions/ci.cmd @@ -1,5 +1,6 @@ @ECHO OFF SET ZLIB_VERSION=1.2.11 +SET BZIP2_VERSION=b7a672291188a6469f71dd13ad14f2f9a7344fc8 IF NOT "%BE%"=="mingw-gcc" ( IF NOT "%BE%"=="msvc" ( ECHO Environment variable BE must be mingw-gcc or msvc @@ -7,20 +8,31 @@ IF NOT "%BE%"=="mingw-gcc" ( ) ) +SET ORIGPATH=%PATH% +IF "%BE%"=="mingw-gcc" ( + SET MINGWPATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\cmake\bin;C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\bin +) + IF "%1"=="deplibs" ( IF NOT EXIST build_ci\libs ( MKDIR build_ci\libs ) CD build_ci\libs - IF NOT EXIST zlib-%ZLIB_VERSION%.tar.gz ( - curl -o zlib-%ZLIB_VERSION%.tar.gz https://www.zlib.net/zlib-%ZLIB_VERSION%.tar.gz + IF NOT EXIST zlib-%ZLIB_VERSION%.zip ( + curl -L -o zlib-%ZLIB_VERSION%.zip https://github.com/libarchive/zlib/archive/v%ZLIB_VERSION%.zip ) IF NOT EXIST zlib-%ZLIB_VERSION% ( - tar -x -z -f zlib-%ZLIB_VERSION%.tar.gz + tar -x -f zlib-%ZLIB_VERSION%.zip + ) + IF NOT EXIST bzip2-%BZIP2_VERSION%.zip ( + curl -L -o bzip2-%BZIP2_VERSION%.zip https://github.com/libarchive/bzip2/archive/%BZIP2_VERSION%.zip + ) + IF NOT EXIST bzip2-%BZIP2_VERSION% ( + tar -x -f bzip2-%BZIP2_VERSION%.zip ) CD zlib-%ZLIB_VERSION% IF "%BE%"=="mingw-gcc" ( - SET PATH=C:\Program Files\cmake\bin;C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\bin + SET PATH=%MINGWPATH% cmake -G "MinGW Makefiles" -D CMAKE_BUILD_TYPE="Release" . || EXIT /b 1 mingw32-make || EXIT /b 1 mingw32-make test || EXIT /b 1 @@ -31,49 +43,66 @@ IF "%1"=="deplibs" ( cmake --build . --target RUN_TESTS --config Release || EXIT /b 1 cmake --build . --target INSTALL --config Release || EXIT /b 1 ) + CD .. + CD bzip2-%BZIP2_VERSION% + IF "%BE%"=="mingw-gcc" ( + SET PATH=%MINGWPATH% + cmake -G "MinGW Makefiles" -D CMAKE_BUILD_TYPE="Release" -D ENABLE_LIB_ONLY=ON -D ENABLE_SHARED_LIB=OFF -D ENABLE_STATIC_LIB=ON . || EXIT /b 1 + mingw32-make || EXIT /b 1 + REM mingw32-make test || EXIT /b 1 + mingw32-make install || EXIT /b 1 + ) ELSE IF "%BE%"=="msvc" ( + cmake -G "Visual Studio 16 2019" -D CMAKE_BUILD_TYPE="Release" -D ENABLE_LIB_ONLY=ON -D ENABLE_SHARED_LIB=OFF -D ENABLE_STATIC_LIB=ON . || EXIT /b 1 + cmake --build . --target ALL_BUILD --config Release || EXIT /b 1 + REM cmake --build . --target RUN_TESTS --config Release || EXIT /b 1 + cmake --build . --target INSTALL --config Release || EXIT /b 1 + ) + CD .. ) ELSE IF "%1%"=="configure" ( IF "%BE%"=="mingw-gcc" ( - SET PATH=C:\Program Files\cmake\bin;C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\bin + SET PATH=%MINGWPATH% MKDIR build_ci\cmake CD build_ci\cmake - cmake -G "MinGW Makefiles" ..\.. || EXIT /b 1 + cmake -G "MinGW Makefiles" -D ZLIB_LIBRARY="C:/Program Files (x86)/zlib/lib/libzlibstatic.a" -D ZLIB_INCLUDE_DIR="C:/Program Files (x86)/zlib/include" -D BZIP2_LIBRARIES="C:/Program Files (x86)/bzip2/lib/libbz2.a" -D BZIP2_INCLUDE_DIR="C:/Program Files (x86)/bzip2/include" ..\.. || EXIT /b 1 ) ELSE IF "%BE%"=="msvc" ( MKDIR build_ci\cmake CD build_ci\cmake - cmake -G "Visual Studio 16 2019" -D CMAKE_BUILD_TYPE="Release" ..\.. || EXIT /b 1 + cmake -G "Visual Studio 16 2019" -D CMAKE_BUILD_TYPE="Release" -D ZLIB_LIBRARY="C:/Program Files (x86)/zlib/lib/zlibstatic.lib" -D ZLIB_INCLUDE_DIR="C:/Program Files (x86)/zlib/include" -D BZIP2_LIBRARIES="C:/Program Files (x86)/bzip2/lib/bz2.lib" -D BZIP2_INCLUDE_DIR="C:/Program Files (x86)/bzip2/include" ..\.. || EXIT /b 1 ) ) ELSE IF "%1%"=="build" ( IF "%BE%"=="mingw-gcc" ( - SET PATH=C:\Program Files\cmake\bin;C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\bin + SET PATH=%MINGWPATH% CD build_ci\cmake - mingw32-make || EXIT /b 1 + mingw32-make VERBOSE=1 || EXIT /b 1 ) ELSE IF "%BE%"=="msvc" ( CD build_ci\cmake - cmake --build . --target ALL_BUILD --config Release + cmake --build . --target ALL_BUILD --config Release || EXIT /b 1 ) ) ELSE IF "%1%"=="test" ( IF "%BE%"=="mingw-gcc" ( - SET PATH=C:\Program Files\cmake\bin;C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\bin - COPY "C:\Program Files (x86)\zlib\bin\libzlib.dll" build_ci\cmake\bin\ + SET PATH=%MINGWPATH% CD build_ci\cmake SET SKIP_TEST_SPARSE=1 - mingw32-make test + mingw32-make test VERBOSE=1 || EXIT /b 1 ) ELSE IF "%BE%"=="msvc" ( ECHO "Skipping tests on this platform" EXIT /b 0 REM CD build_ci\cmake - REM cmake --build . --target RUN_TESTS --config Release + REM cmake --build . --target RUN_TESTS --config Release || EXIT /b 1 ) ) ELSE IF "%1%"=="install" ( IF "%BE%"=="mingw-gcc" ( - SET PATH=C:\Program Files\cmake\bin;C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\bin + SET PATH=%MINGWPATH% CD build_ci\cmake - mingw32-make install DESTDIR=%cd%\destdir + mingw32-make install || EXIT /b 1 ) ELSE IF "%BE%"=="msvc" ( - cmake --build . --target INSTALL --config Release + CD build_ci\cmake + cmake --build . --target INSTALL --config Release || EXIT /b 1 ) +) ELSE IF "%1"=="artifact" ( + tar -c -C "C:\Program Files (x86)" --format=zip -f libarchive.zip libarchive ) ELSE ( - ECHO "Usage: %0% deplibs|configure|build|test|install" + ECHO "Usage: %0% deplibs|configure|build|test|install|artifact" @EXIT /b 0 ) @EXIT /b 0 diff --git a/build/cmake/config.h.in b/build/cmake/config.h.in index 3b1f0b95c8f..fcbd80c5a17 100644 --- a/build/cmake/config.h.in +++ b/build/cmake/config.h.in @@ -1210,6 +1210,9 @@ typedef uint64_t uintmax_t; /* Define to 1 if you have the `_get_timezone' function. */ #cmakedefine HAVE__GET_TIMEZONE 1 +/* Define to 1 if you have the `_gmtime64_s' function. */ +#cmakedefine HAVE__GMTIME64_S 1 + /* Define to 1 if you have the `_localtime64_s' function. */ #cmakedefine HAVE__LOCALTIME64_S 1 diff --git a/build/release/Dockerfile b/build/release/Dockerfile new file mode 100644 index 00000000000..76944f40c48 --- /dev/null +++ b/build/release/Dockerfile @@ -0,0 +1,11 @@ +FROM ubuntu:18.04 +RUN apt-get update && apt-get install -y build-essential autoconf automake libtool pkg-config cmake libssl-dev libacl1-dev libbz2-dev liblzma-dev libzip-dev liblz4-dev libzstd-dev lzop groff ghostscript bsdmainutils zip +ADD . $HOME/libarchive/ +ADD "http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD" $HOME/libarchive/build/autoconf/config.guess +ADD "http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD" $HOME/libarchive/build/autoconf/config.sub +WORKDIR $HOME/libarchive +RUN /bin/sh build/clean.sh +RUN /bin/sh build/autogen.sh +ENV SKIP_OPEN_FD_ERR_TEST=1 SKIP_TEST_SPARSE=1 +RUN ./configure +RUN make V=1 distcheck diff --git a/build/release/release.sh b/build/release/release.sh new file mode 100755 index 00000000000..4d080389268 --- /dev/null +++ b/build/release/release.sh @@ -0,0 +1,8 @@ +#!/bin/sh +ID=$(docker build -q -f build/release/Dockerfile .) +if [ -z "$ID" ]; then + echo "Failed to build docker image" + exit 1 +else + docker run $ID sh -c "tar -c -f - libarchive-*" | tar -x -f - +fi diff --git a/build/version b/build/version index bd97679ec3c..78be3ab7e34 100644 --- a/build/version +++ b/build/version @@ -1 +1 @@ -3004002dev +3004002 diff --git a/cat/bsdcat.h b/cat/bsdcat.h index 2e055e7c187..6467d6e3d31 100644 --- a/cat/bsdcat.h +++ b/cat/bsdcat.h @@ -23,6 +23,9 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#ifndef BSDCAT_H_INCLUDED +#define BSDCAT_H_INCLUDED + #if defined(PLATFORM_CONFIG_H) /* Use hand-built config.h in environments that need it. */ #include PLATFORM_CONFIG_H @@ -54,3 +57,5 @@ void usage(FILE *stream, int eval); void bsdcat_next(void); void bsdcat_print_error(void); void bsdcat_read_to_stdout(const char* filename); + +#endif diff --git a/cat/test/test_0.c b/cat/test/test_0.c index f9fe5d8473f..c806c24356c 100644 --- a/cat/test/test_0.c +++ b/cat/test/test_0.c @@ -59,7 +59,7 @@ DEFINE_TEST(test_0) * we know some option that will succeed. */ if (0 != systemf("%s --version >" DEV_NULL, testprog)) { - failure("Unable to successfully run: %s --version\n", testprog, testprog); + failure("Unable to successfully run: %s --version\n", testprog); assert(0); } diff --git a/configure.ac b/configure.ac index ce90ee83957..2581087988b 100644 --- a/configure.ac +++ b/configure.ac @@ -4,7 +4,7 @@ dnl First, define all of the version numbers up front. dnl In particular, this allows the version macro to be used in AC_INIT dnl These first two version numbers are updated automatically on each release. -m4_define([LIBARCHIVE_VERSION_S],[3.4.2dev]) +m4_define([LIBARCHIVE_VERSION_S],[3.4.2]) m4_define([LIBARCHIVE_VERSION_N],[3004002]) dnl bsdtar and bsdcpio versioning tracks libarchive @@ -641,7 +641,7 @@ AC_CHECK_FUNCS([strchr strdup strerror strncpy_s strrchr symlink timegm]) AC_CHECK_FUNCS([tzset unlinkat unsetenv utime utimensat utimes vfork]) AC_CHECK_FUNCS([wcrtomb wcscmp wcscpy wcslen wctomb wmemcmp wmemcpy wmemmove]) AC_CHECK_FUNCS([_ctime64_s _fseeki64]) -AC_CHECK_FUNCS([_get_timezone _localtime64_s _mkgmtime64]) +AC_CHECK_FUNCS([_get_timezone _gmtime64_s _localtime64_s _mkgmtime64]) # detects cygwin-1.7, as opposed to older versions AC_CHECK_FUNCS([cygwin_conv_path]) diff --git a/contrib/archivetest.c b/contrib/archivetest.c index 8002039ee4e..e4a25e3c911 100644 --- a/contrib/archivetest.c +++ b/contrib/archivetest.c @@ -37,10 +37,14 @@ #include #include -const char *errnostr(int errno) +#if defined __MINGW32__ +#include +#endif + +static const char *errnostr(int e) { char *estr; - switch(errno) { + switch(e) { case ARCHIVE_EOF: estr = "ARCHIVE_EOF"; break; @@ -66,12 +70,12 @@ const char *errnostr(int errno) return (estr); } -void usage(const char *prog) +static void usage(const char *prog) { fprintf(stderr, "Usage: %s [-f filename] [-h] [-q] [-s]\n", prog); } -void printhelp() +static void printhelp() { fprintf(stdout, "archivetest: verify reading archives with " "libarchive\n\n" @@ -84,7 +88,7 @@ void printhelp() "\n%s\n", archive_version_details()); } -int v_print(int verbose, const char *format, ...) +static int v_print(int verbose, const char *format, ...) { int r = 0; @@ -139,6 +143,8 @@ int main(int argc, char *argv[]) fprintf(stderr, "Unknown option " "character '\\x%x'.\n", optopt); usage(argv[0]); + exit(1); + break; default: exit(1); } diff --git a/cpio/cpio.c b/cpio/cpio.c index 4fd394dea5f..da5c3986001 100644 --- a/cpio/cpio.c +++ b/cpio/cpio.c @@ -1139,6 +1139,14 @@ list_item_verbose(struct cpio *cpio, struct archive_entry *entry) const char *fmt; time_t mtime; static time_t now; + struct tm *ltime; +#if defined(HAVE_LOCALTIME_R) || defined(HAVE__LOCALTIME64_S) + struct tm tmbuf; +#endif +#if defined(HAVE__LOCALTIME64_S) + errno_t terr; + __time64_t tmptime; +#endif if (!now) time(&now); @@ -1186,7 +1194,19 @@ list_item_verbose(struct cpio *cpio, struct archive_entry *entry) else fmt = cpio->day_first ? "%e %b %H:%M" : "%b %e %H:%M"; #endif - strftime(date, sizeof(date), fmt, localtime(&mtime)); +#if defined(HAVE_LOCALTIME_R) + ltime = localtime_r(&mtime, &tmbuf); +#elif defined(HAVE__LOCALTIME64_S) + tmptime = mtime; + terr = _localtime64_s(&tmbuf, &tmptime); + if (terr) + ltime = NULL; + else + ltime = &tmbuf; +#else + ltime = localtime(&mtime); +#endif + strftime(date, sizeof(date), fmt, ltime); fprintf(out, "%s%3d %-8s %-8s %8s %12s %s", archive_entry_strmode(entry), diff --git a/cpio/test/test_basic.c b/cpio/test/test_basic.c index a8fedf89e96..b716253408f 100644 --- a/cpio/test/test_basic.c +++ b/cpio/test/test_basic.c @@ -33,15 +33,15 @@ verify_files(const char *msg) */ /* Regular file with 2 links. */ - failure(msg); + failure("%s", msg); assertIsReg("file", 0644); - failure(msg); + failure("%s", msg); assertFileSize("file", 10); - failure(msg); + failure("%s", msg); assertFileNLinks("file", 2); /* Another name for the same file. */ - failure(msg); + failure("%s", msg); assertIsHardlink("linkfile", "file"); /* Symlink */ @@ -49,11 +49,11 @@ verify_files(const char *msg) assertIsSymlink("symlink", "file", 0); /* Another file with 1 link and different permissions. */ - failure(msg); + failure("%s", msg); assertIsReg("file2", 0777); - failure(msg); + failure("%s", msg); assertFileSize("file2", 10); - failure(msg); + failure("%s", msg); assertFileNLinks("file2", 1); /* dir */ diff --git a/cpio/test/test_format_newc.c b/cpio/test/test_format_newc.c index 6c981f6ac13..49387a73580 100644 --- a/cpio/test/test_format_newc.c +++ b/cpio/test/test_format_newc.c @@ -205,9 +205,11 @@ DEFINE_TEST(test_format_newc) gid = from_hex(e + 30, 8); /* gid */ assertEqualMem(e + 38, "00000003", 8); /* nlink */ t = from_hex(e + 46, 8); /* mtime */ - failure("t=0x%08x now=0x%08x=%d", t, now, now); + failure("t=%#08jx now=%#08jx=%jd", (intmax_t)t, (intmax_t)now, + (intmax_t)now); assert(t <= now); /* File wasn't created in future. */ - failure("t=0x%08x now - 2=0x%08x = %d", t, now - 2, now - 2); + failure("t=%#08jx now - 2=%#08jx=%jd", (intmax_t)t, (intmax_t)now - 2, + (intmax_t)now - 2); assert(t >= now - 2); /* File was created w/in last 2 secs. */ failure("newc format stores body only with last appearance of a link\n" " first appearance should be empty, so this file size\n" @@ -243,7 +245,8 @@ DEFINE_TEST(test_format_newc) assertEqualInt(gid, from_hex(e + 30, 8)); /* gid */ assertEqualMem(e + 38, "00000001", 8); /* nlink */ t2 = from_hex(e + 46, 8); /* mtime */ - failure("First entry created at t=0x%08x this entry created at t2=0x%08x", t, t2); + failure("First entry created at t=%#08jx this entry created" + " at t2=%#08jx", (intmax_t)t, (intmax_t)t2); assert(t2 == t || t2 == t + 1); /* Almost same as first entry. */ assertEqualMem(e + 54, "00000005", 8); /* File size */ fs = from_hex(e + 54, 8); @@ -278,7 +281,8 @@ DEFINE_TEST(test_format_newc) assertEqualInt(nlinks("dir"), from_hex(e + 38, 8)); /* nlinks */ #endif t2 = from_hex(e + 46, 8); /* mtime */ - failure("First entry created at t=0x%08x this entry created at t2=0x%08x", t, t2); + failure("First entry created at t=%#08jx this entry created at" + "t2=%#08jx", (intmax_t)t, (intmax_t)t2); assert(t2 == t || t2 == t + 1); /* Almost same as first entry. */ assertEqualMem(e + 54, "00000000", 8); /* File size */ fs = from_hex(e + 54, 8); @@ -311,7 +315,8 @@ DEFINE_TEST(test_format_newc) assertEqualInt(gid, from_hex(e + 30, 8)); /* gid */ assertEqualMem(e + 38, "00000003", 8); /* nlink */ t2 = from_hex(e + 46, 8); /* mtime */ - failure("First entry created at t=0x%08x this entry created at t2=0x%08x", t, t2); + failure("First entry created at t=%#08jx this entry created at" + "t2=%#08jx", (intmax_t)t, (intmax_t)t2); assert(t2 == t || t2 == t + 1); /* Almost same as first entry. */ assertEqualInt(10, from_hex(e + 54, 8)); /* File size */ fs = from_hex(e + 54, 8); diff --git a/libarchive/CMakeLists.txt b/libarchive/CMakeLists.txt index ec775bb4993..9389bbc9a95 100644 --- a/libarchive/CMakeLists.txt +++ b/libarchive/CMakeLists.txt @@ -150,6 +150,7 @@ SET(libarchive_SOURCES archive_write_set_format_iso9660.c archive_write_set_format_mtree.c archive_write_set_format_pax.c + archive_write_set_format_private.h archive_write_set_format_raw.c archive_write_set_format_shar.c archive_write_set_format_ustar.c diff --git a/libarchive/archive.h b/libarchive/archive.h index fe6dc63c8ea..55818eac8e6 100644 --- a/libarchive/archive.h +++ b/libarchive/archive.h @@ -155,7 +155,7 @@ __LA_DECL int archive_version_number(void); /* * Textual name/version of the library, useful for version displays. */ -#define ARCHIVE_VERSION_ONLY_STRING "3.4.2dev" +#define ARCHIVE_VERSION_ONLY_STRING "3.4.2" #define ARCHIVE_VERSION_STRING "libarchive " ARCHIVE_VERSION_ONLY_STRING __LA_DECL const char * archive_version_string(void); @@ -693,6 +693,8 @@ __LA_DECL int archive_read_set_passphrase_callback(struct archive *, #define ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS (0x10000) /* Default: Do not clear no-change flags when unlinking object */ #define ARCHIVE_EXTRACT_CLEAR_NOCHANGE_FFLAGS (0x20000) +/* Default: Do not extract atomically (using rename) */ +#define ARCHIVE_EXTRACT_SAFE_WRITES (0x40000) __LA_DECL int archive_read_extract(struct archive *, struct archive_entry *, int flags); diff --git a/libarchive/archive_acl_private.h b/libarchive/archive_acl_private.h index ef0b0234cc1..af108162c66 100644 --- a/libarchive/archive_acl_private.h +++ b/libarchive/archive_acl_private.h @@ -25,13 +25,13 @@ * $FreeBSD$ */ +#ifndef ARCHIVE_ACL_PRIVATE_H_INCLUDED +#define ARCHIVE_ACL_PRIVATE_H_INCLUDED + #ifndef __LIBARCHIVE_BUILD #error This header is only to be used internally to libarchive. #endif -#ifndef ARCHIVE_ACL_PRIVATE_H_INCLUDED -#define ARCHIVE_ACL_PRIVATE_H_INCLUDED - #include "archive_string.h" struct archive_acl_entry { diff --git a/libarchive/archive_blake2.h b/libarchive/archive_blake2.h index 337be194654..dd6fe6fe5a9 100644 --- a/libarchive/archive_blake2.h +++ b/libarchive/archive_blake2.h @@ -12,8 +12,9 @@ More information about the BLAKE2 hash function can be found at https://blake2.net. */ -#ifndef BLAKE2_H -#define BLAKE2_H + +#ifndef ARCHIVE_BLAKE2_H +#define ARCHIVE_BLAKE2_H #include #include diff --git a/libarchive/archive_blake2_impl.h b/libarchive/archive_blake2_impl.h index c1df82e0c95..0f05defea36 100644 --- a/libarchive/archive_blake2_impl.h +++ b/libarchive/archive_blake2_impl.h @@ -12,8 +12,9 @@ More information about the BLAKE2 hash function can be found at https://blake2.net. */ -#ifndef BLAKE2_IMPL_H -#define BLAKE2_IMPL_H + +#ifndef ARCHIVE_BLAKE2_IMPL_H +#define ARCHIVE_BLAKE2_IMPL_H #include #include diff --git a/libarchive/archive_cmdline_private.h b/libarchive/archive_cmdline_private.h index 4e409e81481..57a19494fd7 100644 --- a/libarchive/archive_cmdline_private.h +++ b/libarchive/archive_cmdline_private.h @@ -25,15 +25,15 @@ * $FreeBSD$ */ +#ifndef ARCHIVE_CMDLINE_PRIVATE_H +#define ARCHIVE_CMDLINE_PRIVATE_H + #ifndef __LIBARCHIVE_BUILD #ifndef __LIBARCHIVE_TEST #error This header is only to be used internally to libarchive. #endif #endif -#ifndef ARCHIVE_CMDLINE_PRIVATE_H -#define ARCHIVE_CMDLINE_PRIVATE_H - struct archive_cmdline { char *path; char **argv; diff --git a/libarchive/archive_crc32.h b/libarchive/archive_crc32.h index cd633af89b4..4f1aed30593 100644 --- a/libarchive/archive_crc32.h +++ b/libarchive/archive_crc32.h @@ -25,6 +25,9 @@ * $FreeBSD: head/lib/libarchive/archive_crc32.h 201102 2009-12-28 03:11:36Z kientzle $ */ +#ifndef ARCHIVE_CRC32_H +#define ARCHIVE_CRC32_H + #ifndef __LIBARCHIVE_BUILD #error This header is only to be used internally to libarchive. #endif @@ -76,3 +79,5 @@ crc32(unsigned long crc, const void *_p, size_t len) crc = crc_tbl[(crc ^ *p++) & 0xff] ^ (crc >> 8); return (crc ^ 0xffffffffUL); } + +#endif diff --git a/libarchive/archive_cryptor_private.h b/libarchive/archive_cryptor_private.h index 0063f3e0014..64a20556a39 100644 --- a/libarchive/archive_cryptor_private.h +++ b/libarchive/archive_cryptor_private.h @@ -23,13 +23,12 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef __LIBARCHIVE_BUILD -#error This header is only to be used internally to libarchive. -#endif - #ifndef ARCHIVE_CRYPTOR_PRIVATE_H_INCLUDED #define ARCHIVE_CRYPTOR_PRIVATE_H_INCLUDED +#ifndef __LIBARCHIVE_BUILD +#error This header is only to be used internally to libarchive. +#endif /* * On systems that do not support any recognized crypto libraries, * the archive_cryptor.c file will normally define no usable symbols. diff --git a/libarchive/archive_digest_private.h b/libarchive/archive_digest_private.h index 2685b4a017d..15312ee9a07 100644 --- a/libarchive/archive_digest_private.h +++ b/libarchive/archive_digest_private.h @@ -24,13 +24,12 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#ifndef ARCHIVE_DIGEST_PRIVATE_H_INCLUDED +#define ARCHIVE_DIGEST_PRIVATE_H_INCLUDED + #ifndef __LIBARCHIVE_BUILD #error This header is only to be used internally to libarchive. #endif - -#ifndef ARCHIVE_CRYPTO_PRIVATE_H_INCLUDED -#define ARCHIVE_CRYPTO_PRIVATE_H_INCLUDED - /* * Crypto support in various Operating Systems: * diff --git a/libarchive/archive_endian.h b/libarchive/archive_endian.h index 1c48563b137..e6d3f2ce5e7 100644 --- a/libarchive/archive_endian.h +++ b/libarchive/archive_endian.h @@ -28,16 +28,15 @@ * Borrowed from FreeBSD's */ -#ifndef __LIBARCHIVE_BUILD -#error This header is only to be used internally to libarchive. -#endif +#ifndef ARCHIVE_ENDIAN_H_INCLUDED +#define ARCHIVE_ENDIAN_H_INCLUDED /* Note: This is a purely internal header! */ /* Do not use this outside of libarchive internal code! */ -#ifndef ARCHIVE_ENDIAN_H_INCLUDED -#define ARCHIVE_ENDIAN_H_INCLUDED - +#ifndef __LIBARCHIVE_BUILD +#error This header is only to be used internally to libarchive. +#endif /* * Disabling inline keyword for compilers known to choke on it: diff --git a/libarchive/archive_entry.c b/libarchive/archive_entry.c index 72c644e6079..a15e98c2842 100644 --- a/libarchive/archive_entry.c +++ b/libarchive/archive_entry.c @@ -1699,7 +1699,7 @@ static const struct flag { const wchar_t *wname; unsigned long set; unsigned long clear; -} flags[] = { +} fileflags[] = { /* Preferred (shorter) names per flag first, all prefixed by "no" */ #ifdef SF_APPEND { "nosappnd", L"nosappnd", SF_APPEND, 0}, @@ -1876,7 +1876,7 @@ ae_fflagstostr(unsigned long bitset, unsigned long bitclear) bits = bitset | bitclear; length = 0; - for (flag = flags; flag->name != NULL; flag++) + for (flag = fileflags; flag->name != NULL; flag++) if (bits & (flag->set | flag->clear)) { length += strlen(flag->name) + 1; bits &= ~(flag->set | flag->clear); @@ -1889,7 +1889,7 @@ ae_fflagstostr(unsigned long bitset, unsigned long bitclear) return (NULL); dp = string; - for (flag = flags; flag->name != NULL; flag++) { + for (flag = fileflags; flag->name != NULL; flag++) { if (bitset & flag->set || bitclear & flag->clear) { sp = flag->name + 2; } else if (bitset & flag->clear || bitclear & flag->set) { @@ -1941,7 +1941,7 @@ ae_strtofflags(const char *s, unsigned long *setp, unsigned long *clrp) *end != ' ' && *end != ',') end++; length = end - start; - for (flag = flags; flag->name != NULL; flag++) { + for (flag = fileflags; flag->name != NULL; flag++) { size_t flag_length = strlen(flag->name); if (length == flag_length && memcmp(start, flag->name, length) == 0) { @@ -2009,7 +2009,7 @@ ae_wcstofflags(const wchar_t *s, unsigned long *setp, unsigned long *clrp) *end != L' ' && *end != L',') end++; length = end - start; - for (flag = flags; flag->wname != NULL; flag++) { + for (flag = fileflags; flag->wname != NULL; flag++) { size_t flag_length = wcslen(flag->wname); if (length == flag_length && wmemcmp(start, flag->wname, length) == 0) { diff --git a/libarchive/archive_entry_locale.h b/libarchive/archive_entry_locale.h index 44550c51ec6..803c0368bb6 100644 --- a/libarchive/archive_entry_locale.h +++ b/libarchive/archive_entry_locale.h @@ -25,13 +25,13 @@ * $FreeBSD$ */ +#ifndef ARCHIVE_ENTRY_LOCALE_H_INCLUDED +#define ARCHIVE_ENTRY_LOCALE_H_INCLUDED + #ifndef __LIBARCHIVE_BUILD #error This header is only to be used internally to libarchive. #endif -#ifndef ARCHIVE_ENTRY_LOCALE_H_INCLUDED -#define ARCHIVE_ENTRY_LOCALE_H_INCLUDED - struct archive_entry; struct archive_string_conv; diff --git a/libarchive/archive_entry_private.h b/libarchive/archive_entry_private.h index 3d569bbfc6b..2b9a084ca15 100644 --- a/libarchive/archive_entry_private.h +++ b/libarchive/archive_entry_private.h @@ -25,13 +25,13 @@ * $FreeBSD: head/lib/libarchive/archive_entry_private.h 201096 2009-12-28 02:41:27Z kientzle $ */ +#ifndef ARCHIVE_ENTRY_PRIVATE_H_INCLUDED +#define ARCHIVE_ENTRY_PRIVATE_H_INCLUDED + #ifndef __LIBARCHIVE_BUILD #error This header is only to be used internally to libarchive. #endif -#ifndef ARCHIVE_ENTRY_PRIVATE_H_INCLUDED -#define ARCHIVE_ENTRY_PRIVATE_H_INCLUDED - #include "archive_acl_private.h" #include "archive_string.h" diff --git a/libarchive/archive_getdate.c b/libarchive/archive_getdate.c index 030c083ce71..3ec5bba8889 100644 --- a/libarchive/archive_getdate.c +++ b/libarchive/archive_getdate.c @@ -27,6 +27,7 @@ ** This code is in the public domain and has no copyright. */ +#include "archive_platform.h" #ifdef __FreeBSD__ #include __FBSDID("$FreeBSD$"); @@ -694,8 +695,16 @@ Convert(time_t Month, time_t Day, time_t Year, signed char DaysInMonth[12] = { 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; - time_t Julian; - int i; + time_t Julian; + int i; + struct tm *ltime; +#if defined(HAVE_LOCALTIME_R) || defined(HAVE__LOCALTIME64_S) + struct tm tmbuf; +#endif +#if defined(HAVE__LOCALTIME64_S) + errno_t terr; + __time64_t tmptime; +#endif if (Year < 69) Year += 2000; @@ -722,21 +731,64 @@ Convert(time_t Month, time_t Day, time_t Year, Julian *= DAY; Julian += Timezone; Julian += Hours * HOUR + Minutes * MINUTE + Seconds; +#if defined(HAVE_LOCALTIME_R) + ltime = localtime_r(&Julian, &tmbuf); +#elif defined(HAVE__LOCALTIME64_S) + tmptime = Julian; + terr = _localtime64_s(&tmbuf, &tmptime); + if (terr) + ltime = NULL; + else + ltime = &tmbuf; +#else + ltime = localtime(&Julian); +#endif if (DSTmode == DSTon - || (DSTmode == DSTmaybe && localtime(&Julian)->tm_isdst)) + || (DSTmode == DSTmaybe && ltime->tm_isdst)) Julian -= HOUR; return Julian; } - static time_t DSTcorrect(time_t Start, time_t Future) { - time_t StartDay; - time_t FutureDay; + time_t StartDay; + time_t FutureDay; + struct tm *ltime; +#if defined(HAVE_LOCALTIME_R) || defined(HAVE__LOCALTIME64_S) + struct tm tmbuf; +#endif +#if defined(HAVE__LOCALTIME64_S) + errno_t terr; + __time64_t tmptime; +#endif - StartDay = (localtime(&Start)->tm_hour + 1) % 24; - FutureDay = (localtime(&Future)->tm_hour + 1) % 24; +#if defined(HAVE_LOCALTIME_R) + ltime = localtime_r(&Start, &tmbuf); +#elif defined(HAVE__LOCALTIME64_S) + tmptime = Start; + terr = _localtime64_s(&tmbuf, &tmptime); + if (terr) + ltime = NULL; + else + ltime = &tmbuf; +#else + ltime = localtime(&Start); +#endif + StartDay = (ltime->tm_hour + 1) % 24; +#if defined(HAVE_LOCALTIME_R) + ltime = localtime_r(&Future, &tmbuf); +#elif defined(HAVE__LOCALTIME64_S) + tmptime = Future; + terr = _localtime64_s(&tmbuf, &tmptime); + if (terr) + ltime = NULL; + else + ltime = &tmbuf; +#else + ltime = localtime(&Future); +#endif + FutureDay = (ltime->tm_hour + 1) % 24; return (Future - Start) + (StartDay - FutureDay) * HOUR; } @@ -747,9 +799,27 @@ RelativeDate(time_t Start, time_t zone, int dstmode, { struct tm *tm; time_t t, now; +#if defined(HAVE_GMTIME_R) || defined(HAVE__GMTIME64_S) + struct tm tmbuf; +#endif +#if defined(HAVE__GMTIME64_S) + errno_t terr; + __time64_t tmptime; +#endif t = Start - zone; +#if defined(HAVE_GMTIME_R) + tm = gmtime_r(&t, &tmbuf); +#elif defined(HAVE__GMTIME64_S) + tmptime = t; + terr = _gmtime64_s(&tmbuf, &tmptime); + if (terr) + tm = NULL; + else + tm = &tmbuf; +#else tm = gmtime(&t); +#endif now = Start; now += DAY * ((DayNumber - tm->tm_wday + 7) % 7); now += 7 * DAY * (DayOrdinal <= 0 ? DayOrdinal : DayOrdinal - 1); @@ -765,10 +835,28 @@ RelativeMonth(time_t Start, time_t Timezone, time_t RelMonth) struct tm *tm; time_t Month; time_t Year; +#if defined(HAVE_LOCALTIME_R) || defined(HAVE__LOCALTIME64_S) + struct tm tmbuf; +#endif +#if defined(HAVE__LOCALTIME64_S) + errno_t terr; + __time64_t tmptime; +#endif if (RelMonth == 0) return 0; +#if defined(HAVE_LOCALTIME_R) + tm = localtime_r(&Start, &tmbuf); +#elif defined(HAVE__LOCALTIME64_S) + tmptime = Start; + terr = _localtime64_s(&tmbuf, &tmptime); + if (terr) + tm = NULL; + else + tm = &tmbuf; +#else tm = localtime(&Start); +#endif Month = 12 * (tm->tm_year + 1900) + tm->tm_mon + RelMonth; Year = Month / 12; Month = Month % 12 + 1; @@ -905,6 +993,10 @@ __archive_get_date(time_t now, const char *p) time_t Start; time_t tod; long tzone; +#if defined(HAVE__LOCALTIME64_S) || defined(HAVE__GMTIME64_S) + errno_t terr; + __time64_t tmptime; +#endif /* Clear out the parsed token array. */ memset(tokens, 0, sizeof(tokens)); @@ -913,20 +1005,44 @@ __archive_get_date(time_t now, const char *p) gds = &_gds; /* Look up the current time. */ +#if defined(HAVE_LOCALTIME_R) + tm = localtime_r(&now, &local); +#elif defined(HAVE__LOCALTIME64_S) + tmptime = now; + terr = _localtime64_s(&local, &tmptime); + if (terr) + tm = NULL; + else + tm = &local; +#else memset(&local, 0, sizeof(local)); - tm = localtime (&now); + tm = localtime(&now); +#endif if (tm == NULL) return -1; +#if !defined(HAVE_LOCALTIME_R) && !defined(HAVE__LOCALTIME64_S) local = *tm; +#endif /* Look up UTC if we can and use that to determine the current * timezone offset. */ +#if defined(HAVE_GMTIME_R) + gmt_ptr = gmtime_r(&now, &gmt); +#elif defined(HAVE__GMTIME64_S) + tmptime = now; + terr = _gmtime64_s(&gmt, &tmptime); + if (terr) + gmt_ptr = NULL; + else + gmt_ptr = &gmt; +#else memset(&gmt, 0, sizeof(gmt)); - gmt_ptr = gmtime (&now); + gmt_ptr = gmtime(&now); if (gmt_ptr != NULL) { /* Copy, in case localtime and gmtime use the same buffer. */ gmt = *gmt_ptr; } +#endif if (gmt_ptr != NULL) tzone = difftm (&gmt, &local); else @@ -960,7 +1076,18 @@ __archive_get_date(time_t now, const char *p) * time components instead of the local timezone. */ if (gds->HaveZone && gmt_ptr != NULL) { now -= gds->Timezone; - gmt_ptr = gmtime (&now); +#if defined(HAVE_GMTIME_R) + gmt_ptr = gmtime_r(&now, &gmt); +#elif defined(HAVE__GMTIME64_S) + tmptime = now; + terr = _gmtime64_s(&gmt, &tmptime); + if (terr) + gmt_ptr = NULL; + else + gmt_ptr = &gmt; +#else + gmt_ptr = gmtime(&now); +#endif if (gmt_ptr != NULL) local = *gmt_ptr; now += gds->Timezone; diff --git a/libarchive/archive_getdate.h b/libarchive/archive_getdate.h index 666ff5ff78b..900a8f692e9 100644 --- a/libarchive/archive_getdate.h +++ b/libarchive/archive_getdate.h @@ -25,13 +25,13 @@ * $FreeBSD$ */ +#ifndef ARCHIVE_GETDATE_H_INCLUDED +#define ARCHIVE_GETDATE_H_INCLUDED + #ifndef __LIBARCHIVE_BUILD #error This header is only to be used internally to libarchive. #endif -#ifndef ARCHIVE_GETDATE_H_INCLUDED -#define ARCHIVE_GETDATE_H_INCLUDED - #include time_t __archive_get_date(time_t now, const char *); diff --git a/libarchive/archive_hmac_private.h b/libarchive/archive_hmac_private.h index b7b365c7ad4..13a67d4955a 100644 --- a/libarchive/archive_hmac_private.h +++ b/libarchive/archive_hmac_private.h @@ -23,13 +23,12 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef __LIBARCHIVE_BUILD -#error This header is only to be used internally to libarchive. -#endif - #ifndef ARCHIVE_HMAC_PRIVATE_H_INCLUDED #define ARCHIVE_HMAC_PRIVATE_H_INCLUDED +#ifndef __LIBARCHIVE_BUILD +#error This header is only to be used internally to libarchive. +#endif /* * On systems that do not support any recognized crypto libraries, * the archive_hmac.c file is expected to define no usable symbols. diff --git a/libarchive/archive_openssl_evp_private.h b/libarchive/archive_openssl_evp_private.h index 43a3ccc52a1..ebb06702d0c 100644 --- a/libarchive/archive_openssl_evp_private.h +++ b/libarchive/archive_openssl_evp_private.h @@ -22,9 +22,14 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + #ifndef ARCHIVE_OPENSSL_EVP_PRIVATE_H_INCLUDED #define ARCHIVE_OPENSSL_EVP_PRIVATE_H_INCLUDED +#ifndef __LIBARCHIVE_BUILD +#error This header is only to be used internally to libarchive. +#endif + #include #include diff --git a/libarchive/archive_openssl_hmac_private.h b/libarchive/archive_openssl_hmac_private.h index 921249bb945..25c8dda654f 100644 --- a/libarchive/archive_openssl_hmac_private.h +++ b/libarchive/archive_openssl_hmac_private.h @@ -22,9 +22,14 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + #ifndef ARCHIVE_OPENSSL_HMAC_PRIVATE_H_INCLUDED #define ARCHIVE_OPENSSL_HMAC_PRIVATE_H_INCLUDED +#ifndef __LIBARCHIVE_BUILD +#error This header is only to be used internally to libarchive. +#endif + #include #include diff --git a/libarchive/archive_options_private.h b/libarchive/archive_options_private.h index 6ef0165aff6..9a7f8080d2f 100644 --- a/libarchive/archive_options_private.h +++ b/libarchive/archive_options_private.h @@ -23,6 +23,9 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#ifndef ARCHIVE_OPTIONS_PRIVATE_H_INCLUDED +#define ARCHIVE_OPTIONS_PRIVATE_H_INCLUDED + #include "archive_platform.h" __FBSDID("$FreeBSD$"); @@ -45,3 +48,4 @@ _archive_set_either_option(struct archive *a, const char *m, const char *o, const char *v, option_handler use_format_option, option_handler use_filter_option); +#endif diff --git a/libarchive/archive_pack_dev.c b/libarchive/archive_pack_dev.c index a5e57ac209d..f8286d82183 100644 --- a/libarchive/archive_pack_dev.c +++ b/libarchive/archive_pack_dev.c @@ -57,11 +57,12 @@ __RCSID("$NetBSD$"); #ifdef HAVE_SYS_STAT_H #include #endif -#ifdef HAVE_SYS_SYSMACROS_H -#include -#endif -#ifdef HAVE_SYS_MKDEV_H +#if MAJOR_IN_MKDEV #include +#define HAVE_MAJOR +#elif MAJOR_IN_SYSMACROS +#include +#define HAVE_MAJOR #endif #ifdef HAVE_UNISTD_H #include diff --git a/libarchive/archive_pack_dev.h b/libarchive/archive_pack_dev.h index 749fd3d2cb6..eaf23e3883e 100644 --- a/libarchive/archive_pack_dev.h +++ b/libarchive/archive_pack_dev.h @@ -31,8 +31,8 @@ /* Originally from NetBSD's mknod(8) source. */ -#ifndef _PACK_DEV_H -#define _PACK_DEV_H +#ifndef ARCHIVE_PACK_DEV_H +#define ARCHIVE_PACK_DEV_H typedef dev_t pack_t(int, unsigned long [], const char **); @@ -46,4 +46,4 @@ pack_t pack_native; (((y) << 12) & 0xfff00000) | \ (((y) << 0) & 0x000000ff))) -#endif /* _PACK_DEV_H */ +#endif /* ARCHIVE_PACK_DEV_H */ diff --git a/libarchive/archive_pathmatch.h b/libarchive/archive_pathmatch.h index e6901774ddd..9995142921e 100644 --- a/libarchive/archive_pathmatch.h +++ b/libarchive/archive_pathmatch.h @@ -26,15 +26,15 @@ * $FreeBSD$ */ +#ifndef ARCHIVE_PATHMATCH_H +#define ARCHIVE_PATHMATCH_H + #ifndef __LIBARCHIVE_BUILD #ifndef __LIBARCHIVE_TEST #error This header is only to be used internally to libarchive. #endif #endif -#ifndef ARCHIVE_PATHMATCH_H -#define ARCHIVE_PATHMATCH_H - /* Don't anchor at beginning unless the pattern starts with "^" */ #define PATHMATCH_NO_ANCHOR_START 1 /* Don't anchor at end unless the pattern ends with "$" */ diff --git a/libarchive/archive_platform_acl.h b/libarchive/archive_platform_acl.h index 3498f78b3c8..264e6de375a 100644 --- a/libarchive/archive_platform_acl.h +++ b/libarchive/archive_platform_acl.h @@ -30,6 +30,12 @@ #ifndef ARCHIVE_PLATFORM_ACL_H_INCLUDED #define ARCHIVE_PLATFORM_ACL_H_INCLUDED +#ifndef __LIBARCHIVE_BUILD +#ifndef __LIBARCHIVE_TEST_COMMON +#error This header is only to be used internally to libarchive. +#endif +#endif + /* * Determine what ACL types are supported */ diff --git a/libarchive/archive_platform_xattr.h b/libarchive/archive_platform_xattr.h index 4edfecfdbdf..ad4b90ab7b2 100644 --- a/libarchive/archive_platform_xattr.h +++ b/libarchive/archive_platform_xattr.h @@ -30,6 +30,12 @@ #ifndef ARCHIVE_PLATFORM_XATTR_H_INCLUDED #define ARCHIVE_PLATFORM_XATTR_H_INCLUDED +#ifndef __LIBARCHIVE_BUILD +#ifndef __LIBARCHIVE_TEST_COMMON +#error This header is only to be used internally to libarchive. +#endif +#endif + /* * Determine if we support extended attributes */ diff --git a/libarchive/archive_ppmd7.c b/libarchive/archive_ppmd7.c index d0bacc68cd7..4029395b4c7 100644 --- a/libarchive/archive_ppmd7.c +++ b/libarchive/archive_ppmd7.c @@ -1000,7 +1000,7 @@ static void RangeEnc_ShiftLow(CPpmd7z_RangeEnc *p) static void RangeEnc_Encode(CPpmd7z_RangeEnc *p, UInt32 start, UInt32 size, UInt32 total) { - p->Low += start * (p->Range /= total); + p->Low += (UInt64)start * (UInt64)(p->Range /= total); p->Range *= size; while (p->Range < kTopValue) { diff --git a/libarchive/archive_ppmd7_private.h b/libarchive/archive_ppmd7_private.h index 577d6fb43d0..71b954458c6 100644 --- a/libarchive/archive_ppmd7_private.h +++ b/libarchive/archive_ppmd7_private.h @@ -6,13 +6,13 @@ This code is based on PPMd var.H (2001): Dmitry Shkarin : Public domain */ of RangeCoder from 7z, instead of RangeCoder from original PPMd var.H. If you need the compatibility with original PPMd var.H, you can use external RangeDecoder */ +#ifndef ARCHIVE_PPMD7_PRIVATE_H_INCLUDED +#define ARCHIVE_PPMD7_PRIVATE_H_INCLUDED + #ifndef __LIBARCHIVE_BUILD #error This header is only to be used internally to libarchive. #endif -#ifndef ARCHIVE_PPMD7_PRIVATE_H_INCLUDED -#define ARCHIVE_PPMD7_PRIVATE_H_INCLUDED - #include "archive_ppmd_private.h" #define PPMD7_MIN_ORDER 2 diff --git a/libarchive/archive_ppmd8_private.h b/libarchive/archive_ppmd8_private.h index 534927860eb..454b75f41f2 100644 --- a/libarchive/archive_ppmd8_private.h +++ b/libarchive/archive_ppmd8_private.h @@ -4,8 +4,8 @@ This code is based on: PPMd var.I (2002): Dmitry Shkarin : Public domain Carryless rangecoder (1999): Dmitry Subbotin : Public domain */ -#ifndef __PPMD8_H -#define __PPMD8_H +#ifndef ARCHIVE_PPMD8_PRIVATE_H_INCLUDED +#define ARCHIVE_PPMD8_PRIVATE_H_INCLUDED #include "archive_ppmd_private.h" diff --git a/libarchive/archive_ppmd_private.h b/libarchive/archive_ppmd_private.h index a83b8514d87..582803e5fd0 100644 --- a/libarchive/archive_ppmd_private.h +++ b/libarchive/archive_ppmd_private.h @@ -2,13 +2,13 @@ 2010-03-12 : Igor Pavlov : Public domain This code is based on PPMd var.H (2001): Dmitry Shkarin : Public domain */ +#ifndef ARCHIVE_PPMD_PRIVATE_H_INCLUDED +#define ARCHIVE_PPMD_PRIVATE_H_INCLUDED + #ifndef __LIBARCHIVE_BUILD #error This header is only to be used internally to libarchive. #endif -#ifndef ARCHIVE_PPMD_PRIVATE_H_INCLUDED -#define ARCHIVE_PPMD_PRIVATE_H_INCLUDED - #include #include "archive_read_private.h" diff --git a/libarchive/archive_private.h b/libarchive/archive_private.h index 4b4be9796df..937a87bb1ef 100644 --- a/libarchive/archive_private.h +++ b/libarchive/archive_private.h @@ -25,13 +25,13 @@ * $FreeBSD: head/lib/libarchive/archive_private.h 201098 2009-12-28 02:58:14Z kientzle $ */ +#ifndef ARCHIVE_PRIVATE_H_INCLUDED +#define ARCHIVE_PRIVATE_H_INCLUDED + #ifndef __LIBARCHIVE_BUILD #error This header is only to be used internally to libarchive. #endif -#ifndef ARCHIVE_PRIVATE_H_INCLUDED -#define ARCHIVE_PRIVATE_H_INCLUDED - #if HAVE_ICONV_H #include #endif @@ -153,6 +153,11 @@ void __archive_errx(int retvalue, const char *msg) __LA_DEAD; void __archive_ensure_cloexec_flag(int fd); int __archive_mktemp(const char *tmpdir); +#if defined(_WIN32) && !defined(__CYGWIN__) +int __archive_mkstemp(wchar_t *template); +#else +int __archive_mkstemp(char *template); +#endif int __archive_clean(struct archive *); diff --git a/libarchive/archive_random_private.h b/libarchive/archive_random_private.h index c414779f8d4..08b91b3b7a3 100644 --- a/libarchive/archive_random_private.h +++ b/libarchive/archive_random_private.h @@ -23,13 +23,13 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#ifndef ARCHIVE_RANDOM_PRIVATE_H_INCLUDED +#define ARCHIVE_RANDOM_PRIVATE_H_INCLUDED + #ifndef __LIBARCHIVE_BUILD #error This header is only to be used internally to libarchive. #endif -#ifndef ARCHIVE_RANDOM_PRIVATE_H_INCLUDED -#define ARCHIVE_RANDOM_PRIVATE_H_INCLUDED - /* Random number generator. */ int archive_random(void *buf, size_t nbytes); diff --git a/libarchive/archive_rb.h b/libarchive/archive_rb.h index 4562e9ebc41..8851f108186 100644 --- a/libarchive/archive_rb.h +++ b/libarchive/archive_rb.h @@ -28,8 +28,9 @@ * * Based on NetBSD: rb.h,v 1.13 2009/08/16 10:57:01 yamt Exp */ -#ifndef ARCHIVE_RB_H_ -#define ARCHIVE_RB_H_ + +#ifndef ARCHIVE_RB_H_INCLUDED +#define ARCHIVE_RB_H_INCLUDED struct archive_rb_node { struct archive_rb_node *rb_nodes[2]; @@ -48,12 +49,24 @@ struct archive_rb_node { __archive_rb_tree_iterate((T), NULL, ARCHIVE_RB_DIR_LEFT) #define ARCHIVE_RB_TREE_MAX(T) \ __archive_rb_tree_iterate((T), NULL, ARCHIVE_RB_DIR_RIGHT) +#define ARCHIVE_RB_TREE_NEXT(T, N) \ + __archive_rb_tree_iterate((T), (N), ARCHIVE_RB_DIR_RIGHT) +#define ARCHIVE_RB_TREE_PREV(T, N) \ + __archive_rb_tree_iterate((T), (N), ARCHIVE_RB_DIR_LEFT) #define ARCHIVE_RB_TREE_FOREACH(N, T) \ for ((N) = ARCHIVE_RB_TREE_MIN(T); (N); \ - (N) = __archive_rb_tree_iterate((T), (N), ARCHIVE_RB_DIR_RIGHT)) + (N) = ARCHIVE_RB_TREE_NEXT((T), (N))) #define ARCHIVE_RB_TREE_FOREACH_REVERSE(N, T) \ for ((N) = ARCHIVE_RB_TREE_MAX(T); (N); \ - (N) = __archive_rb_tree_iterate((T), (N), ARCHIVE_RB_DIR_LEFT)) + (N) = ARCHIVE_RB_TREE_PREV((T), (N))) +#define ARCHIVE_RB_TREE_FOREACH_SAFE(N, T, S) \ + for ((N) = ARCHIVE_RB_TREE_MIN(T); \ + (N) && ((S) = ARCHIVE_RB_TREE_NEXT((T), (N)), 1); \ + (N) = (S)) +#define ARCHIVE_RB_TREE_FOREACH_REVERSE_SAFE(N, T, S) \ + for ((N) = ARCHIVE_RB_TREE_MAX(T); \ + (N) && ((S) = ARCHIVE_RB_TREE_PREV((T), (N)), 1); \ + (N) = (S)) /* * archive_rbto_compare_nodes_fn: diff --git a/libarchive/archive_read.c b/libarchive/archive_read.c index 5872601101b..4a933b2fc08 100644 --- a/libarchive/archive_read.c +++ b/libarchive/archive_read.c @@ -433,7 +433,7 @@ archive_read_add_callback_data(struct archive *_a, void *client_data, return ARCHIVE_FATAL; } a->client.dataset = (struct archive_read_data_node *)p; - for (i = a->client.nodes - 1; i > iindex && i > 0; i--) { + for (i = a->client.nodes - 1; i > iindex; i--) { a->client.dataset[i].data = a->client.dataset[i-1].data; a->client.dataset[i].begin_position = -1; a->client.dataset[i].total_size = -1; diff --git a/libarchive/archive_read_disk_posix.c b/libarchive/archive_read_disk_posix.c index 183ca1e8790..52fec7bb42c 100644 --- a/libarchive/archive_read_disk_posix.c +++ b/libarchive/archive_read_disk_posix.c @@ -729,27 +729,23 @@ _archive_read_data_block(struct archive *_a, const void **buff, if ((t->flags & needsRestoreTimes) != 0 && t->restore_time.noatime == 0) flags |= O_NOATIME; - do { #endif - t->entry_fd = open_on_current_dir(t, - tree_current_access_path(t), flags); - __archive_ensure_cloexec_flag(t->entry_fd); + t->entry_fd = open_on_current_dir(t, + tree_current_access_path(t), flags); + __archive_ensure_cloexec_flag(t->entry_fd); #if defined(O_NOATIME) - /* - * When we did open the file with O_NOATIME flag, - * if successful, set 1 to t->restore_time.noatime - * not to restore an atime of the file later. - * if failed by EPERM, retry it without O_NOATIME flag. - */ - if (flags & O_NOATIME) { - if (t->entry_fd >= 0) - t->restore_time.noatime = 1; - else if (errno == EPERM) { - flags &= ~O_NOATIME; - continue; - } - } - } while (0); + /* + * When we did open the file with O_NOATIME flag, + * if successful, set 1 to t->restore_time.noatime + * not to restore an atime of the file later. + * if failed by EPERM, retry it without O_NOATIME flag. + */ + if (flags & O_NOATIME) { + if (t->entry_fd >= 0) + t->restore_time.noatime = 1; + else if (errno == EPERM) + flags &= ~O_NOATIME; + } #endif if (t->entry_fd < 0) { archive_set_error(&a->archive, errno, @@ -1110,8 +1106,7 @@ next_entry(struct archive_read_disk *a, struct tree *t, "%s", delayed_str.s); } } - if (!archive_string_empty(&delayed_str)) - archive_string_free(&delayed_str); + archive_string_free(&delayed_str); return (r); } diff --git a/libarchive/archive_read_disk_private.h b/libarchive/archive_read_disk_private.h index f03a0a9cc30..bc8abc15d15 100644 --- a/libarchive/archive_read_disk_private.h +++ b/libarchive/archive_read_disk_private.h @@ -26,13 +26,13 @@ * $FreeBSD: head/lib/libarchive/archive_read_disk_private.h 201105 2009-12-28 03:20:54Z kientzle $ */ +#ifndef ARCHIVE_READ_DISK_PRIVATE_H_INCLUDED +#define ARCHIVE_READ_DISK_PRIVATE_H_INCLUDED + #ifndef __LIBARCHIVE_BUILD #error This header is only to be used internally to libarchive. #endif -#ifndef ARCHIVE_READ_DISK_PRIVATE_H_INCLUDED -#define ARCHIVE_READ_DISK_PRIVATE_H_INCLUDED - #include "archive_platform_acl.h" struct tree; diff --git a/libarchive/archive_read_private.h b/libarchive/archive_read_private.h index bf04f641043..c842e6f09ad 100644 --- a/libarchive/archive_read_private.h +++ b/libarchive/archive_read_private.h @@ -25,15 +25,15 @@ * $FreeBSD: head/lib/libarchive/archive_read_private.h 201088 2009-12-28 02:18:55Z kientzle $ */ +#ifndef ARCHIVE_READ_PRIVATE_H_INCLUDED +#define ARCHIVE_READ_PRIVATE_H_INCLUDED + #ifndef __LIBARCHIVE_BUILD #ifndef __LIBARCHIVE_TEST #error This header is only to be used internally to libarchive. #endif #endif -#ifndef ARCHIVE_READ_PRIVATE_H_INCLUDED -#define ARCHIVE_READ_PRIVATE_H_INCLUDED - #include "archive.h" #include "archive_string.h" #include "archive_private.h" diff --git a/libarchive/archive_read_set_options.3 b/libarchive/archive_read_set_options.3 index d23f028b0ce..78d99999cf8 100644 --- a/libarchive/archive_read_set_options.3 +++ b/libarchive/archive_read_set_options.3 @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd February 2, 2012 +.Dd January 31, 2020 .Dt ARCHIVE_READ_OPTIONS 3 .Os .Sh NAME @@ -180,6 +180,18 @@ only to modules whose name matches .\" .Sh OPTIONS .Bl -tag -compact -width indent +.It Format cab +.Bl -tag -compact -width indent +.It Cm hdrcharset +The value is used as a character set name that will be +used when translating file names. +.El +.It Format cpio +.Bl -tag -compact -width indent +.It Cm hdrcharset +The value is used as a character set name that will be +used when translating file names. +.El .It Format iso9660 .Bl -tag -compact -width indent .It Cm joliet @@ -193,6 +205,24 @@ Defaults to enabled, use .Cm !rockridge to disable. .El +.It Format lha +.Bl -tag -compact -width indent +.It Cm hdrcharset +The value is used as a character set name that will be +used when translating file names. +.El +.It Format mtree +.Bl -tag -compact -width indent +.It Cm checkfs +Allow reading information missing from the mtree from the file system. +Disabled by default. +.El +.It Format rar +.Bl -tag -compact -width indent +.It Cm hdrcharset +The value is used as a character set name that will be +used when translating file names. +.El .It Format tar .Bl -tag -compact -width indent .It Cm compat-2x @@ -202,7 +232,7 @@ This option mimics the libarchive 2.x filename handling so that such archives can be read correctly. .It Cm hdrcharset The value is used as a character set name that will be -used when translating filenames. +used when translating file names. .It Cm mac-ext Support Mac OS metadata extension that records data in special files beginning with a period and underscore. diff --git a/libarchive/archive_read_support_filter_uu.c b/libarchive/archive_read_support_filter_uu.c index 641297990d2..67ddffb0694 100644 --- a/libarchive/archive_read_support_filter_uu.c +++ b/libarchive/archive_read_support_filter_uu.c @@ -574,14 +574,13 @@ read_more: while (l > 0) { int n = 0; - if (l > 0) { - if (!uuchar[b[0]] || !uuchar[b[1]]) - break; - n = UUDECODE(*b++) << 18; - n |= UUDECODE(*b++) << 12; - *out++ = n >> 16; total++; - --l; - } + if (!uuchar[b[0]] || !uuchar[b[1]]) + break; + n = UUDECODE(*b++) << 18; + n |= UUDECODE(*b++) << 12; + *out++ = n >> 16; total++; + --l; + if (l > 0) { if (!uuchar[b[0]]) break; @@ -626,14 +625,13 @@ read_more: while (l > 0) { int n = 0; - if (l > 0) { - if (!base64[b[0]] || !base64[b[1]]) - break; - n = base64num[*b++] << 18; - n |= base64num[*b++] << 12; - *out++ = n >> 16; total++; - l -= 2; - } + if (!base64[b[0]] || !base64[b[1]]) + break; + n = base64num[*b++] << 18; + n |= base64num[*b++] << 12; + *out++ = n >> 16; total++; + l -= 2; + if (l > 0) { if (*b == '=') break; diff --git a/libarchive/archive_read_support_format_7zip.c b/libarchive/archive_read_support_format_7zip.c index 87c6c527219..6ce9d1a0e1b 100644 --- a/libarchive/archive_read_support_format_7zip.c +++ b/libarchive/archive_read_support_format_7zip.c @@ -1086,10 +1086,17 @@ init_decompression(struct archive_read *a, struct _7zip *zip, zip->bcj_state = 0; break; case _7Z_DELTA: + if (coder2->propertiesSize != 1) { + archive_set_error(&a->archive, + ARCHIVE_ERRNO_MISC, + "Invalid Delta parameter"); + return (ARCHIVE_FAILED); + } filters[fi].id = LZMA_FILTER_DELTA; memset(&delta_opt, 0, sizeof(delta_opt)); delta_opt.type = LZMA_DELTA_TYPE_BYTE; - delta_opt.dist = 1; + delta_opt.dist = + (uint32_t)coder2->properties[0] + 1; filters[fi].options = &delta_opt; fi++; break; diff --git a/libarchive/archive_read_support_format_lha.c b/libarchive/archive_read_support_format_lha.c index 35405bcdd97..bff0f01f41c 100644 --- a/libarchive/archive_read_support_format_lha.c +++ b/libarchive/archive_read_support_format_lha.c @@ -1246,8 +1246,9 @@ lha_read_file_extended_header(struct archive_read *a, struct lha *lha, archive_array_append(&lha->filename, (const char *)extdheader, datasize); /* Setup a string conversion for a filename. */ - lha->sconv_fname = archive_string_conversion_from_charset( - &a->archive, "UTF-16LE", 1); + lha->sconv_fname = + archive_string_conversion_from_charset(&a->archive, + "UTF-16LE", 1); if (lha->sconv_fname == NULL) return (ARCHIVE_FATAL); break; @@ -1273,32 +1274,46 @@ lha_read_file_extended_header(struct archive_read *a, struct lha *lha, break; case EXT_UTF16_DIRECTORY: /* UTF-16 characters take always 2 or 4 bytes */ - if (datasize == 0 || (datasize & 1) || extdheader[0] == '\0') + if (datasize == 0 || (datasize & 1) || + extdheader[0] == '\0') { /* no directory name data. exit this case. */ goto invalid; + } archive_string_empty(&lha->dirname); archive_array_append(&lha->dirname, (const char *)extdheader, datasize); - lha->sconv_dir = archive_string_conversion_from_charset( - &a->archive, "UTF-16LE", 1); + lha->sconv_dir = + archive_string_conversion_from_charset(&a->archive, + "UTF-16LE", 1); if (lha->sconv_dir == NULL) return (ARCHIVE_FATAL); else { /* - * Convert directory delimiter from 0xFF + * Convert directory delimiter from 0xFFFF * to '/' for local system. */ + uint16_t dirSep; + uint16_t d = 1; + if (archive_be16dec(&d) == 1) + dirSep = 0x2F00; + else + dirSep = 0x002F; + /* UTF-16LE character */ - uint16_t *utf16name = (uint16_t *)lha->dirname.s; + uint16_t *utf16name = + (uint16_t *)lha->dirname.s; for (i = 0; i < lha->dirname.length / 2; i++) { - if (utf16name[i] == 0xFFFF) - utf16name[i] = L'/'; + if (utf16name[i] == 0xFFFF) { + utf16name[i] = dirSep; + } } /* Is last character directory separator? */ - if (utf16name[lha->dirname.length / 2 - 1] != L'/') + if (utf16name[lha->dirname.length / 2 - 1] != + dirSep) { /* invalid directory data */ goto invalid; + } } break; case EXT_DOS_ATTR: diff --git a/libarchive/archive_read_support_format_mtree.c b/libarchive/archive_read_support_format_mtree.c index a7331a2672c..332944ac51b 100644 --- a/libarchive/archive_read_support_format_mtree.c +++ b/libarchive/archive_read_support_format_mtree.c @@ -258,6 +258,7 @@ archive_read_support_format_mtree(struct archive *_a) "Can't allocate mtree data"); return (ARCHIVE_FATAL); } + mtree->checkfs = 0; mtree->fd = -1; __archive_rb_tree_init(&mtree->rbtree, &rb_ops); diff --git a/libarchive/archive_read_support_format_rar.c b/libarchive/archive_read_support_format_rar.c index 41e5a3cadd9..98efbb1a6c4 100644 --- a/libarchive/archive_read_support_format_rar.c +++ b/libarchive/archive_read_support_format_rar.c @@ -148,6 +148,9 @@ #define FILE_ATTRIBUTE_DIRECTORY 0x10 #endif +#undef minimum +#define minimum(a, b) ((a)<(b)?(a):(b)) + /* Fields common to all headers */ struct rar_header { @@ -1722,6 +1725,13 @@ read_exttime(const char *p, struct rar *rar, const char *endp) struct tm *tm; time_t t; long nsec; +#if defined(HAVE_LOCALTIME_R) || defined(HAVE__LOCALTIME64_S) + struct tm tmbuf; +#endif +#if defined(HAVE__LOCALTIME64_S) + errno_t terr; + __time64_t tmptime; +#endif if (p + 2 > endp) return (-1); @@ -1753,7 +1763,18 @@ read_exttime(const char *p, struct rar *rar, const char *endp) rem = (((unsigned)(unsigned char)*p) << 16) | (rem >> 8); p++; } +#if defined(HAVE_LOCALTIME_R) + tm = localtime_r(&t, &tmbuf); +#elif defined(HAVE__LOCALTIME64_S) + tmptime = t; + terr = _localtime64_s(&tmbuf, &tmptime); + if (terr) + tm = NULL; + else + tm = &tmbuf; +#else tm = localtime(&t); +#endif nsec = tm->tm_sec + rem / NS_UNIT; if (rmode & 4) { @@ -2452,8 +2473,11 @@ create_code(struct archive_read *a, struct huffman_code *code, if (add_value(a, code, j, codebits, i) != ARCHIVE_OK) return (ARCHIVE_FATAL); codebits++; - if (--symbolsleft <= 0) { break; break; } + if (--symbolsleft <= 0) + break; } + if (symbolsleft <= 0) + break; codebits <<= 1; } return (ARCHIVE_OK); @@ -2463,7 +2487,8 @@ static int add_value(struct archive_read *a, struct huffman_code *code, int value, int codebits, int length) { - int repeatpos, lastnode, bitpos, bit, repeatnode, nextnode; + int lastnode, bitpos, bit; + /* int repeatpos, repeatnode, nextnode; */ free(code->table); code->table = NULL; @@ -2473,6 +2498,9 @@ add_value(struct archive_read *a, struct huffman_code *code, int value, if(length < code->minlength) code->minlength = length; + /* + * Dead code, repeatpos was is -1 + * repeatpos = -1; if (repeatpos == 0 || (repeatpos >= 0 && (((codebits >> (repeatpos - 1)) & 3) == 0 @@ -2482,6 +2510,7 @@ add_value(struct archive_read *a, struct huffman_code *code, int value, "Invalid repeat position"); return (ARCHIVE_FATAL); } + */ lastnode = 0; for (bitpos = length - 1; bitpos >= 0; bitpos--) @@ -2497,9 +2526,12 @@ add_value(struct archive_read *a, struct huffman_code *code, int value, return (ARCHIVE_FATAL); } + /* + * Dead code, repeatpos was -1, bitpos >=0 + * if (bitpos == repeatpos) { - /* Open branch check */ + * Open branch check * if (!(code->tree[lastnode].branches[bit] < 0)) { archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, @@ -2518,16 +2550,17 @@ add_value(struct archive_read *a, struct huffman_code *code, int value, return (ARCHIVE_FATAL); } - /* Set branches */ + * Set branches * code->tree[lastnode].branches[bit] = repeatnode; code->tree[repeatnode].branches[bit] = repeatnode; code->tree[repeatnode].branches[bit^1] = nextnode; lastnode = nextnode; - bitpos++; /* terminating bit already handled, skip it */ + bitpos++; * terminating bit already handled, skip it * } else { + */ /* Open branch check */ if (code->tree[lastnode].branches[bit] < 0) { @@ -2541,7 +2574,7 @@ add_value(struct archive_read *a, struct huffman_code *code, int value, /* set to branch */ lastnode = code->tree[lastnode].branches[bit]; - } + /* } */ } if (!(code->tree[lastnode].branches[0] == -1 @@ -2625,11 +2658,15 @@ make_table_recurse(struct archive_read *a, struct huffman_code *code, int node, table[i].value = code->tree[node].branches[0]; } } + /* + * Dead code, node >= 0 + * else if (node < 0) { for(i = 0; i < currtablesize; i++) table[i].length = -1; } + */ else { if(depth == maxdepth) @@ -2661,6 +2698,10 @@ expand(struct archive_read *a, int64_t end) 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5 }; + static const int lengthb_min = minimum( + (int)(sizeof(lengthbases)/sizeof(lengthbases[0])), + (int)(sizeof(lengthbits)/sizeof(lengthbits[0])) + ); static const unsigned int offsetbases[] = { 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, @@ -2678,6 +2719,10 @@ expand(struct archive_read *a, int64_t end) 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 }; + static const int offsetb_min = minimum( + (int)(sizeof(offsetbases)/sizeof(offsetbases[0])), + (int)(sizeof(offsetbits)/sizeof(offsetbits[0])) + ); static const unsigned char shortbases[] = { 0, 4, 8, 16, 32, 64, 128, 192 }; static const unsigned char shortbits[] = @@ -2757,9 +2802,7 @@ expand(struct archive_read *a, int64_t end) if ((lensymbol = read_next_symbol(a, &rar->lengthcode)) < 0) goto bad_data; - if (lensymbol > (int)(sizeof(lengthbases)/sizeof(lengthbases[0]))) - goto bad_data; - if (lensymbol > (int)(sizeof(lengthbits)/sizeof(lengthbits[0]))) + if (lensymbol > lengthb_min) goto bad_data; len = lengthbases[lensymbol] + 2; if (lengthbits[lensymbol] > 0) { @@ -2791,9 +2834,7 @@ expand(struct archive_read *a, int64_t end) } else { - if (symbol-271 > (int)(sizeof(lengthbases)/sizeof(lengthbases[0]))) - goto bad_data; - if (symbol-271 > (int)(sizeof(lengthbits)/sizeof(lengthbits[0]))) + if (symbol-271 > lengthb_min) goto bad_data; len = lengthbases[symbol-271]+3; if(lengthbits[symbol-271] > 0) { @@ -2805,9 +2846,7 @@ expand(struct archive_read *a, int64_t end) if ((offssymbol = read_next_symbol(a, &rar->offsetcode)) < 0) goto bad_data; - if (offssymbol > (int)(sizeof(offsetbases)/sizeof(offsetbases[0]))) - goto bad_data; - if (offssymbol > (int)(sizeof(offsetbits)/sizeof(offsetbits[0]))) + if (offssymbol > offsetb_min) goto bad_data; offs = offsetbases[offssymbol]+1; if(offsetbits[offssymbol] > 0) diff --git a/libarchive/archive_read_support_format_rar5.c b/libarchive/archive_read_support_format_rar5.c index ce38b1fc990..82729bdcdb3 100644 --- a/libarchive/archive_read_support_format_rar5.c +++ b/libarchive/archive_read_support_format_rar5.c @@ -73,15 +73,14 @@ * 0x52, 0x61, 0x72, 0x21, 0x1a, 0x07, 0x01, 0x00 * "Rar!→•☺·\x00" * - * It's stored in `rar5_signature` after XOR'ing it with 0xA1, because I don't + * Retrieved with `rar5_signature()` by XOR'ing it with 0xA1, because I don't * want to put this magic sequence in each binary that uses libarchive, so * applications that scan through the file for this marker won't trigger on * this "false" one. * * The array itself is decrypted in `rar5_init` function. */ -static unsigned char rar5_signature[] = { 243, 192, 211, 128, 187, 166, 160, 161 }; -static const ssize_t rar5_signature_size = sizeof(rar5_signature); +static unsigned char rar5_signature_xor[] = { 243, 192, 211, 128, 187, 166, 160, 161 }; static const size_t g_unpack_window_size = 0x20000; /* These could have been static const's, but they aren't, because of @@ -211,7 +210,7 @@ struct comp_state { or just a part of it. */ uint8_t block_parsing_finished : 1; - int notused : 4; + signed int notused : 4; int flags; /* Uncompression flags. */ int method; /* Uncompression algorithm method. */ @@ -357,6 +356,7 @@ struct rar5 { /* Forward function declarations. */ +static void rar5_signature(char *buf); static int verify_global_checksums(struct archive_read* a); static int rar5_read_data_skip(struct archive_read *a); static int push_data_ready(struct archive_read* a, struct rar5* rar, @@ -384,7 +384,7 @@ static int cdeque_init(struct cdeque* d, int max_capacity_power_of_2) { d->cap_mask = max_capacity_power_of_2 - 1; d->arr = NULL; - if((max_capacity_power_of_2 & d->cap_mask) > 0) + if((max_capacity_power_of_2 & d->cap_mask) != 0) return CDE_PARAM; cdeque_clear(d); @@ -881,10 +881,10 @@ static inline int get_archive_read(struct archive* a, static int read_ahead(struct archive_read* a, size_t how_many, const uint8_t** ptr) { + ssize_t avail = -1; if(!ptr) return 0; - ssize_t avail = -1; *ptr = __archive_read_ahead(a, how_many, &avail); if(*ptr == NULL) { return 0; @@ -1086,11 +1086,14 @@ static int read_u64(struct archive_read* a, uint64_t* pvalue) { static int bid_standard(struct archive_read* a) { const uint8_t* p; + char signature[sizeof(rar5_signature_xor)]; - if(!read_ahead(a, rar5_signature_size, &p)) + rar5_signature(signature); + + if(!read_ahead(a, sizeof(rar5_signature_xor), &p)) return -1; - if(!memcmp(rar5_signature, p, rar5_signature_size)) + if(!memcmp(signature, p, sizeof(rar5_signature_xor))) return 30; return -1; @@ -1150,14 +1153,14 @@ static int process_main_locator_extra_block(struct archive_read* a, { uint64_t locator_flags; - if(!read_var(a, &locator_flags, NULL)) { - return ARCHIVE_EOF; - } - enum LOCATOR_FLAGS { QLIST = 0x01, RECOVERY = 0x02, }; + if(!read_var(a, &locator_flags, NULL)) { + return ARCHIVE_EOF; + } + if(locator_flags & QLIST) { if(!read_var(a, &rar->qlist_offset, NULL)) { return ARCHIVE_EOF; @@ -1183,6 +1186,10 @@ static int parse_file_extra_hash(struct archive_read* a, struct rar5* rar, size_t hash_type = 0; size_t value_len; + enum HASH_TYPE { + BLAKE2sp = 0x00 + }; + if(!read_var_sized(a, &hash_type, &value_len)) return ARCHIVE_EOF; @@ -1191,10 +1198,6 @@ static int parse_file_extra_hash(struct archive_read* a, struct rar5* rar, return ARCHIVE_EOF; } - enum HASH_TYPE { - BLAKE2sp = 0x00 - }; - /* The file uses BLAKE2sp checksum algorithm instead of plain old * CRC32. */ if(hash_type == BLAKE2sp) { @@ -1257,6 +1260,7 @@ static int parse_file_extra_version(struct archive_read* a, size_t value_len = 0; struct archive_string version_string; struct archive_string name_utf8_string; + const char* cur_filename; /* Flags are ignored. */ if(!read_var_sized(a, &flags, &value_len)) @@ -1275,7 +1279,7 @@ static int parse_file_extra_version(struct archive_read* a, /* extra_data_size should be zero here. */ - const char* cur_filename = archive_entry_pathname_utf8(e); + cur_filename = archive_entry_pathname_utf8(e); if(cur_filename == NULL) { archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER, "Version entry without file name"); @@ -1586,6 +1590,25 @@ static int process_head_file(struct archive_read* a, struct rar5* rar, char name_utf8_buf[MAX_NAME_IN_BYTES]; const uint8_t* p; + enum FILE_FLAGS { + DIRECTORY = 0x0001, UTIME = 0x0002, CRC32 = 0x0004, + UNKNOWN_UNPACKED_SIZE = 0x0008, + }; + + enum FILE_ATTRS { + ATTR_READONLY = 0x1, ATTR_HIDDEN = 0x2, ATTR_SYSTEM = 0x4, + ATTR_DIRECTORY = 0x10, + }; + + enum COMP_INFO_FLAGS { + SOLID = 0x0040, + }; + + enum HOST_OS { + HOST_WINDOWS = 0, + HOST_UNIX = 1, + }; + archive_entry_clear(entry); /* Do not reset file context if we're switching archives. */ @@ -1615,20 +1638,6 @@ static int process_head_file(struct archive_read* a, struct rar5* rar, return ARCHIVE_FATAL; } - enum FILE_FLAGS { - DIRECTORY = 0x0001, UTIME = 0x0002, CRC32 = 0x0004, - UNKNOWN_UNPACKED_SIZE = 0x0008, - }; - - enum FILE_ATTRS { - ATTR_READONLY = 0x1, ATTR_HIDDEN = 0x2, ATTR_SYSTEM = 0x4, - ATTR_DIRECTORY = 0x10, - }; - - enum COMP_INFO_FLAGS { - SOLID = 0x0040, - }; - if(!read_var_sized(a, &file_flags, NULL)) return ARCHIVE_EOF; @@ -1725,11 +1734,6 @@ static int process_head_file(struct archive_read* a, struct rar5* rar, if(!read_var_sized(a, &host_os, NULL)) return ARCHIVE_EOF; - enum HOST_OS { - HOST_WINDOWS = 0, - HOST_UNIX = 1, - }; - if(host_os == HOST_WINDOWS) { /* Host OS is Windows */ @@ -1821,12 +1825,16 @@ static int process_head_file(struct archive_read* a, struct rar5* rar, int ret = process_head_file_extra(a, entry, rar, extra_data_size); - /* Sanity check. */ + /* + * TODO: rewrite or remove useless sanity check + * as extra_data_size is not passed as a pointer + * if(extra_data_size < 0) { archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER, "File extra data size is not zero"); return ARCHIVE_FATAL; } + */ if(ret != ARCHIVE_OK) return ret; @@ -1891,14 +1899,28 @@ static int process_head_service(struct archive_read* a, struct rar5* rar, static int process_head_main(struct archive_read* a, struct rar5* rar, struct archive_entry* entry, size_t block_flags) { - (void) entry; - int ret; size_t extra_data_size = 0; size_t extra_field_size = 0; size_t extra_field_id = 0; size_t archive_flags = 0; + enum MAIN_FLAGS { + VOLUME = 0x0001, /* multi-volume archive */ + VOLUME_NUMBER = 0x0002, /* volume number, first vol doesn't + * have it */ + SOLID = 0x0004, /* solid archive */ + PROTECT = 0x0008, /* contains Recovery info */ + LOCK = 0x0010, /* readonly flag, not used */ + }; + + enum MAIN_EXTRA { + // Just one attribute here. + LOCATOR = 0x01, + }; + + (void) entry; + if(block_flags & HFL_EXTRA_DATA) { if(!read_var_sized(a, &extra_data_size, NULL)) return ARCHIVE_EOF; @@ -1910,15 +1932,6 @@ static int process_head_main(struct archive_read* a, struct rar5* rar, return ARCHIVE_EOF; } - enum MAIN_FLAGS { - VOLUME = 0x0001, /* multi-volume archive */ - VOLUME_NUMBER = 0x0002, /* volume number, first vol doesn't - * have it */ - SOLID = 0x0004, /* solid archive */ - PROTECT = 0x0008, /* contains Recovery info */ - LOCK = 0x0010, /* readonly flag, not used */ - }; - rar->main.volume = (archive_flags & VOLUME) > 0; rar->main.solid = (archive_flags & SOLID) > 0; @@ -1970,11 +1983,6 @@ static int process_head_main(struct archive_read* a, struct rar5* rar, return ARCHIVE_FATAL; } - enum MAIN_EXTRA { - // Just one attribute here. - LOCATOR = 0x01, - }; - switch(extra_field_id) { case LOCATOR: ret = process_main_locator_extra_block(a, rar); @@ -2080,6 +2088,8 @@ static int scan_for_signature(struct archive_read* a); static int process_base_block(struct archive_read* a, struct archive_entry* entry) { + const size_t SMALLEST_RAR5_BLOCK_SIZE = 3; + struct rar5* rar = get_context(a); uint32_t hdr_crc, computed_crc; size_t raw_hdr_size = 0, hdr_size_len, hdr_size; @@ -2088,6 +2098,12 @@ static int process_base_block(struct archive_read* a, const uint8_t* p; int ret; + enum HEADER_TYPE { + HEAD_MARK = 0x00, HEAD_MAIN = 0x01, HEAD_FILE = 0x02, + HEAD_SERVICE = 0x03, HEAD_CRYPT = 0x04, HEAD_ENDARC = 0x05, + HEAD_UNKNOWN = 0xff, + }; + /* Skip any unprocessed data for this file. */ ret = skip_unprocessed_bytes(a); if(ret != ARCHIVE_OK) @@ -2103,15 +2119,26 @@ static int process_base_block(struct archive_read* a, return ARCHIVE_EOF; } + hdr_size = raw_hdr_size + hdr_size_len; + /* Sanity check, maximum header size for RAR5 is 2MB. */ - if(raw_hdr_size > (2 * 1024 * 1024)) { + if(hdr_size > (2 * 1024 * 1024)) { archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, "Base block header is too large"); return ARCHIVE_FATAL; } - hdr_size = raw_hdr_size + hdr_size_len; + /* Additional sanity checks to weed out invalid files. */ + if(raw_hdr_size == 0 || hdr_size_len == 0 || + hdr_size < SMALLEST_RAR5_BLOCK_SIZE) + { + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Too small block encountered (%zu bytes)", + raw_hdr_size); + + return ARCHIVE_FATAL; + } /* Read the whole header data into memory, maximum memory use here is * 2MB. */ @@ -2146,12 +2173,6 @@ static int process_base_block(struct archive_read* a, rar->main.endarc = 0; /* Those are possible header ids in RARv5. */ - enum HEADER_TYPE { - HEAD_MARK = 0x00, HEAD_MAIN = 0x01, HEAD_FILE = 0x02, - HEAD_SERVICE = 0x03, HEAD_CRYPT = 0x04, HEAD_ENDARC = 0x05, - HEAD_UNKNOWN = 0xff, - }; - switch(header_id) { case HEAD_MAIN: ret = process_head_main(a, rar, entry, header_flags); @@ -2264,7 +2285,7 @@ static int rar5_read_header(struct archive_read *a, } if(rar->skipped_magic == 0) { - if(ARCHIVE_OK != consume(a, rar5_signature_size)) { + if(ARCHIVE_OK != consume(a, sizeof(rar5_signature_xor))) { return ARCHIVE_EOF; } @@ -2536,12 +2557,10 @@ static int parse_tables(struct archive_read* a, struct rar5* rar, /* 0..15: store directly */ table[i] = (uint8_t) num; i++; - continue; - } - - if(num < 18) { + } else if(num < 18) { /* 16..17: repeat previous code */ uint16_t n; + if(ARCHIVE_OK != read_bits_16(rar, p, &n)) return ARCHIVE_EOF; @@ -2567,27 +2586,26 @@ static int parse_tables(struct archive_read* a, struct rar5* rar, "huffman tables"); return ARCHIVE_FATAL; } - - continue; - } - - /* other codes: fill with zeroes `n` times */ - uint16_t n; - if(ARCHIVE_OK != read_bits_16(rar, p, &n)) - return ARCHIVE_EOF; - - if(num == 18) { - n >>= 13; - n += 3; - skip_bits(rar, 3); } else { - n >>= 9; - n += 11; - skip_bits(rar, 7); - } + /* other codes: fill with zeroes `n` times */ + uint16_t n; - while(n-- > 0 && i < HUFF_TABLE_SIZE) - table[i++] = 0; + if(ARCHIVE_OK != read_bits_16(rar, p, &n)) + return ARCHIVE_EOF; + + if(num == 18) { + n >>= 13; + n += 3; + skip_bits(rar, 3); + } else { + n >>= 9; + n += 11; + skip_bits(rar, 7); + } + + while(n-- > 0 && i < HUFF_TABLE_SIZE) + table[i++] = 0; + } } ret = create_decode_tables(&table[idx], &rar->cstate.ld, HUFF_NC); @@ -2632,6 +2650,7 @@ static int parse_tables(struct archive_read* a, struct rar5* rar, static int parse_block_header(struct archive_read* a, const uint8_t* p, ssize_t* block_size, struct compressed_block_header* hdr) { + uint8_t calculated_cksum; memcpy(hdr, p, sizeof(struct compressed_block_header)); if(bf_byte_count(hdr) > 2) { @@ -2670,7 +2689,7 @@ static int parse_block_header(struct archive_read* a, const uint8_t* p, /* Verify the block header checksum. 0x5A is a magic value and is * always * constant. */ - uint8_t calculated_cksum = 0x5A + calculated_cksum = 0x5A ^ (uint8_t) hdr->block_flags_u8 ^ (uint8_t) *block_size ^ (uint8_t) (*block_size >> 8) @@ -2744,6 +2763,7 @@ static int is_valid_filter_block_start(struct rar5* rar, static int parse_filter(struct archive_read* ar, const uint8_t* p) { uint32_t block_start, block_length; uint16_t filter_type; + struct filter_info* filt = NULL; struct rar5* rar = get_context(ar); /* Read the parameters from the input stream. */ @@ -2774,7 +2794,7 @@ static int parse_filter(struct archive_read* ar, const uint8_t* p) { } /* Allocate a new filter. */ - struct filter_info* filt = add_new_filter(rar); + filt = add_new_filter(rar); if(filt == NULL) { archive_set_error(&ar->archive, ENOMEM, "Can't allocate memory for a filter descriptor."); @@ -3043,7 +3063,8 @@ static int do_uncompress_block(struct archive_read* a, const uint8_t* p) { } continue; - } else if(num < 262) { + } else { + /* num < 262 */ const int idx = num - 258; const int dist = dist_cache_touch(rar, idx); @@ -3079,6 +3100,7 @@ static int scan_for_signature(struct archive_read* a) { const uint8_t* p; const int chunk_size = 512; ssize_t i; + char signature[sizeof(rar5_signature_xor)]; /* If we're here, it means we're on an 'unknown territory' data. * There's no indication what kind of data we're reading here. @@ -3092,19 +3114,23 @@ static int scan_for_signature(struct archive_read* a) { * end of the file? If so, it would be a better approach than the * current implementation of this function. */ + rar5_signature(signature); + while(1) { if(!read_ahead(a, chunk_size, &p)) return ARCHIVE_EOF; - for(i = 0; i < chunk_size - rar5_signature_size; i++) { - if(memcmp(&p[i], rar5_signature, - rar5_signature_size) == 0) { + for(i = 0; i < chunk_size - (int)sizeof(rar5_signature_xor); + i++) { + if(memcmp(&p[i], signature, + sizeof(rar5_signature_xor)) == 0) { /* Consume the number of bytes we've used to * search for the signature, as well as the * number of bytes used by the signature * itself. After this we should be standing * on a valid base block header. */ - (void) consume(a, i + rar5_signature_size); + (void) consume(a, + i + sizeof(rar5_signature_xor)); return ARCHIVE_OK; } } @@ -3314,6 +3340,8 @@ static int process_block(struct archive_read* a) { if(rar->cstate.block_parsing_finished) { ssize_t block_size; + ssize_t to_skip; + ssize_t cur_block_size; /* The header size won't be bigger than 6 bytes. */ if(!read_ahead(a, 6, &p)) { @@ -3337,7 +3365,7 @@ static int process_block(struct archive_read* a) { /* Skip block header. Next data is huffman tables, * if present. */ - ssize_t to_skip = sizeof(struct compressed_block_header) + + to_skip = sizeof(struct compressed_block_header) + bf_byte_count(&rar->last_block_hdr) + 1; if(ARCHIVE_OK != consume(a, to_skip)) @@ -3351,7 +3379,7 @@ static int process_block(struct archive_read* a) { * bigger than the actual data stored in this file. Remaining * part of the data will be in another file. */ - ssize_t cur_block_size = + cur_block_size = rar5_min(rar->file.bytes_remaining, block_size); if(block_size > rar->file.bytes_remaining) { @@ -3679,6 +3707,7 @@ static int uncompress_file(struct archive_read* a) { static int do_unstore_file(struct archive_read* a, struct rar5* rar, const void** buf, size_t* size, int64_t* offset) { + size_t to_read; const uint8_t* p; if(rar->file.bytes_remaining == 0 && rar->main.volume > 0 && @@ -3697,7 +3726,7 @@ static int do_unstore_file(struct archive_read* a, } } - size_t to_read = rar5_min(rar->file.bytes_remaining, 64 * 1024); + to_read = rar5_min(rar->file.bytes_remaining, 64 * 1024); if(to_read == 0) { return ARCHIVE_EOF; } @@ -3866,6 +3895,18 @@ static int verify_global_checksums(struct archive_read* a) { return verify_checksums(a); } +/* + * Decryption function for the magic signature pattern. Check the comment near + * the `rar5_signature_xor` symbol to read the rationale behind this. + */ +static void rar5_signature(char *buf) { + size_t i; + + for(i = 0; i < sizeof(rar5_signature_xor); i++) { + buf[i] = rar5_signature_xor[i] ^ 0xA1; + } +} + static int rar5_read_data(struct archive_read *a, const void **buff, size_t *size, int64_t *offset) { int ret; @@ -4012,19 +4053,8 @@ static int rar5_has_encrypted_entries(struct archive_read *_a) { } static int rar5_init(struct rar5* rar) { - ssize_t i; - memset(rar, 0, sizeof(struct rar5)); - /* Decrypt the magic signature pattern. Check the comment near the - * `rar5_signature` symbol to read the rationale behind this. */ - - if(rar5_signature[0] == 243) { - for(i = 0; i < rar5_signature_size; i++) { - rar5_signature[i] ^= 0xA1; - } - } - if(CDE_OK != cdeque_init(&rar->cstate.filters, 8192)) return ARCHIVE_FATAL; diff --git a/libarchive/archive_read_support_format_warc.c b/libarchive/archive_read_support_format_warc.c index c1c54450c39..72977b8e073 100644 --- a/libarchive/archive_read_support_format_warc.c +++ b/libarchive/archive_read_support_format_warc.c @@ -626,7 +626,8 @@ _warc_rdver(const char *buf, size_t bsz) if (ver >= 1200U) { if (memcmp(c, "\r\n", 2U) != 0) ver = 0U; - } else if (ver < 1200U) { + } else { + /* ver < 1200U */ if (*c != ' ' && *c != '\t') ver = 0U; } diff --git a/libarchive/archive_read_support_format_xar.c b/libarchive/archive_read_support_format_xar.c index 34253a52fb7..7f8be398c7a 100644 --- a/libarchive/archive_read_support_format_xar.c +++ b/libarchive/archive_read_support_format_xar.c @@ -2613,15 +2613,14 @@ strappend_base64(struct xar *xar, while (l > 0) { int n = 0; - if (l > 0) { - if (base64[b[0]] < 0 || base64[b[1]] < 0) - break; - n = base64[*b++] << 18; - n |= base64[*b++] << 12; - *out++ = n >> 16; - len++; - l -= 2; - } + if (base64[b[0]] < 0 || base64[b[1]] < 0) + break; + n = base64[*b++] << 18; + n |= base64[*b++] << 12; + *out++ = n >> 16; + len++; + l -= 2; + if (l > 0) { if (base64[*b] < 0) break; diff --git a/libarchive/archive_string.c b/libarchive/archive_string.c index 399299ea631..c77dcf52c25 100644 --- a/libarchive/archive_string.c +++ b/libarchive/archive_string.c @@ -744,7 +744,8 @@ archive_string_append_from_wcs_in_codepage(struct archive_string *as, else dp = &defchar_used; count = WideCharToMultiByte(to_cp, 0, ws, wslen, - as->s + as->length, (int)as->buffer_length-1, NULL, dp); + as->s + as->length, + (int)as->buffer_length - as->length - 1, NULL, dp); if (count == 0 && GetLastError() == ERROR_INSUFFICIENT_BUFFER) { /* Expand the MBS buffer and retry. */ diff --git a/libarchive/archive_string.h b/libarchive/archive_string.h index 56dfbb28f28..27e1ad69c56 100644 --- a/libarchive/archive_string.h +++ b/libarchive/archive_string.h @@ -26,15 +26,15 @@ * */ +#ifndef ARCHIVE_STRING_H_INCLUDED +#define ARCHIVE_STRING_H_INCLUDED + #ifndef __LIBARCHIVE_BUILD #ifndef __LIBARCHIVE_TEST #error This header is only to be used internally to libarchive. #endif #endif -#ifndef ARCHIVE_STRING_H_INCLUDED -#define ARCHIVE_STRING_H_INCLUDED - #include #ifdef HAVE_STDLIB_H #include /* required for wchar_t on some systems */ diff --git a/libarchive/archive_string_composition.h b/libarchive/archive_string_composition.h index 8902ac1f7f3..d0ac340961a 100644 --- a/libarchive/archive_string_composition.h +++ b/libarchive/archive_string_composition.h @@ -34,13 +34,13 @@ * See also http://unicode.org/report/tr15/ */ +#ifndef ARCHIVE_STRING_COMPOSITION_H_INCLUDED +#define ARCHIVE_STRING_COMPOSITION_H_INCLUDED + #ifndef __LIBARCHIVE_BUILD #error This header is only to be used internally to libarchive. #endif -#ifndef ARCHIVE_STRING_COMPOSITION_H_INCLUDED -#define ARCHIVE_STRING_COMPOSITION_H_INCLUDED - struct unicode_composition_table { uint32_t cp1; uint32_t cp2; diff --git a/libarchive/archive_util.c b/libarchive/archive_util.c index 3399c0b5f49..288a44280dc 100644 --- a/libarchive/archive_util.c +++ b/libarchive/archive_util.c @@ -218,8 +218,8 @@ __archive_errx(int retvalue, const char *msg) * Also Windows version of mktemp family including _mktemp_s * are not secure. */ -int -__archive_mktemp(const char *tmpdir) +static int +__archive_mktempx(const char *tmpdir, wchar_t *template) { static const wchar_t prefix[] = L"libarchive_"; static const wchar_t suffix[] = L"XXXXXXXXXX"; @@ -243,64 +243,76 @@ __archive_mktemp(const char *tmpdir) hProv = (HCRYPTPROV)NULL; fd = -1; ws = NULL; - archive_string_init(&temp_name); - /* Get a temporary directory. */ - if (tmpdir == NULL) { - size_t l; - wchar_t *tmp; + if (template == NULL) { + archive_string_init(&temp_name); - l = GetTempPathW(0, NULL); - if (l == 0) { - la_dosmaperr(GetLastError()); - goto exit_tmpfile; - } - tmp = malloc(l*sizeof(wchar_t)); - if (tmp == NULL) { - errno = ENOMEM; - goto exit_tmpfile; - } - GetTempPathW((DWORD)l, tmp); - archive_wstrcpy(&temp_name, tmp); - free(tmp); - } else { - if (archive_wstring_append_from_mbs(&temp_name, tmpdir, - strlen(tmpdir)) < 0) - goto exit_tmpfile; - if (temp_name.s[temp_name.length-1] != L'/') - archive_wstrappend_wchar(&temp_name, L'/'); - } + /* Get a temporary directory. */ + if (tmpdir == NULL) { + size_t l; + wchar_t *tmp; - /* Check if temp_name is a directory. */ - attr = GetFileAttributesW(temp_name.s); - if (attr == (DWORD)-1) { - if (GetLastError() != ERROR_FILE_NOT_FOUND) { - la_dosmaperr(GetLastError()); - goto exit_tmpfile; + l = GetTempPathW(0, NULL); + if (l == 0) { + la_dosmaperr(GetLastError()); + goto exit_tmpfile; + } + tmp = malloc(l*sizeof(wchar_t)); + if (tmp == NULL) { + errno = ENOMEM; + goto exit_tmpfile; + } + GetTempPathW((DWORD)l, tmp); + archive_wstrcpy(&temp_name, tmp); + free(tmp); + } else { + if (archive_wstring_append_from_mbs(&temp_name, tmpdir, + strlen(tmpdir)) < 0) + goto exit_tmpfile; + if (temp_name.s[temp_name.length-1] != L'/') + archive_wstrappend_wchar(&temp_name, L'/'); } - ws = __la_win_permissive_name_w(temp_name.s); - if (ws == NULL) { - errno = EINVAL; - goto exit_tmpfile; - } - attr = GetFileAttributesW(ws); + + /* Check if temp_name is a directory. */ + attr = GetFileAttributesW(temp_name.s); if (attr == (DWORD)-1) { - la_dosmaperr(GetLastError()); + if (GetLastError() != ERROR_FILE_NOT_FOUND) { + la_dosmaperr(GetLastError()); + goto exit_tmpfile; + } + ws = __la_win_permissive_name_w(temp_name.s); + if (ws == NULL) { + errno = EINVAL; + goto exit_tmpfile; + } + attr = GetFileAttributesW(ws); + if (attr == (DWORD)-1) { + la_dosmaperr(GetLastError()); + goto exit_tmpfile; + } + } + if (!(attr & FILE_ATTRIBUTE_DIRECTORY)) { + errno = ENOTDIR; goto exit_tmpfile; } - } - if (!(attr & FILE_ATTRIBUTE_DIRECTORY)) { - errno = ENOTDIR; - goto exit_tmpfile; - } - /* - * Create a temporary file. - */ - archive_wstrcat(&temp_name, prefix); - archive_wstrcat(&temp_name, suffix); - ep = temp_name.s + archive_strlen(&temp_name); - xp = ep - wcslen(suffix); + /* + * Create a temporary file. + */ + archive_wstrcat(&temp_name, prefix); + archive_wstrcat(&temp_name, suffix); + ep = temp_name.s + archive_strlen(&temp_name); + xp = ep - wcslen(suffix); + template = temp_name.s; + } else { + xp = wcschr(template, L'X'); + if (xp == NULL) /* No X, programming error */ + abort(); + for (ep = xp; *ep == L'X'; ep++) + continue; + if (*ep) /* X followed by non X, programming error */ + abort(); + } if (!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) { @@ -323,20 +335,24 @@ __archive_mktemp(const char *tmpdir) *p = num[((DWORD)*p) % (sizeof(num)/sizeof(num[0]))]; free(ws); - ws = __la_win_permissive_name_w(temp_name.s); + ws = __la_win_permissive_name_w(template); if (ws == NULL) { errno = EINVAL; goto exit_tmpfile; } - /* Specifies FILE_FLAG_DELETE_ON_CLOSE flag is to - * delete this temporary file immediately when this - * file closed. */ + if (template == temp_name.s) { + attr = FILE_ATTRIBUTE_TEMPORARY | + FILE_FLAG_DELETE_ON_CLOSE; + } else { + /* mkstemp */ + attr = FILE_ATTRIBUTE_NORMAL; + } h = CreateFileW(ws, GENERIC_READ | GENERIC_WRITE | DELETE, 0,/* Not share */ NULL, CREATE_NEW,/* Create a new file only */ - FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSE, + attr, NULL); if (h == INVALID_HANDLE_VALUE) { /* The same file already exists. retry with @@ -358,10 +374,23 @@ exit_tmpfile: if (hProv != (HCRYPTPROV)NULL) CryptReleaseContext(hProv, 0); free(ws); - archive_wstring_free(&temp_name); + if (template == temp_name.s) + archive_wstring_free(&temp_name); return (fd); } +int +__archive_mktemp(const char *tmpdir) +{ + return __archive_mktempx(tmpdir, NULL); +} + +int +__archive_mkstemp(wchar_t *template) +{ + return __archive_mktempx(NULL, template); +} + #else static int @@ -414,14 +443,24 @@ exit_tmpfile: return (fd); } -#else +int +__archive_mkstemp(char *template) +{ + int fd = -1; + fd = mkstemp(template); + if (fd >= 0) + __archive_ensure_cloexec_flag(fd); + return (fd); +} + +#else /* !HAVE_MKSTEMP */ /* * We use a private routine. */ -int -__archive_mktemp(const char *tmpdir) +static int +__archive_mktempx(const char *tmpdir, char *template) { static const char num[] = { '0', '1', '2', '3', '4', '5', '6', '7', @@ -439,26 +478,37 @@ __archive_mktemp(const char *tmpdir) char *tp, *ep; fd = -1; - archive_string_init(&temp_name); - if (tmpdir == NULL) { - if (get_tempdir(&temp_name) != ARCHIVE_OK) + if (template == NULL) { + archive_string_init(&temp_name); + if (tmpdir == NULL) { + if (get_tempdir(&temp_name) != ARCHIVE_OK) + goto exit_tmpfile; + } else + archive_strcpy(&temp_name, tmpdir); + if (temp_name.s[temp_name.length-1] == '/') { + temp_name.s[temp_name.length-1] = '\0'; + temp_name.length --; + } + if (la_stat(temp_name.s, &st) < 0) goto exit_tmpfile; - } else - archive_strcpy(&temp_name, tmpdir); - if (temp_name.s[temp_name.length-1] == '/') { - temp_name.s[temp_name.length-1] = '\0'; - temp_name.length --; + if (!S_ISDIR(st.st_mode)) { + errno = ENOTDIR; + goto exit_tmpfile; + } + archive_strcat(&temp_name, "/libarchive_"); + tp = temp_name.s + archive_strlen(&temp_name); + archive_strcat(&temp_name, "XXXXXXXXXX"); + ep = temp_name.s + archive_strlen(&temp_name); + template = temp_name.s; + } else { + tp = strchr(template, 'X'); + if (tp == NULL) /* No X, programming error */ + abort(); + for (ep = tp; *ep == 'X'; ep++) + continue; + if (*ep) /* X followed by non X, programming error */ + abort(); } - if (la_stat(temp_name.s, &st) < 0) - goto exit_tmpfile; - if (!S_ISDIR(st.st_mode)) { - errno = ENOTDIR; - goto exit_tmpfile; - } - archive_strcat(&temp_name, "/libarchive_"); - tp = temp_name.s + archive_strlen(&temp_name); - archive_strcat(&temp_name, "XXXXXXXXXX"); - ep = temp_name.s + archive_strlen(&temp_name); do { char *p; @@ -469,19 +519,33 @@ __archive_mktemp(const char *tmpdir) int d = *((unsigned char *)p) % sizeof(num); *p++ = num[d]; } - fd = open(temp_name.s, O_CREAT | O_EXCL | O_RDWR | O_CLOEXEC, + fd = open(template, O_CREAT | O_EXCL | O_RDWR | O_CLOEXEC, 0600); } while (fd < 0 && errno == EEXIST); if (fd < 0) goto exit_tmpfile; __archive_ensure_cloexec_flag(fd); - unlink(temp_name.s); + if (template == temp_name.s) + unlink(temp_name.s); exit_tmpfile: - archive_string_free(&temp_name); + if (template == temp_name.s) + archive_string_free(&temp_name); return (fd); } -#endif /* HAVE_MKSTEMP */ +int +__archive_mktemp(const char *tmpdir) +{ + return __archive_mktempx(tmpdir, NULL); +} + +int +__archive_mkstemp(char *template) +{ + return __archive_mktempx(NULL, template); +} + +#endif /* !HAVE_MKSTEMP */ #endif /* !_WIN32 || __CYGWIN__ */ /* diff --git a/libarchive/archive_windows.h b/libarchive/archive_windows.h index 87d8c891bb0..47b7cb8e379 100644 --- a/libarchive/archive_windows.h +++ b/libarchive/archive_windows.h @@ -27,10 +27,6 @@ * $FreeBSD$ */ -#ifndef __LIBARCHIVE_BUILD -#error This header is only to be used internally to libarchive. -#endif - /* * TODO: A lot of stuff in here isn't actually used by libarchive and * can be trimmed out. Note that this file is used by libarchive and @@ -48,6 +44,10 @@ #ifndef LIBARCHIVE_ARCHIVE_WINDOWS_H_INCLUDED #define LIBARCHIVE_ARCHIVE_WINDOWS_H_INCLUDED +#ifndef __LIBARCHIVE_BUILD +#error This header is only to be used internally to libarchive. +#endif + /* Start of configuration for native Win32 */ #ifndef MINGW_HAS_SECURE_API #define MINGW_HAS_SECURE_API 1 diff --git a/libarchive/archive_write_disk.3 b/libarchive/archive_write_disk.3 index ff8e1a36a75..2fa016e4547 100644 --- a/libarchive/archive_write_disk.3 +++ b/libarchive/archive_write_disk.3 @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd April 3, 2017 +.Dd January 19, 2020 .Dt ARCHIVE_WRITE_DISK 3 .Os .Sh NAME @@ -139,6 +139,11 @@ is not specified, then SUID and SGID bits will only be restored if the default user and group IDs of newly-created objects on disk happen to match those specified in the archive entry. By default, only basic permissions are restored, and umask is obeyed. +.It Cm ARCHIVE_EXTRACT_SAFE_WRITES +Extract files atomically, by first creating a unique temporary file and then +renaming it to its required destination name. +This avoids a race where an application might see a partial file (or no +file) during extraction. .It Cm ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS Refuse to extract an absolute path. The default is to not refuse such paths. diff --git a/libarchive/archive_write_disk_posix.c b/libarchive/archive_write_disk_posix.c index df4b02f5efa..cc53a3d318e 100644 --- a/libarchive/archive_write_disk_posix.c +++ b/libarchive/archive_write_disk_posix.c @@ -253,6 +253,8 @@ struct archive_write_disk { struct archive_entry *entry; /* Entry being extracted. */ char *name; /* Name of entry, possibly edited. */ struct archive_string _name_data; /* backing store for 'name' */ + char *tmpname; /* Temporary name * */ + struct archive_string _tmpname_data; /* backing store for 'tmpname' */ /* Tasks remaining for this object. */ int todo; /* Tasks deferred until end-of-archive. */ @@ -354,6 +356,7 @@ struct archive_write_disk { static int la_opendirat(int, const char *); +static int la_mktemp(struct archive_write_disk *); static void fsobj_error(int *, struct archive_string *, int, const char *, const char *); static int check_symlinks_fsobj(char *, int *, struct archive_string *, @@ -406,6 +409,30 @@ static ssize_t _archive_write_disk_data(struct archive *, const void *, static ssize_t _archive_write_disk_data_block(struct archive *, const void *, size_t, int64_t); +static int +la_mktemp(struct archive_write_disk *a) +{ + int oerrno, fd; + mode_t mode; + + archive_string_empty(&a->_tmpname_data); + archive_string_sprintf(&a->_tmpname_data, "%s.XXXXXX", a->name); + a->tmpname = a->_tmpname_data.s; + + fd = __archive_mkstemp(a->tmpname); + if (fd == -1) + return -1; + + mode = a->mode & 0777 & ~a->user_umask; + if (fchmod(fd, mode) == -1) { + oerrno = errno; + close(fd); + errno = oerrno; + return -1; + } + return fd; +} + static int la_opendirat(int fd, const char *path) { const int flags = O_CLOEXEC @@ -1826,6 +1853,14 @@ finish_metadata: if (a->fd >= 0) { close(a->fd); a->fd = -1; + if (a->tmpname) { + if (rename(a->tmpname, a->name) == -1) { + archive_set_error(&a->archive, errno, + "rename failed"); + ret = ARCHIVE_FATAL; + } + a->tmpname = NULL; + } } /* If there's an entry, we can release it now. */ archive_entry_free(a->entry); @@ -2103,17 +2138,28 @@ restore_entry(struct archive_write_disk *a) } if (!S_ISDIR(a->st.st_mode)) { - /* A non-dir is in the way, unlink it. */ if (a->flags & ARCHIVE_EXTRACT_CLEAR_NOCHANGE_FFLAGS) (void)clear_nochange_fflags(a); - if (unlink(a->name) != 0) { - archive_set_error(&a->archive, errno, - "Can't unlink already-existing object"); - return (ARCHIVE_FAILED); + + if ((a->flags & ARCHIVE_EXTRACT_SAFE_WRITES) && + S_ISREG(a->st.st_mode)) { + /* Use a temporary file to extract */ + if ((a->fd = la_mktemp(a)) == -1) + return ARCHIVE_FAILED; + a->pst = NULL; + en = 0; + } else { + /* A non-dir is in the way, unlink it. */ + if (unlink(a->name) != 0) { + archive_set_error(&a->archive, errno, + "Can't unlink already-existing " + "object"); + return (ARCHIVE_FAILED); + } + a->pst = NULL; + /* Try again. */ + en = create_filesystem_object(a); } - a->pst = NULL; - /* Try again. */ - en = create_filesystem_object(a); } else if (!S_ISDIR(a->mode)) { /* A dir is in the way of a non-dir, rmdir it. */ if (a->flags & ARCHIVE_EXTRACT_CLEAR_NOCHANGE_FFLAGS) @@ -2215,6 +2261,13 @@ create_filesystem_object(struct archive_write_disk *a) } free(linkname_copy); archive_string_free(&error_string); + /* + * Unlinking and linking here is really not atomic, + * but doing it right, would require us to construct + * an mktemplink() function, and then use rename(2). + */ + if (a->flags & ARCHIVE_EXTRACT_SAFE_WRITES) + unlink(a->name); r = link(linkname, a->name) ? errno : 0; /* * New cpio and pax formats allow hardlink entries @@ -2253,6 +2306,13 @@ create_filesystem_object(struct archive_write_disk *a) linkname = archive_entry_symlink(a->entry); if (linkname != NULL) { #if HAVE_SYMLINK + /* + * Unlinking and linking here is really not atomic, + * but doing it right, would require us to construct + * an mktempsymlink() function, and then use rename(2). + */ + if (a->flags & ARCHIVE_EXTRACT_SAFE_WRITES) + unlink(a->name); return symlink(linkname, a->name) ? errno : 0; #else return (EPERM); @@ -2288,6 +2348,7 @@ create_filesystem_object(struct archive_write_disk *a) /* POSIX requires that we fall through here. */ /* FALLTHROUGH */ case AE_IFREG: + a->tmpname = NULL; a->fd = open(a->name, O_WRONLY | O_CREAT | O_EXCL | O_BINARY | O_CLOEXEC, mode); __archive_ensure_cloexec_flag(a->fd); @@ -2449,6 +2510,7 @@ _archive_write_disk_free(struct archive *_a) archive_write_disk_set_user_lookup(&a->archive, NULL, NULL, NULL); archive_entry_free(a->entry); archive_string_free(&a->_name_data); + archive_string_free(&a->_tmpname_data); archive_string_free(&a->archive.error_string); archive_string_free(&a->path_safe); a->archive.magic = 0; diff --git a/libarchive/archive_write_disk_private.h b/libarchive/archive_write_disk_private.h index b655dea2b65..557d7e2bf34 100644 --- a/libarchive/archive_write_disk_private.h +++ b/libarchive/archive_write_disk_private.h @@ -26,13 +26,13 @@ * $FreeBSD: head/lib/libarchive/archive_write_disk_private.h 201086 2009-12-28 02:17:53Z kientzle $ */ +#ifndef ARCHIVE_WRITE_DISK_PRIVATE_H_INCLUDED +#define ARCHIVE_WRITE_DISK_PRIVATE_H_INCLUDED + #ifndef __LIBARCHIVE_BUILD #error This header is only to be used internally to libarchive. #endif -#ifndef ARCHIVE_WRITE_DISK_PRIVATE_H_INCLUDED -#define ARCHIVE_WRITE_DISK_PRIVATE_H_INCLUDED - #include "archive_platform_acl.h" #include "archive_acl_private.h" #include "archive_entry.h" diff --git a/libarchive/archive_write_disk_windows.c b/libarchive/archive_write_disk_windows.c index 8b947304bd6..77e36c4a621 100644 --- a/libarchive/archive_write_disk_windows.c +++ b/libarchive/archive_write_disk_windows.c @@ -165,6 +165,8 @@ struct archive_write_disk { struct archive_entry *entry; /* Entry being extracted. */ wchar_t *name; /* Name of entry, possibly edited. */ struct archive_wstring _name_data; /* backing store for 'name' */ + wchar_t *tmpname; /* Temporary name */ + struct archive_wstring _tmpname_data; /* backing store for 'tmpname' */ /* Tasks remaining for this object. */ int todo; /* Tasks deferred until end-of-archive. */ @@ -215,6 +217,7 @@ static int cleanup_pathname(struct archive_write_disk *); static int create_dir(struct archive_write_disk *, wchar_t *); static int create_parent_dir(struct archive_write_disk *, wchar_t *); static int la_chmod(const wchar_t *, mode_t); +static int la_mktemp(struct archive_write_disk *); static int older(BY_HANDLE_FILE_INFORMATION *, struct archive_entry *); static int permissive_name_w(struct archive_write_disk *); static int restore_entry(struct archive_write_disk *); @@ -534,6 +537,28 @@ exit_chmode: return (ret); } +static int +la_mktemp(struct archive_write_disk *a) +{ + int fd; + mode_t mode; + + archive_wstring_empty(&(a->_tmpname_data)); + archive_wstrcpy(&(a->_tmpname_data), a->name); + archive_wstrcat(&(a->_tmpname_data), L".XXXXXX"); + a->tmpname = a->_tmpname_data.s; + + fd = __archive_mkstemp(a->tmpname); + + mode = a->mode & 0777 & ~a->user_umask; + if (la_chmod(a->tmpname, mode) == -1) { + la_dosmaperr(GetLastError()); + _close(fd); + return -1; + } + return (fd); +} + static void * la_GetFunctionKernel32(const char *name) { @@ -1252,6 +1277,16 @@ _archive_write_disk_finish_entry(struct archive *_a) if (a->fh != INVALID_HANDLE_VALUE) { CloseHandle(a->fh); a->fh = INVALID_HANDLE_VALUE; + if (a->tmpname) { + /* Windows does not support atomic rename */ + disk_unlink(a->name); + if (_wrename(a->tmpname, a->name) != 0) { + archive_set_error(&a->archive, errno, + "rename failed"); + ret = ARCHIVE_FATAL; + } + a->tmpname = NULL; + } } /* If there's an entry, we can release it now. */ archive_entry_free(a->entry); @@ -1530,26 +1565,46 @@ restore_entry(struct archive_write_disk *a) } if (!S_ISDIR(st_mode)) { - /* Edge case: a directory symlink pointing to a file */ if (a->flags & ARCHIVE_EXTRACT_CLEAR_NOCHANGE_FFLAGS) { (void)clear_nochange_fflags(a); } - if (dirlnk) { - if (disk_rmdir(a->name) != 0) { - archive_set_error(&a->archive, errno, - "Can't unlink directory symlink"); + if ((a->flags & ARCHIVE_EXTRACT_SAFE_WRITES) && + S_ISREG(st_mode)) { + int fd = la_mktemp(a); + + if (fd == -1) return (ARCHIVE_FAILED); + a->fh = (HANDLE)_get_osfhandle(fd); + if (a->fh == INVALID_HANDLE_VALUE) + return (ARCHIVE_FAILED); + + a->pst = NULL; + en = 0; + } else { + if (dirlnk) { + /* Edge case: dir symlink pointing + * to a file */ + if (disk_rmdir(a->name) != 0) { + archive_set_error(&a->archive, + errno, "Can't unlink " + "directory symlink"); + return (ARCHIVE_FAILED); + } + } else { + if (disk_unlink(a->name) != 0) { + /* A non-dir is in the way, + * unlink it. */ + archive_set_error(&a->archive, + errno, "Can't unlink " + "already-existing object"); + return (ARCHIVE_FAILED); + } } - } else if (disk_unlink(a->name) != 0) { - /* A non-dir is in the way, unlink it. */ - archive_set_error(&a->archive, errno, - "Can't unlink already-existing object"); - return (ARCHIVE_FAILED); + a->pst = NULL; + /* Try again. */ + en = create_filesystem_object(a); } - a->pst = NULL; - /* Try again. */ - en = create_filesystem_object(a); } else if (!S_ISDIR(a->mode)) { /* A dir is in the way of a non-dir, rmdir it. */ if (a->flags & ARCHIVE_EXTRACT_CLEAR_NOCHANGE_FFLAGS) @@ -1601,6 +1656,7 @@ create_filesystem_object(struct archive_write_disk *a) wchar_t *fullname; mode_t final_mode, mode; int r; + DWORD attrs = 0; /* We identify hard/symlinks according to the link names. */ /* Since link(2) and symlink(2) don't handle modes, we're done here. */ @@ -1614,6 +1670,20 @@ create_filesystem_object(struct archive_write_disk *a) errno = EINVAL; r = -1; } else { + /* + * Unlinking and linking here is really not atomic, + * but doing it right, would require us to construct + * an mktemplink() function, and then use _wrename(). + */ + if (a->flags & ARCHIVE_EXTRACT_SAFE_WRITES) { + attrs = GetFileAttributesW(namefull); + if (attrs != INVALID_FILE_ATTRIBUTES) { + if (attrs & FILE_ATTRIBUTE_DIRECTORY) + disk_rmdir(namefull); + else + disk_unlink(namefull); + } + } r = la_CreateHardLinkW(namefull, linkfull); if (r == 0) { la_dosmaperr(GetLastError()); @@ -1650,6 +1720,18 @@ create_filesystem_object(struct archive_write_disk *a) } linkname = archive_entry_symlink_w(a->entry); if (linkname != NULL) { + /* + * Unlinking and linking here is really not atomic, + * but doing it right, would require us to construct + * an mktemplink() function, and then use _wrename(). + */ + attrs = GetFileAttributesW(a->name); + if (attrs != INVALID_FILE_ATTRIBUTES) { + if (attrs & FILE_ATTRIBUTE_DIRECTORY) + disk_rmdir(a->name); + else + disk_unlink(a->name); + } #if HAVE_SYMLINK return symlink(linkname, a->name) ? errno : 0; #else @@ -1686,6 +1768,7 @@ create_filesystem_object(struct archive_write_disk *a) /* POSIX requires that we fall through here. */ /* FALLTHROUGH */ case AE_IFREG: + a->tmpname = NULL; fullname = a->name; /* O_WRONLY | O_CREAT | O_EXCL */ a->fh = CreateFileW(fullname, GENERIC_WRITE, 0, NULL, @@ -1842,6 +1925,7 @@ _archive_write_disk_free(struct archive *_a) archive_write_disk_set_user_lookup(&a->archive, NULL, NULL, NULL); archive_entry_free(a->entry); archive_wstring_free(&a->_name_data); + archive_wstring_free(&a->_tmpname_data); archive_string_free(&a->archive.error_string); archive_wstring_free(&a->path_safe); a->archive.magic = 0; diff --git a/libarchive/archive_write_private.h b/libarchive/archive_write_private.h index 1c182f13680..27cba0392ce 100644 --- a/libarchive/archive_write_private.h +++ b/libarchive/archive_write_private.h @@ -25,15 +25,15 @@ * $FreeBSD: head/lib/libarchive/archive_write_private.h 201155 2009-12-29 05:20:12Z kientzle $ */ +#ifndef ARCHIVE_WRITE_PRIVATE_H_INCLUDED +#define ARCHIVE_WRITE_PRIVATE_H_INCLUDED + #ifndef __LIBARCHIVE_BUILD #ifndef __LIBARCHIVE_TEST #error This header is only to be used internally to libarchive. #endif #endif -#ifndef ARCHIVE_WRITE_PRIVATE_H_INCLUDED -#define ARCHIVE_WRITE_PRIVATE_H_INCLUDED - #include "archive.h" #include "archive_string.h" #include "archive_private.h" diff --git a/libarchive/archive_write_set_format.c b/libarchive/archive_write_set_format.c index 0f706231add..12de0807753 100644 --- a/libarchive/archive_write_set_format.c +++ b/libarchive/archive_write_set_format.c @@ -36,6 +36,7 @@ __FBSDID("$FreeBSD: head/lib/libarchive/archive_write_set_format.c 201168 2009-1 #include "archive.h" #include "archive_private.h" +#include "archive_write_set_format_private.h" /* A table that maps format codes to functions. */ static const @@ -76,3 +77,47 @@ archive_write_set_format(struct archive *a, int code) archive_set_error(a, EINVAL, "No such format"); return (ARCHIVE_FATAL); } + +void +__archive_write_entry_filetype_unsupported(struct archive *a, + struct archive_entry *entry, const char *format) +{ + char *name = NULL; + + switch (archive_entry_filetype(entry)) { + /* + * All formats should be able to archive regular files (AE_IFREG) + */ + case AE_IFDIR: + name = "directories"; + break; + case AE_IFLNK: + name = "symbolic links"; + break; + case AE_IFCHR: + name = "character devices"; + break; + case AE_IFBLK: + name = "block devices"; + break; + case AE_IFIFO: + name = "named pipes"; + break; + case AE_IFSOCK: + name = "sockets"; + break; + default: + break; + } + + if (name != NULL) { + archive_set_error(a, ARCHIVE_ERRNO_FILE_FORMAT, + "%s: %s format cannot archive %s", + archive_entry_pathname(entry), format, name); + } else { + archive_set_error(a, ARCHIVE_ERRNO_FILE_FORMAT, + "%s: %s format cannot archive files with mode 0%lo", + archive_entry_pathname(entry), format, + (unsigned long)archive_entry_mode(entry)); + } +} diff --git a/libarchive/archive_write_set_format_7zip.c b/libarchive/archive_write_set_format_7zip.c index 92a87f74e62..fb7697f659c 100644 --- a/libarchive/archive_write_set_format_7zip.c +++ b/libarchive/archive_write_set_format_7zip.c @@ -52,6 +52,7 @@ __FBSDID("$FreeBSD$"); #include "archive_rb.h" #include "archive_string.h" #include "archive_write_private.h" +#include "archive_write_set_format_private.h" /* * Codec ID @@ -164,7 +165,7 @@ struct file { mode_t mode; uint32_t crc32; - int dir:1; + signed int dir:1; }; struct _7zip { diff --git a/libarchive/archive_write_set_format_ar.c b/libarchive/archive_write_set_format_ar.c index 253cac82efe..fc0de1e9f6f 100644 --- a/libarchive/archive_write_set_format_ar.c +++ b/libarchive/archive_write_set_format_ar.c @@ -42,6 +42,7 @@ __FBSDID("$FreeBSD: head/lib/libarchive/archive_write_set_format_ar.c 201108 200 #include "archive_entry.h" #include "archive_private.h" #include "archive_write_private.h" +#include "archive_write_set_format_private.h" struct ar_w { uint64_t entry_bytes_remaining; diff --git a/libarchive/archive_write_set_format_cpio.c b/libarchive/archive_write_set_format_cpio.c index 16cefad7b5b..729f9c77559 100644 --- a/libarchive/archive_write_set_format_cpio.c +++ b/libarchive/archive_write_set_format_cpio.c @@ -43,6 +43,7 @@ __FBSDID("$FreeBSD: head/lib/libarchive/archive_write_set_format_cpio.c 201170 2 #include "archive_entry_locale.h" #include "archive_private.h" #include "archive_write_private.h" +#include "archive_write_set_format_private.h" static ssize_t archive_write_cpio_data(struct archive_write *, const void *buff, size_t s); diff --git a/libarchive/archive_write_set_format_cpio_newc.c b/libarchive/archive_write_set_format_cpio_newc.c index 2d923cc3306..172fda62f0b 100644 --- a/libarchive/archive_write_set_format_cpio_newc.c +++ b/libarchive/archive_write_set_format_cpio_newc.c @@ -44,6 +44,7 @@ __FBSDID("$FreeBSD: head/lib/libarchive/archive_write_set_format_cpio_newc.c 201 #include "archive_entry_locale.h" #include "archive_private.h" #include "archive_write_private.h" +#include "archive_write_set_format_private.h" static ssize_t archive_write_newc_data(struct archive_write *, const void *buff, size_t s); diff --git a/libarchive/archive_write_set_format_gnutar.c b/libarchive/archive_write_set_format_gnutar.c index e7757c22bad..ec29c5c418e 100644 --- a/libarchive/archive_write_set_format_gnutar.c +++ b/libarchive/archive_write_set_format_gnutar.c @@ -46,6 +46,7 @@ __FBSDID("$FreeBSD: head/lib/libarchive/archive_write_set_format_gnu_tar.c 19157 #include "archive_entry_locale.h" #include "archive_private.h" #include "archive_write_private.h" +#include "archive_write_set_format_private.h" struct gnutar { uint64_t entry_bytes_remaining; @@ -534,17 +535,9 @@ archive_write_gnutar_header(struct archive_write *a, case AE_IFBLK: tartype = '4' ; break; case AE_IFDIR: tartype = '5' ; break; case AE_IFIFO: tartype = '6' ; break; - case AE_IFSOCK: - archive_set_error(&a->archive, - ARCHIVE_ERRNO_FILE_FORMAT, - "tar format cannot archive socket"); - ret = ARCHIVE_FAILED; - goto exit_write_header; - default: - archive_set_error(&a->archive, - ARCHIVE_ERRNO_FILE_FORMAT, - "tar format cannot archive this (mode=0%lo)", - (unsigned long)archive_entry_mode(entry)); + default: /* AE_IFSOCK and unknown */ + __archive_write_entry_filetype_unsupported( + &a->archive, entry, "gnutar"); ret = ARCHIVE_FAILED; goto exit_write_header; } diff --git a/libarchive/archive_write_set_format_iso9660.c b/libarchive/archive_write_set_format_iso9660.c index cacbdde7dcb..7cde44c34f7 100644 --- a/libarchive/archive_write_set_format_iso9660.c +++ b/libarchive/archive_write_set_format_iso9660.c @@ -289,12 +289,12 @@ struct isoent { struct extr_rec *current; } extr_rec_list; - int virtual:1; + signed int virtual:1; /* If set to one, this file type is a directory. * A convenience flag to be used as * "archive_entry_filetype(isoent->file->entry) == AE_IFDIR". */ - int dir:1; + signed int dir:1; }; struct hardlink { @@ -755,9 +755,9 @@ struct iso9660 { /* Used for making zisofs. */ struct { - int detect_magic:1; - int making:1; - int allzero:1; + signed int detect_magic:1; + signed int making:1; + signed int allzero:1; unsigned char magic_buffer[64]; int magic_cnt; @@ -5094,13 +5094,11 @@ isofile_init_hardlinks(struct iso9660 *iso9660) static void isofile_free_hardlinks(struct iso9660 *iso9660) { - struct archive_rb_node *n, *next; + struct archive_rb_node *n, *tmp; - for (n = ARCHIVE_RB_TREE_MIN(&(iso9660->hardlink_rbtree)); n;) { - next = __archive_rb_tree_iterate(&(iso9660->hardlink_rbtree), - n, ARCHIVE_RB_DIR_RIGHT); + ARCHIVE_RB_TREE_FOREACH_SAFE(n, &(iso9660->hardlink_rbtree), tmp) { + __archive_rb_tree_remove_node(&(iso9660->hardlink_rbtree), n); free(n); - n = next; } } @@ -7801,8 +7799,8 @@ struct zisofs_extract { uint64_t pz_uncompressed_size; size_t uncompressed_buffer_size; - int initialized:1; - int header_passed:1; + signed int initialized:1; + signed int header_passed:1; uint32_t pz_offset; unsigned char *block_pointers; diff --git a/libarchive/archive_write_set_format_pax.c b/libarchive/archive_write_set_format_pax.c index 7c5e63bb3a2..a2b27107195 100644 --- a/libarchive/archive_write_set_format_pax.c +++ b/libarchive/archive_write_set_format_pax.c @@ -43,6 +43,7 @@ __FBSDID("$FreeBSD: head/lib/libarchive/archive_write_set_format_pax.c 201162 20 #include "archive_entry_locale.h" #include "archive_private.h" #include "archive_write_private.h" +#include "archive_write_set_format_private.h" struct sparse_block { struct sparse_block *next; @@ -713,17 +714,9 @@ archive_write_pax_header(struct archive_write *a, } break; } - case AE_IFSOCK: - archive_set_error(&a->archive, - ARCHIVE_ERRNO_FILE_FORMAT, - "tar format cannot archive socket"); - return (ARCHIVE_FAILED); - default: - archive_set_error(&a->archive, - ARCHIVE_ERRNO_FILE_FORMAT, - "tar format cannot archive this (type=0%lo)", - (unsigned long) - archive_entry_filetype(entry_original)); + default: /* AE_IFSOCK and unknown */ + __archive_write_entry_filetype_unsupported( + &a->archive, entry_original, "pax"); return (ARCHIVE_FAILED); } } @@ -859,13 +852,16 @@ archive_write_pax_header(struct archive_write *a, * them do. */ r = get_entry_pathname(a, entry_main, &path, &path_length, sconv); - if (r == ARCHIVE_FATAL) + if (r == ARCHIVE_FATAL) { + archive_entry_free(entry_main); return (r); - else if (r != ARCHIVE_OK) { + } else if (r != ARCHIVE_OK) { r = get_entry_pathname(a, entry_main, &path, &path_length, NULL); - if (r == ARCHIVE_FATAL) + if (r == ARCHIVE_FATAL) { + archive_entry_free(entry_main); return (r); + } archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, "Can't translate pathname '%s' to %s", path, archive_string_conversion_charset_name(sconv)); @@ -873,12 +869,15 @@ archive_write_pax_header(struct archive_write *a, sconv = NULL;/* The header charset switches to binary mode. */ } r = get_entry_uname(a, entry_main, &uname, &uname_length, sconv); - if (r == ARCHIVE_FATAL) + if (r == ARCHIVE_FATAL) { + archive_entry_free(entry_main); return (r); - else if (r != ARCHIVE_OK) { + } else if (r != ARCHIVE_OK) { r = get_entry_uname(a, entry_main, &uname, &uname_length, NULL); - if (r == ARCHIVE_FATAL) + if (r == ARCHIVE_FATAL) { + archive_entry_free(entry_main); return (r); + } archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, "Can't translate uname '%s' to %s", uname, archive_string_conversion_charset_name(sconv)); @@ -886,12 +885,15 @@ archive_write_pax_header(struct archive_write *a, sconv = NULL;/* The header charset switches to binary mode. */ } r = get_entry_gname(a, entry_main, &gname, &gname_length, sconv); - if (r == ARCHIVE_FATAL) + if (r == ARCHIVE_FATAL) { + archive_entry_free(entry_main); return (r); - else if (r != ARCHIVE_OK) { + } else if (r != ARCHIVE_OK) { r = get_entry_gname(a, entry_main, &gname, &gname_length, NULL); - if (r == ARCHIVE_FATAL) + if (r == ARCHIVE_FATAL) { + archive_entry_free(entry_main); return (r); + } archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, "Can't translate gname '%s' to %s", gname, archive_string_conversion_charset_name(sconv)); @@ -903,13 +905,16 @@ archive_write_pax_header(struct archive_write *a, if (linkpath == NULL) { r = get_entry_symlink(a, entry_main, &linkpath, &linkpath_length, sconv); - if (r == ARCHIVE_FATAL) + if (r == ARCHIVE_FATAL) { + archive_entry_free(entry_main); return (r); - else if (r != ARCHIVE_OK) { + } else if (r != ARCHIVE_OK) { r = get_entry_symlink(a, entry_main, &linkpath, &linkpath_length, NULL); - if (r == ARCHIVE_FATAL) + if (r == ARCHIVE_FATAL) { + archive_entry_free(entry_main); return (r); + } archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, "Can't translate linkname '%s' to %s", linkpath, @@ -925,21 +930,29 @@ archive_write_pax_header(struct archive_write *a, if (hardlink != NULL) { r = get_entry_hardlink(a, entry_main, &hardlink, &hardlink_length, NULL); - if (r == ARCHIVE_FATAL) + if (r == ARCHIVE_FATAL) { + archive_entry_free(entry_main); return (r); + } linkpath = hardlink; linkpath_length = hardlink_length; } r = get_entry_pathname(a, entry_main, &path, &path_length, NULL); - if (r == ARCHIVE_FATAL) + if (r == ARCHIVE_FATAL) { + archive_entry_free(entry_main); return (r); + } r = get_entry_uname(a, entry_main, &uname, &uname_length, NULL); - if (r == ARCHIVE_FATAL) + if (r == ARCHIVE_FATAL) { + archive_entry_free(entry_main); return (r); + } r = get_entry_gname(a, entry_main, &gname, &gname_length, NULL); - if (r == ARCHIVE_FATAL) + if (r == ARCHIVE_FATAL) { + archive_entry_free(entry_main); return (r); + } } /* Store the header encoding first, to be nice to readers. */ @@ -1196,24 +1209,33 @@ archive_write_pax_header(struct archive_write *a, ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID | ARCHIVE_ENTRY_ACL_STYLE_SEPARATOR_COMMA | ARCHIVE_ENTRY_ACL_STYLE_COMPACT); - if (ret == ARCHIVE_FATAL) + if (ret == ARCHIVE_FATAL) { + archive_entry_free(entry_main); + archive_string_free(&entry_name); return (ARCHIVE_FATAL); + } } if (acl_types & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) { ret = add_pax_acl(a, entry_original, pax, ARCHIVE_ENTRY_ACL_TYPE_ACCESS | ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID | ARCHIVE_ENTRY_ACL_STYLE_SEPARATOR_COMMA); - if (ret == ARCHIVE_FATAL) + if (ret == ARCHIVE_FATAL) { + archive_entry_free(entry_main); + archive_string_free(&entry_name); return (ARCHIVE_FATAL); + } } if (acl_types & ARCHIVE_ENTRY_ACL_TYPE_DEFAULT) { ret = add_pax_acl(a, entry_original, pax, ARCHIVE_ENTRY_ACL_TYPE_DEFAULT | ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID | ARCHIVE_ENTRY_ACL_STYLE_SEPARATOR_COMMA); - if (ret == ARCHIVE_FATAL) + if (ret == ARCHIVE_FATAL) { + archive_entry_free(entry_main); + archive_string_free(&entry_name); return (ARCHIVE_FATAL); + } } /* We use GNU-tar-compatible sparse attributes. */ @@ -1352,8 +1374,11 @@ archive_write_pax_header(struct archive_write *a, * numeric fields, though they're less critical. */ if (__archive_write_format_header_ustar(a, ustarbuff, entry_main, -1, 0, - NULL) == ARCHIVE_FATAL) + NULL) == ARCHIVE_FATAL) { + archive_entry_free(entry_main); + archive_string_free(&entry_name); return (ARCHIVE_FATAL); + } /* If we built any extended attributes, write that entry first. */ if (archive_strlen(&(pax->pax_header)) > 0) { @@ -1418,6 +1443,8 @@ archive_write_pax_header(struct archive_write *a, archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, "archive_write_pax_header: " "'x' header failed?! This can't happen.\n"); + archive_entry_free(entry_main); + archive_string_free(&entry_name); return (ARCHIVE_FATAL); } else if (r < ret) ret = r; @@ -1426,6 +1453,8 @@ archive_write_pax_header(struct archive_write *a, sparse_list_clear(pax); pax->entry_bytes_remaining = 0; pax->entry_padding = 0; + archive_entry_free(entry_main); + archive_string_free(&entry_name); return (ARCHIVE_FATAL); } @@ -1437,12 +1466,16 @@ archive_write_pax_header(struct archive_write *a, archive_strlen(&(pax->pax_header))); if (r != ARCHIVE_OK) { /* If a write fails, we're pretty much toast. */ + archive_entry_free(entry_main); + archive_string_free(&entry_name); return (ARCHIVE_FATAL); } /* Pad out the end of the entry. */ r = __archive_write_nulls(a, (size_t)pax->entry_padding); if (r != ARCHIVE_OK) { /* If a write fails, we're pretty much toast. */ + archive_entry_free(entry_main); + archive_string_free(&entry_name); return (ARCHIVE_FATAL); } pax->entry_bytes_remaining = pax->entry_padding = 0; @@ -1450,8 +1483,11 @@ archive_write_pax_header(struct archive_write *a, /* Write the header for main entry. */ r = __archive_write_output(a, ustarbuff, 512); - if (r != ARCHIVE_OK) + if (r != ARCHIVE_OK) { + archive_entry_free(entry_main); + archive_string_free(&entry_name); return (r); + } /* * Inform the client of the on-disk size we're using, so diff --git a/libarchive/archive_write_set_format_private.h b/libarchive/archive_write_set_format_private.h new file mode 100644 index 00000000000..e20022755f8 --- /dev/null +++ b/libarchive/archive_write_set_format_private.h @@ -0,0 +1,42 @@ +/*- + * Copyright (c) 2020 Martin Matuska + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef ARCHIVE_WRITE_SET_FORMAT_PRIVATE_H_INCLUDED +#define ARCHIVE_WRITE_SET_FORMAT_PRIVATE_H_INCLUDED + +#ifndef __LIBARCHIVE_BUILD +#ifndef __LIBARCHIVE_TEST +#error This header is only to be used internally to libarchive. +#endif +#endif + +#include "archive.h" +#include "archive_entry.h" + +void __archive_write_entry_filetype_unsupported(struct archive *a, + struct archive_entry *entry, const char *format); +#endif diff --git a/libarchive/archive_write_set_format_shar.c b/libarchive/archive_write_set_format_shar.c index 600c88257a0..9e4931c95c1 100644 --- a/libarchive/archive_write_set_format_shar.c +++ b/libarchive/archive_write_set_format_shar.c @@ -42,6 +42,7 @@ __FBSDID("$FreeBSD: head/lib/libarchive/archive_write_set_format_shar.c 189438 2 #include "archive_entry.h" #include "archive_private.h" #include "archive_write_private.h" +#include "archive_write_set_format_private.h" struct shar { int dump; @@ -194,8 +195,8 @@ archive_write_shar_header(struct archive_write *a, struct archive_entry *entry) archive_entry_set_size(entry, 0); if (archive_entry_hardlink(entry) == NULL && archive_entry_symlink(entry) == NULL) { - archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, - "shar format cannot archive this"); + __archive_write_entry_filetype_unsupported( + &a->archive, entry, "shar"); return (ARCHIVE_WARN); } } diff --git a/libarchive/archive_write_set_format_ustar.c b/libarchive/archive_write_set_format_ustar.c index ad4ccb77ea5..d1a06bc4f7e 100644 --- a/libarchive/archive_write_set_format_ustar.c +++ b/libarchive/archive_write_set_format_ustar.c @@ -44,6 +44,7 @@ __FBSDID("$FreeBSD: head/lib/libarchive/archive_write_set_format_ustar.c 191579 #include "archive_entry_locale.h" #include "archive_private.h" #include "archive_write_private.h" +#include "archive_write_set_format_private.h" struct ustar { uint64_t entry_bytes_remaining; @@ -512,9 +513,11 @@ __archive_write_format_header_ustar(struct archive_write *a, char h[512], } if (copy_length > 0) { if (copy_length > USTAR_uname_size) { - archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, - "Username too long"); - ret = ARCHIVE_FAILED; + if (tartype != 'x') { + archive_set_error(&a->archive, + ARCHIVE_ERRNO_MISC, "Username too long"); + ret = ARCHIVE_FAILED; + } copy_length = USTAR_uname_size; } memcpy(h + USTAR_uname_offset, p, copy_length); @@ -535,9 +538,11 @@ __archive_write_format_header_ustar(struct archive_write *a, char h[512], } if (copy_length > 0) { if (strlen(p) > USTAR_gname_size) { - archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, - "Group name too long"); - ret = ARCHIVE_FAILED; + if (tartype != 'x') { + archive_set_error(&a->archive, + ARCHIVE_ERRNO_MISC, "Group name too long"); + ret = ARCHIVE_FAILED; + } copy_length = USTAR_gname_size; } memcpy(h + USTAR_gname_offset, p, copy_length); @@ -609,16 +614,9 @@ __archive_write_format_header_ustar(struct archive_write *a, char h[512], case AE_IFBLK: h[USTAR_typeflag_offset] = '4' ; break; case AE_IFDIR: h[USTAR_typeflag_offset] = '5' ; break; case AE_IFIFO: h[USTAR_typeflag_offset] = '6' ; break; - case AE_IFSOCK: - archive_set_error(&a->archive, - ARCHIVE_ERRNO_FILE_FORMAT, - "tar format cannot archive socket"); - return (ARCHIVE_FAILED); - default: - archive_set_error(&a->archive, - ARCHIVE_ERRNO_FILE_FORMAT, - "tar format cannot archive this (mode=0%lo)", - (unsigned long)archive_entry_mode(entry)); + default: /* AE_IFSOCK and unknown */ + __archive_write_entry_filetype_unsupported( + &a->archive, entry, "ustar"); ret = ARCHIVE_FAILED; } } diff --git a/libarchive/archive_write_set_format_v7tar.c b/libarchive/archive_write_set_format_v7tar.c index 1fdaafd2a93..59940714412 100644 --- a/libarchive/archive_write_set_format_v7tar.c +++ b/libarchive/archive_write_set_format_v7tar.c @@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$"); #include "archive_entry_locale.h" #include "archive_private.h" #include "archive_write_private.h" +#include "archive_write_set_format_private.h" struct v7tar { uint64_t entry_bytes_remaining; @@ -491,31 +492,11 @@ format_header_v7tar(struct archive_write *a, char h[512], case AE_IFLNK: h[V7TAR_typeflag_offset] = '2'; break; - case AE_IFCHR: - archive_set_error(&a->archive, - ARCHIVE_ERRNO_FILE_FORMAT, - "tar format cannot archive character device"); - return (ARCHIVE_FAILED); - case AE_IFBLK: - archive_set_error(&a->archive, - ARCHIVE_ERRNO_FILE_FORMAT, - "tar format cannot archive block device"); - return (ARCHIVE_FAILED); - case AE_IFIFO: - archive_set_error(&a->archive, - ARCHIVE_ERRNO_FILE_FORMAT, - "tar format cannot archive fifo"); - return (ARCHIVE_FAILED); - case AE_IFSOCK: - archive_set_error(&a->archive, - ARCHIVE_ERRNO_FILE_FORMAT, - "tar format cannot archive socket"); - return (ARCHIVE_FAILED); default: - archive_set_error(&a->archive, - ARCHIVE_ERRNO_FILE_FORMAT, - "tar format cannot archive this (mode=0%lo)", - (unsigned long)archive_entry_mode(entry)); + /* AE_IFBLK, AE_IFCHR, AE_IFIFO, AE_IFSOCK + * and unknown */ + __archive_write_entry_filetype_unsupported( + &a->archive, entry, "v7tar"); ret = ARCHIVE_FAILED; } } diff --git a/libarchive/archive_write_set_format_warc.c b/libarchive/archive_write_set_format_warc.c index edad072cf77..46b05734121 100644 --- a/libarchive/archive_write_set_format_warc.c +++ b/libarchive/archive_write_set_format_warc.c @@ -48,6 +48,7 @@ __FBSDID("$FreeBSD$"); #include "archive_private.h" #include "archive_random_private.h" #include "archive_write_private.h" +#include "archive_write_set_format_private.h" struct warc_s { unsigned int omit_warcinfo:1; @@ -259,10 +260,8 @@ _warc_header(struct archive_write *a, struct archive_entry *entry) return (ARCHIVE_OK); } /* just resort to erroring as per Tim's advice */ - archive_set_error( - &a->archive, - ARCHIVE_ERRNO_FILE_FORMAT, - "WARC can only process regular files"); + __archive_write_entry_filetype_unsupported( + &a->archive, entry, "WARC"); return (ARCHIVE_FAILED); } @@ -332,6 +331,10 @@ xstrftime(struct archive_string *as, const char *fmt, time_t t) struct tm *rt; #if defined(HAVE_GMTIME_R) || defined(HAVE__GMTIME64_S) struct tm timeHere; +#endif +#if defined(HAVE__GMTIME64_S) + errno_t terr; + __time64_t tmptime; #endif char strtime[100]; size_t len; @@ -340,7 +343,12 @@ xstrftime(struct archive_string *as, const char *fmt, time_t t) if ((rt = gmtime_r(&t, &timeHere)) == NULL) return; #elif defined(HAVE__GMTIME64_S) - _gmtime64_s(&timeHere, &t); + tmptime = t; + terr = _gmtime64_s(&timeHere, &tmptime); + if (terr) + rt = NULL; + else + rt = &timeHere; #else if ((rt = gmtime(&t)) == NULL) return; diff --git a/libarchive/archive_write_set_format_xar.c b/libarchive/archive_write_set_format_xar.c index 5e4b90e06b3..d456cf8f8aa 100644 --- a/libarchive/archive_write_set_format_xar.c +++ b/libarchive/archive_write_set_format_xar.c @@ -212,8 +212,8 @@ struct file { struct heap_data data; struct archive_string script; - int virtual:1; - int dir:1; + signed int virtual:1; + signed int dir:1; }; struct hardlink { @@ -411,6 +411,8 @@ xar_options(struct archive_write *a, const char *key, const char *value) if (strcmp(key, "checksum") == 0) { if (value == NULL) xar->opt_sumalg = CKSUM_NONE; + else if (strcmp(value, "none") == 0) + xar->opt_sumalg = CKSUM_NONE; else if (strcmp(value, "sha1") == 0) xar->opt_sumalg = CKSUM_SHA1; else if (strcmp(value, "md5") == 0) @@ -429,6 +431,8 @@ xar_options(struct archive_write *a, const char *key, const char *value) if (value == NULL) xar->opt_compression = NONE; + else if (strcmp(value, "none") == 0) + xar->opt_compression = NONE; else if (strcmp(value, "gzip") == 0) xar->opt_compression = GZIP; else if (strcmp(value, "bzip2") == 0) @@ -482,6 +486,8 @@ xar_options(struct archive_write *a, const char *key, const char *value) if (strcmp(key, "toc-checksum") == 0) { if (value == NULL) xar->opt_toc_sumalg = CKSUM_NONE; + else if (strcmp(value, "none") == 0) + xar->opt_toc_sumalg = CKSUM_NONE; else if (strcmp(value, "sha1") == 0) xar->opt_toc_sumalg = CKSUM_SHA1; else if (strcmp(value, "md5") == 0) @@ -696,13 +702,37 @@ xar_write_data(struct archive_write *a, const void *buff, size_t s) else run = ARCHIVE_Z_FINISH; /* Compress file data. */ - r = compression_code(&(a->archive), &(xar->stream), run); - if (r != ARCHIVE_OK && r != ARCHIVE_EOF) - return (ARCHIVE_FATAL); + for (;;) { + r = compression_code(&(a->archive), &(xar->stream), + run); + if (r != ARCHIVE_OK && r != ARCHIVE_EOF) + return (ARCHIVE_FATAL); + if (xar->stream.avail_out == 0 || + run == ARCHIVE_Z_FINISH) { + size = sizeof(xar->wbuff) - + xar->stream.avail_out; + checksum_update(&(xar->a_sumwrk), xar->wbuff, + size); + xar->cur_file->data.length += size; + if (write_to_temp(a, xar->wbuff, + size) != ARCHIVE_OK) + return (ARCHIVE_FATAL); + if (r == ARCHIVE_OK) { + /* Output buffer was full */ + xar->stream.next_out = xar->wbuff; + xar->stream.avail_out = + sizeof(xar->wbuff); + } else { + /* ARCHIVE_EOF - We are done */ + break; + } + } else { + /* Compressor wants more input */ + break; + } + } rsize = s - xar->stream.avail_in; checksum_update(&(xar->e_sumwrk), buff, rsize); - size = sizeof(xar->wbuff) - xar->stream.avail_out; - checksum_update(&(xar->a_sumwrk), xar->wbuff, size); } #if !defined(_WIN32) || defined(__CYGWIN__) if (xar->bytes_remaining == @@ -739,12 +769,9 @@ xar_write_data(struct archive_write *a, const void *buff, size_t s) if (xar->cur_file->data.compression == NONE) { if (write_to_temp(a, buff, size) != ARCHIVE_OK) return (ARCHIVE_FATAL); - } else { - if (write_to_temp(a, xar->wbuff, size) != ARCHIVE_OK) - return (ARCHIVE_FATAL); + xar->cur_file->data.length += size; } xar->bytes_remaining -= rsize; - xar->cur_file->data.length += size; return (rsize); } @@ -878,11 +905,15 @@ xmlwrite_time(struct archive_write *a, xmlTextWriterPtr writer, { char timestr[100]; struct tm tm; +#if defined(HAVE__GMTIME64_S) + __time64_t tmptime; +#endif #if defined(HAVE_GMTIME_R) gmtime_r(&t, &tm); #elif defined(HAVE__GMTIME64_S) - _gmtime64_s(&tm, &t); + tmptime = t; + _gmtime64_s(&tm, &tmptime); #else memcpy(&tm, gmtime(&t), sizeof(tm)); #endif @@ -2103,7 +2134,7 @@ file_gen_utility_names(struct archive_write *a, struct file *file) while (len > 0) { size_t ll = len; - if (len > 0 && p[len-1] == '/') { + if (p[len-1] == '/') { p[len-1] = '\0'; len--; } @@ -2532,13 +2563,11 @@ file_init_hardlinks(struct xar *xar) static void file_free_hardlinks(struct xar *xar) { - struct archive_rb_node *n, *next; + struct archive_rb_node *n, *tmp; - for (n = ARCHIVE_RB_TREE_MIN(&(xar->hardlink_rbtree)); n;) { - next = __archive_rb_tree_iterate(&(xar->hardlink_rbtree), - n, ARCHIVE_RB_DIR_RIGHT); + ARCHIVE_RB_TREE_FOREACH_SAFE(n, &(xar->hardlink_rbtree), tmp) { + __archive_rb_tree_remove_node(&(xar->hardlink_rbtree), n); free(n); - n = next; } } diff --git a/libarchive/archive_write_set_format_zip.c b/libarchive/archive_write_set_format_zip.c index f28a8c3a341..6d485295d50 100644 --- a/libarchive/archive_write_set_format_zip.c +++ b/libarchive/archive_write_set_format_zip.c @@ -57,6 +57,7 @@ __FBSDID("$FreeBSD: head/lib/libarchive/archive_write_set_format_zip.c 201168 20 #include "archive_private.h" #include "archive_random_private.h" #include "archive_write_private.h" +#include "archive_write_set_format_private.h" #ifndef HAVE_ZLIB_H #include "archive_crc32.h" @@ -526,8 +527,8 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry) /* Ignore types of entries that we don't support. */ type = archive_entry_filetype(entry); if (type != AE_IFREG && type != AE_IFDIR && type != AE_IFLNK) { - archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, - "Filetype not supported"); + __archive_write_entry_filetype_unsupported( + &a->archive, entry, "zip"); return ARCHIVE_FAILED; }; @@ -1372,10 +1373,28 @@ dos_time(const time_t unix_time) { struct tm *t; unsigned int dt; +#if defined(HAVE_LOCALTIME_R) || defined(HAVE__LOCALTIME64_S) + struct tm tmbuf; +#endif +#if defined(HAVE__LOCALTIME64_S) + errno_t terr; + __time64_t tmptime; +#endif /* This will not preserve time when creating/extracting the archive * on two systems with different time zones. */ +#if defined(HAVE_LOCALTIME_R) + t = localtime_r(&unix_time, &tmbuf); +#elif defined(HAVE__LOCALTIME64_S) + tmptime = unix_time; + terr = _localtime64_s(&tmbuf, &tmptime); + if (terr) + t = NULL; + else + t = &tmbuf; +#else t = localtime(&unix_time); +#endif /* MSDOS-style date/time is only between 1980-01-01 and 2107-12-31 */ if (t->tm_year < 1980 - 1900) diff --git a/libarchive/archive_write_set_options.3 b/libarchive/archive_write_set_options.3 index 09eb95ea5aa..cffe571e90a 100644 --- a/libarchive/archive_write_set_options.3 +++ b/libarchive/archive_write_set_options.3 @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd December 3, 2019 +.Dd January 31, 2020 .Dt ARCHIVE_WRITE_OPTIONS 3 .Os .Sh NAME @@ -170,33 +170,125 @@ only to modules whose name matches .\" .Sh OPTIONS .Bl -tag -compact -width indent +.It Filter b64encode +.Bl -tag -compact -width indent +.It Cm mode +The value is interpreted as octal digits specifying the file mode. +.It Cm name +The value specifies the file name. +.El +.It Filter bzip2 +.Bl -tag -compact -width indent +.It Cm compression-level +The value is interpreted as a decimal integer specifying the +bzip2 compression level. Supported values are from 1 to 9. +.El .It Filter gzip .Bl -tag -compact -width indent .It Cm compression-level The value is interpreted as a decimal integer specifying the -gzip compression level. +gzip compression level. Supported values are from 0 to 9. +.It Cm timestamp +Store timestamp. This is enabled by default. +.El +.It Filter lrzip +.Bl -tag -compact -width indent +.It Cm compression Ns = Ns Ar type +Use +.Ar type +as compression method. +Supported values are +.Dq bzip2 , +.Dq gzipi , +.Dq lzo +.Pq ultra fast , +and +.Dq zpaq +.Pq best, extremely slow . +.It Cm compression-level +The value is interpreted as a decimal integer specifying the +lrzip compression level. Supported values are from 1 to 9. +.El +.It Filter lz4 +.Bl -tag -compact -width indent +.It Cm compression-level +The value is interpreted as a decimal integer specifying the +lz4 compression level. Supported values are from 0 to 9. +.It Cm stream-checksum +Enable stream checksum. This is enabled by default. +.It Cm block-checksum +Enable block checksum. This is disabled by default. +.It Cm block-size +The value is interpreted as a decimal integer specifying the +lz4 compression block size. Supported values are from 4 to 7 +.Pq default . +.It Cm block-dependence +Use the previous block of the block being compressed for +a compression dictionary to improve compression ratio. +This is disabled by default. +.El +.It Filter lzop +.Bl -tag -compact -width indent +.It Cm compression-level +The value is interpreted as a decimal integer specifying the +lzop compression level. Supported values are from 1 to 9. +.El +.It Filter uuencode +.Bl -tag -compact -width indent +.It Cm mode +The value is interpreted as octal digits specifying the file mode. +.It Cm name +The value specifies the file name. .El .It Filter xz .Bl -tag -compact -width indent .It Cm compression-level The value is interpreted as a decimal integer specifying the -compression level. +compression level. Supported values are from 0 to 9. +.It Cm threads +The value is interpreted as a decimal integer specifying the +number of threads for multi-threaded lzma compression. +If supported, the default value is read from +.Fn lzma_cputhreads . .El -.It Format mtree +.It Filter zstd .Bl -tag -compact -width indent -.It Cm cksum , Cm device , Cm flags , Cm gid , Cm gname , Cm indent , Cm link , Cm md5 , Cm mode , Cm nlink , Cm rmd160 , Cm sha1 , Cm sha256 , Cm sha384 , Cm sha512 , Cm size , Cm time , Cm uid , Cm uname -Enable a particular keyword in the mtree output. -Prefix with an exclamation mark to disable the corresponding keyword. -The default is equivalent to -.Dq device, flags, gid, gname, link, mode, nlink, size, time, type, uid, uname . -.It Cm all -Enables all of the above keywords. -.It Cm use-set -Enables generation of -.Cm /set -lines that specify default values for the following files and/or directories. -.It Cm indent -XXX needs explanation XXX +.It Cm compression-level +The value is interpreted as a decimal integer specifying the +compression level. Supported values are from 1 to 22. +.El +.It Format 7zip +.Bl -tag -compact -width indent +.It Cm compression +The value is one of +.Dq store , +.Dq deflate , +.Dq bzip2 , +.Dq lzma1 , +.Dq lzma2 +or +.Dq ppmd +to indicate how the following entries should be compressed. +Note that this setting is ignored for directories, symbolic links, +and other special entries. +.It Cm compression-level +The value is interpreted as a decimal integer specifying the +compression level. +Values between 0 and 9 are supported. +The interpretation of the compression level depends on the chosen +compression method. +.El +.It Format cpio +.Bl -tag -compact -width indent +.It Cm hdrcharset +The value is used as a character set name that will be +used when translating file names. +.El +.It Format gnutar +.Bl -tag -compact -width indent +.It Cm hdrcharset +The value is used as a character set name that will be +used when translating file, group and user names. .El .It Format iso9660 - volume metadata These options are used to set standard ISO9660 metadata. @@ -404,10 +496,33 @@ Specifies a filename that should not be compressed when using This option can be provided multiple times to suppress compression on many files. .El +.It Format mtree +.Bl -tag -compact -width indent +.It Cm cksum , Cm device , Cm flags , Cm gid , Cm gname , Cm indent , Cm link , Cm md5 , Cm mode , Cm nlink , Cm rmd160 , Cm sha1 , Cm sha256 , Cm sha384 , Cm sha512 , Cm size , Cm time , Cm uid , Cm uname +Enable a particular keyword in the mtree output. +Prefix with an exclamation mark to disable the corresponding keyword. +The default is equivalent to +.Dq device, flags, gid, gname, link, mode, nlink, size, time, type, uid, uname . +.It Cm all +Enables all of the above keywords. +.It Cm use-set +Enables generation of +.Cm /set +lines that specify default values for the following files and/or directories. +.It Cm indent +XXX needs explanation XXX +.El +.It Format newc +.Bl -tag -compact -width indent +.It Cm hdrcharset +The value is used as a character set name that will be +used when translating file names. +.El .It Format pax .Bl -tag -compact -width indent .It Cm hdrcharset -This sets the character set used for filenames, uname and gname. +The value is used as a character set name that will be +used when translating file, group and user names. The value is one of .Dq BINARY or @@ -430,26 +545,61 @@ and .Dq SCHILY.xattr headers are written. .El -.It Format 7zip +.It Format ustar .Bl -tag -compact -width indent -.It Cm compression -The value is one of -.Dq store , -.Dq deflate , +.It Cm hdrcharset +The value is used as a character set name that will be +used when translating file, group and user names. +.El +.It Format v7tar +.Bl -tag -compact -width indent +.It Cm hdrcharset +The value is used as a character set name that will be +used when translating file, group and user names. +.El +.It Format warc +.Bl -tag -compact -width indent +.It Cm omit-warcinfo +Set to +.Dq true +to disable output of the warcinfo record. +.El +.It Format xar +.Bl -tag -compact -width indent +.It Cm checksum Ns = Ns Ar type +Use +.Ar type +as file checksum method. +Supported values are +.Dq none , +.Dq md5 , +and +.Dq sha1 +.Pq default . +.It Cm compression Ns = Ns Ar type +Use +.Ar type +as compression method. +Supported values are +.Dq none , .Dq bzip2 , -.Dq lzma1 , -.Dq lzma2 -or -.Dq ppmd -to indicate how the following entries should be compressed. -Note that this setting is ignored for directories, symbolic links, -and other special entries. -.It Cm compression-level -The value is interpreted as a decimal integer specifying the -compression level. -Values between 0 and 9 are supported. -The interpretation of the compression level depends on the chosen -compression method. +.Dq gzip +.Pq default , +.Dq lzma +and +.Dq xz . +.It Cm compression_level +The value is a decimal integer from 1 to 9 specifying the compression level. +.It Cm toc-checksum Ns = Ns Ar type +Use +.Ar type +as table of contents checksum method. +Supported values are +.Dq none , +.Dq md5 +and +.Dq sha1 +.Pq default . .El .It Format zip .Bl -tag -compact -width indent @@ -470,6 +620,20 @@ A compression level of 0 switches the compression method to other values will enable .Dq deflate compression with the given level. +.It Cm encryption +Enable encryption using traditional zip encryption. +.It Cm encryption Ns = Ns Ar type +Use +.Ar type +as encryption type. +Supported values are +.Dq zipcrypt +.Pq traditional zip encryption , +.Dq aes128 +.Pq WinZip AES-128 encryption +and +.Dq aes256 +.Pq WinZip AES-256 encryption . .It Cm experimental This boolean option enables or disables experimental Zip features that may not be compatible with other Zip implementations. @@ -478,7 +642,8 @@ This boolean option disables CRC calculations. All CRC fields are set to zero. It should not be used except for testing purposes. .It Cm hdrcharset -This sets the character set used for filenames. +The value is used as a character set name that will be +used when translating file names. .It Cm zip64 Zip64 extensions provide additional file size information for entries larger than 4 GiB. diff --git a/libarchive/archive_xxhash.h b/libarchive/archive_xxhash.h index 427241641a0..1c7131ca1e7 100644 --- a/libarchive/archive_xxhash.h +++ b/libarchive/archive_xxhash.h @@ -24,12 +24,13 @@ * */ +#ifndef ARCHIVE_XXHASH_H_INCLUDED +#define ARCHIVE_XXHASH_H_INCLUDED + #ifndef __LIBARCHIVE_BUILD #error This header is only to be used internally to libarchive. #endif -#ifndef ARCHIVE_XXHASH_H -#define ARCHIVE_XXHASH_H typedef enum { XXH_OK=0, XXH_ERROR } XXH_errorcode; diff --git a/libarchive/filter_fork.h b/libarchive/filter_fork.h index a28272bee33..908e7cdd4dd 100644 --- a/libarchive/filter_fork.h +++ b/libarchive/filter_fork.h @@ -25,13 +25,13 @@ * $FreeBSD: head/lib/libarchive/filter_fork.h 201087 2009-12-28 02:18:26Z kientzle $ */ +#ifndef FILTER_FORK_H +#define FILTER_FORK_H + #ifndef __LIBARCHIVE_BUILD #error This header is only to be used internally to libarchive. #endif -#ifndef FILTER_FORK_H -#define FILTER_FORK_H - pid_t __archive_create_child(const char *cmd, int *child_stdin, int *child_stdout); diff --git a/libarchive/test/test_archive_write_set_format_filter_by_ext.c b/libarchive/test/test_archive_write_set_format_filter_by_ext.c index 4fe18e18c2d..22345038609 100644 --- a/libarchive/test/test_archive_write_set_format_filter_by_ext.c +++ b/libarchive/test/test_archive_write_set_format_filter_by_ext.c @@ -30,7 +30,7 @@ __FBSDID("$FreeBSD$"); static void test_format_filter_by_ext(const char *output_file, - int format_id, int filter_id, int dot_stored, char * def_ext) + int format_id, int filter_id, int dot_stored, const char * def_ext) { struct archive_entry *ae; struct archive *a; diff --git a/libarchive/test/test_compat_zip.c b/libarchive/test/test_compat_zip.c index 39152206c1b..813ea5dc670 100644 --- a/libarchive/test/test_compat_zip.c +++ b/libarchive/test/test_compat_zip.c @@ -156,7 +156,7 @@ DEFINE_TEST(test_compat_zip_4) size_t s; extract_reference_file(refname); - p = slurpfile(&s, refname); + p = slurpfile(&s, "%s", refname); /* SFX files require seek support. */ assert((a = archive_read_new()) != NULL); @@ -214,7 +214,7 @@ DEFINE_TEST(test_compat_zip_5) size_t s; extract_reference_file(refname); - p = slurpfile(&s, refname); + p = slurpfile(&s, "%s", refname); /* Verify with seek support. * Everything works correctly here. */ @@ -370,7 +370,7 @@ DEFINE_TEST(test_compat_zip_6) size_t s; extract_reference_file(refname); - p = slurpfile(&s, refname); + p = slurpfile(&s, "%s", refname); assert((a = archive_read_new()) != NULL); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); @@ -402,7 +402,7 @@ DEFINE_TEST(test_compat_zip_7) int i; extract_reference_file(refname); - p = slurpfile(&s, refname); + p = slurpfile(&s, "%s", refname); for (i = 1; i < 1000; ++i) { assert((a = archive_read_new()) != NULL); @@ -436,7 +436,7 @@ DEFINE_TEST(test_compat_zip_8) size_t s; extract_reference_file(refname); - p = slurpfile(&s, refname); + p = slurpfile(&s, "%s", refname); assert((a = archive_read_new()) != NULL); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_zip(a)); diff --git a/libarchive/test/test_fuzz.c b/libarchive/test/test_fuzz.c index d02fd993f97..b2654c4a339 100644 --- a/libarchive/test/test_fuzz.c +++ b/libarchive/test/test_fuzz.c @@ -119,7 +119,8 @@ test_fuzz(const struct files *filesets) for (i = 0; filesets[n].names[i] != NULL; ++i) { char *newraw; - tmp = slurpfile(&size, filesets[n].names[i]); + tmp = slurpfile(&size, "%s", + filesets[n].names[i]); newraw = realloc(rawimage, oldsize + size); if (!assert(newraw != NULL)) { diff --git a/libarchive/test/test_read_extract.c b/libarchive/test/test_read_extract.c index cd06096eff6..2b1a21e4715 100644 --- a/libarchive/test/test_read_extract.c +++ b/libarchive/test/test_read_extract.c @@ -120,7 +120,7 @@ DEFINE_TEST(test_read_extract) assertA(0 == archive_read_support_filter_all(a)); assertA(0 == archive_read_open_memory(a, buff, BUFF_SIZE)); /* Restore first entry with _EXTRACT_PERM. */ - failure("Error reading first entry", i); + failure("Error reading first entry"); assertA(0 == archive_read_next_header(a, &ae)); assertA(0 == archive_read_extract(a, ae, ARCHIVE_EXTRACT_PERM)); /* Rest of entries get restored with no flags. */ diff --git a/libarchive/test/test_read_format_7zip.c b/libarchive/test/test_read_format_7zip.c index 1d1e4c75d2d..3c72595aeef 100644 --- a/libarchive/test/test_read_format_7zip.c +++ b/libarchive/test/test_read_format_7zip.c @@ -87,7 +87,7 @@ test_copy(int use_open_fd) * An archive file has no entry. */ static void -test_empty_archive() +test_empty_archive(void) { const char *refname = "test_read_format_7zip_empty_archive.7z"; struct archive_entry *ae; @@ -119,7 +119,7 @@ test_empty_archive() * in the archive file except for a header. */ static void -test_empty_file() +test_empty_file(void) { const char *refname = "test_read_format_7zip_empty_file.7z"; struct archive_entry *ae; @@ -609,7 +609,7 @@ test_bcj(const char *refname) * Extract a file compressed with PPMd. */ static void -test_ppmd() +test_ppmd(void) { const char *refname = "test_read_format_7zip_ppmd.7z"; struct archive_entry *ae; @@ -663,7 +663,7 @@ test_ppmd() } static void -test_symname() +test_symname(void) { const char *refname = "test_read_format_7zip_symbolic_name.7z"; struct archive_entry *ae; @@ -720,7 +720,8 @@ DEFINE_TEST(test_read_format_7zip) /* Extracting with liblzma */ if (ARCHIVE_OK != archive_read_support_filter_xz(a)) { - skipping("7zip:lzma decoding is not supported on this platform"); + skipping("7zip:lzma decoding is not supported on this " + "platform"); } else { test_symname(); test_extract_all_files("test_read_format_7zip_copy_2.7z"); @@ -795,7 +796,8 @@ DEFINE_TEST(test_read_format_7zip_lzma1) /* Extracting with liblzma */ if (ARCHIVE_OK != archive_read_support_filter_xz(a)) { - skipping("7zip:lzma decoding is not supported on this platform"); + skipping("7zip:lzma decoding is not supported on this " + "platform"); } else { test_plain_header("test_read_format_7zip_lzma1.7z"); test_extract_all_files("test_read_format_7zip_lzma1_2.7z"); @@ -804,6 +806,7 @@ DEFINE_TEST(test_read_format_7zip_lzma1) test_bcj("test_read_format_7zip_bcj2_lzma1_1.7z"); test_bcj("test_read_format_7zip_bcj2_lzma1_2.7z"); test_delta_lzma("test_read_format_7zip_delta_lzma1.7z"); + test_delta_lzma("test_read_format_7zip_delta4_lzma1.7z"); } assertEqualInt(ARCHIVE_OK, archive_read_free(a)); } @@ -816,13 +819,15 @@ DEFINE_TEST(test_read_format_7zip_lzma2) /* Extracting with liblzma */ if (ARCHIVE_OK != archive_read_support_filter_xz(a)) { - skipping("7zip:lzma decoding is not supported on this platform"); + skipping("7zip:lzma decoding is not supported on this " + "platform"); } else { test_plain_header("test_read_format_7zip_lzma2.7z"); test_bcj("test_read_format_7zip_bcj_lzma2.7z"); test_bcj("test_read_format_7zip_bcj2_lzma2_1.7z"); test_bcj("test_read_format_7zip_bcj2_lzma2_2.7z"); test_delta_lzma("test_read_format_7zip_delta_lzma2.7z"); + test_delta_lzma("test_read_format_7zip_delta4_lzma2.7z"); } assertEqualInt(ARCHIVE_OK, archive_read_free(a)); } diff --git a/libarchive/test/test_read_format_7zip_delta4_lzma1.7z.uu b/libarchive/test/test_read_format_7zip_delta4_lzma1.7z.uu new file mode 100644 index 00000000000..750769c3e4f --- /dev/null +++ b/libarchive/test/test_read_format_7zip_delta4_lzma1.7z.uu @@ -0,0 +1,407 @@ +begin 664 test_read_format_7zip_delta4_lzma1.7z +M-WJ\KR<<``2BP`@-648```````!B`````````'T^3LD`)QO*P@;2+(;6`.G? +M97%G65J_4ERCV:^K1%6D4`M822)8PY*%14J=_<,7#6T/3RFH$9!9G6HOBE'E<0M' +M0-5!6&]I9Q(LNP>FO1,4C"0-HJF]E+UO?$`OP,0L]9]-?IRQ"#_84'^\-:$G +MT3JIHJE5;*\M)]-TIEK1=3?[2#(5!+N!_HL=H!H_R)BU+F9HX\D5.\?T=(M` +M=9=W4SJW579?/KS>1Y+'M^%0#4C+X<'3U$3C&%='!5[\EF[@4#2B9^U]FY)? +M`J8B_0+7B.I$N.X)PP3;'V&J*6VY.!&;Q7R,;M8N$$GCE7A'DD("6>XDN+^7 +M'[7.>5XJAT[)1$"IP%"H\ENNG?(IVD$"4B#R#;E,KWX0"(+I)G\I;FDXUW0: +MG\77W)*"$2C1DY7G2A@X<7?HF<0(324$@RQ94+EXCPV;A\!J_=-IO`PB]JI0O;215>3NFC>&L@A8ZVO8G: +M(Z+'4*>R53SX'U!L=#-R5/?1CX"K49RW+6#"?:O9#&F-VU+]XA>-H/+P67D. +MZN0JL3&7/ST/0,:N;-K'@%MH5*U@'\5C)M\[!]I6*3,C]3NA^OCP?_.^L? +M=17`;X\L"SHC@$#^"05.3&=DUY$\848Q-SC.@/%KQ:P`5J3YZ^,Q\-/Y(6LQ +MP?6TCO52!37-BUF`NWYVMM2?O%GP33Q3P%?#">B/A68F2MV1P'FKVPF);5);K1B +M>8HI`'2@,V/:[^SK\W]3Z;KMD.*+:9B<=!"$;J;;UE5*DM)][UB? +M]6V.JGB<\EVIL3WF^NX79\"D2_^:2*;[&U%K7_@JZDKEF1,3>-*2=:I*Z6Q%6C)N$U>TY[(C`P/L=7ANK-S3-TT\L:SL.T*&Y0>E +M.GQ/D;-/0XPRM5SL()'1_^7U(H`O&?G,YY4X%=>F@:@Z-KF"#'$:)WGH[<$, +M.1GS0RT6+#EYTEZ8W(/*D52"P-B('Z;VJ('L\]V;[3YB+264VOM'M9 +M/U7+D0$Z>XTTR0PP685OJ%/<& +MJ2F(<2MA[/"%RY6$59Q4^<^.2E4`K*^\*=EF4`D<\@V"R2>@9+%ND3R*?DVC +MY?U5RIHO)]4_)8R<3XLHQ:ARO&7:7!:VK==FV^WJ;$;UM<&(,B#=E*6P*"V"T5QBA@I +M!4R$!8.UO\`TE@9K9&W_'H:$?K3:4(%MF):*_OVK^A>=63C@11U@T1I"1Q?# +M6CJRJNUTIW9D'7P=!P341-$$(0GVW+S/D5NL-H62CQW"4(";.>F1#VI1`SN^2//BUZ2!*N-S5?\L%+&&+]KQ%-VW#[C)/0LX@$90T;HK*16"?-10DTO0 +M>).+H4UE!^5"8EZY\AI;S5W!&-W_GR_7YP*YD*]*(84G3+C"6?R[@K<$M+8" +M'9V'M]T:$P]LZQ6A3#<)_X2D.=BY9BP7WN:17-HZ=K8E9V9>'#%.R$L/'`U2 +M%RBA6\@>;DV"%M-2Z_VL]=$Z/^)=`$-)$CDP#?3I3M&Q"21C?*R@#L:;1=** +M>6J6M\$JO&[IM%E1\K(KV#CK]1!0:?M>([H%FUMVGTU,`#D*,+%)&$FT""V` +M3=1]S*'&PDK^6@#Z,&X][V6I0Z^[B8*7P?4_5N'E9`)5*.4!K2G`=(U@/RV> +M"C?],9@_Q]#\G67)I_,)+$U?R>51LS+,1<0/C$RW$8A_)U)K0:!3GQA004^( +M:U*X8T!*T_1#W1V4@6DMD&89Q$$,KQ\3F%!52496 +M3-!]GJ5^KWZP[LWX!PPEUI'YM$#^I_KLT9X0#)6@K!PWB_NF@ +MWT8/RU2Z8]AY4K"=0@6$,M"\?8/]ZFR2&1&`_!3U=IC.6Y0BN!TA.6C(>Y)E +MI%0?'CJGYHT2-)@CS.KV"@Y<=3%Z4N%FE7E--^Y651G3+2.IEL@BMU6O&1?8 +MX45]0!(O%9X!M:1>K`YGV^_O%/GM_5>+640WA4F9R0420YS.DVJ\99T+VE?TO``CRDOS!&U(=)T6!7O'S!QZ!/&Z+KD=FN8U)\$M19IA^ +ME8N&#-K%0\KB=RE(0WMKCWNFP/9(//7_,0.J@:`(8F,M63OAJPG&`F/$\U>\ +ME?3``?\,Q!FODDU".=+F\0>6-QN([3HC%L$7E(5*FNR9B/R`O\&8;<:8U"H- +ML?X;3TE6(>O0>/9T)7AX+(SZ6/D?FA(.D-JE)"38_Z9*0\%&R+`7Y%"/I@__ +MWF;"!AYKPC`NQ$A]4AFT!ZXW6G-CK3HE&(*Y:LP^FG8;+QYXJBN"!P9@CWYC +MNX@XHZ>]I0YW[,6RH'.JY%\J&"UI8,UC!6+9BR$8ISK9U>KC)*JZYH[[*XDY9`UXU/1_KC'"'5G'Y"&QDW`4H^?0 +M0ZOI`F$V4_#7+OH<),CK;&JU[^F#;AL<5FW0%]&2.AG#K,3E8:ZIWK+P[/`-['JND8[[^DAI`"ZV>]]YO#83_2-Z63 +M%G!2V?XI;66V?((CDM$I#793L`;V]-/[,8_!%6_S2H=/G`\M6 +MQU;]^=M/BMU/?,EQBMJY>6@=21H3LPE5LF9XL/AB4+8E.WGE6X2T!O\'-(WM +MEO'%E0`NU;*PKPV$PR-M9Y%1`&/MC941*O9L=CM/9_A8#*38Y6[=4E-`I +M(M2?3[;8&3''0#RMMF'CW$_6L@E1\V%9^U]/F&G=&[-!=R-XO]=I0O55K3CBY:66KWS>^MJQ\9$VL_2VBB\1W1^A>=][1UMIL$].A,T,W?A5IA:W@/'.WAF: +M2*K;Y']X8D/,;&X,YW-(C:O>"*@5_EZP#J]'/X,'`OZU=@2/&;O@ZX(!^?H\7>I'OPXHV(.@N6[6&;7[*G'YH*M+W>S84F&^UQP/>!^$/*J6#8P);S!S3ALHDN3_BL+3>:8#XL,V3. +M:69'F<4LN!:2(9RP#:V#A)'<`%`CMNJ[^WMKOCK^K.%J_T`@RA.`LPH:_W`3 +M-#"&2!B6PZ&30#4F:E.)@1&KRIB,&JIR13OQY'R]Y(%?K\"/VL'(M&JII +M'VO>J3U#_:[LB-JQZ9>*2.D]2_@U1`>CDQ"L3M0W(D09XTJ$>+T)\6[8[0.P +MPWSWY$R7A.VC[]3SC&-%I$,#)0V$A_%KF."AMKSX/IG2T%BRNZHN$2`W]O[,:4=$*F=AM(#HRD(`[!&`Y3>]="+V`@C<5[5D6J?GMYQ<" +MDEL"N&A@L)PW_T=K7L6HBC3@-5W`S9W2DU9A5/'LQGM4*9TW[;#=LDKA[Q`H +M(XK*DP6REW[4U@-<@"%&K4^-I5Q]W>)[+33W#8X5-LY0(6)P"*H]IT$=PL2; +MV7]>=7S>WGG?H%DV>=ROMC->C]68@]YF;!!6F53BEQ_L +M`0$I*5WKS*W7G>]2YHHA1A)DI11RZNU3 +M(HXMRO2C5)*;!Z4_Z_S;E66MJ%"%X@KZ)>2,IA:E+O:9F4EHL#'D0U](# +MZ$1=A(5"RQPB"W:DCM$M957$TTX]?;_"W]'#,6[#T%:=BU%45@G>`(0W8HH;2WP.:> +M7X.^L`0,QC6'QB.4'<:H_;?[HH55KK+ZZ(K(;#4BU/6 +MM]A-C0R[-7?A!\A$XV)ZV<;3>(#PWJ'G`A1H^M73&2TBW80SG"6\;_OXLLVX +MYX"RW]>A3W+`BH'-7?H)$L"JS&0PLA@6NZ_KV+$G$NV'N&&+PN)M'G5`7X^S +MMS8K5ANE%#L&\;1RA3@"QV;B\,S=(VM7*6P.8;7>YK]SQZ5)/T5IW\X7J/F) +MNH5RK0RF!YFU;``:"/K48?)96)H:VL/WCSBK@FI: +MEG7O*9+W1\`4#U^CUUD)[A!W)[`::QDFW6+FWM>5AA5A[NZ/@G]K[-;E=Q/+VX04AU1D3SFJ35+AHSQ.:LL*B@;,;S@)LR> +M(C]7B^7VTH$RLX+1JGD;-V!+R,*5G%7QYY`>AG>9RA"1YQOM]^O*Z# +M^.F?[5K(S6HC:U-CI\J@^=LXH<]U0=.?[:QWLN2_*H:.S/\_)XG%V<6-"3:+ +M\(K_EQVPN-IU^YY=#6Q+')ZE(BAR.DE[]QV?,&/$]UVN:H$VV&H!3S]=(Y88 +M^?CP.6IHOHQ&NT/)MOK%$E90.VO&>3\%W`0*6I@[$&"OKU1/Q,"7YI)EYL2Y461?+1& +MM2<\%E#K*'87RWDOF@X<;E4-LEBB$0?(CH5(ULI^S.D9:)O9D\52XM*N7>?_ +M&UEV@C3$3(!N;`>4-CU_ZCX?WFHBV"K[,!:08Q[@@`Z%).)!O>(H__Y12NQO +MV+%>&TZS;9\1Q@D3WF_'37E%S"6@N;K@^&PS;2PQY\,DRW>;X^MK/*[QW(:@ +M-`IW$&7U>3@IG%W\HDOMTO*UU>->\P).[R-8?@JD?K.5T:8`V,N8_^@0 +MC=YQ'VNPS%3#"4\BVSY5-VJ&*D6Q(C1_0B#@<7A?>/-_Y:F^S;O4J8-0->_C +ME`/I>\%4@M:.9?:,@/`*M6]4[_H#":*BPKM&-*.XBF\WHW,P,D71^62[3?"9 +M0>H01XC.;&/,& +MY1^?\5W9A*]LMIDHV:MDE@%?@SG"L)XLS]6;!X8B-#.%83SI.T-!WH_OZ*]6.6"(DJZB8:+4[# +MBI35;.F)C)J#^-Y1G_\/1-2Z%/^WML]Y`U`(!\%AO+R*+ROH'68P#W$]LNW4 +MN$23ZM0$*FWW>5==F.;B1#(4J&&7G;4?$7KD[4_0Y-S;G`<%O5PS_M[2\-]A +M4-EF1&L$-Q)`*YG38`;^"` +MQ$&?&V04*(>I(MSZJU>0BGD$KM,FR7P5Q[#/HCE9-_]AY)VF?;R%-I!%14OB]F^RU,^&Q-2>*XPN!&O""WQHB?EB7MV +M"*:BJ"UO6@U5(I]FX^]WAR+(*+TWZY(07;Z4;JMJ/35+;LRL*`0;'E87GUX1 +MXXBG5K!JQN^86V)%,-@BZR([\L(;]/"@FT*\#TS]UJ9&="`[]&@CSZ!CU9]Y8>(V&PIMKA*-%[A +M.67]I'72](-.H6+$I]S=NVIW&?Y9CMBGC'^U.[=+F9W5IW?X:BY$Q&7VE5VM +M."JPM-ZU!X?$YEQ#SCP3=H.3WDSV'JL[*^ZBU)2:QC=4$)*LG\18N&6#B&.) +MSF`5A9(^F60I>/Y7)YC:\(HQWGPH1@I?8*&>QP5[T*!'9^EMJ`[I9^%_[>G8 +M.$Y1V9$HT_(QKYGJ(Q=,;J0:<]2/0.4D[5M#XB\("W)S?WHS&%5W\Q0*)24B +MW47>9%4PG-92JL+CJHF("1+\P\??,G2>F"LZR360WKT.5XQDK@/Q@U0- +MMH2GF"N[F,E`U%L/3>U.^+SOM)/[Y!#H8(WNN56"1M)7)+9 +MZX^`QY$)VYV&C4A@5$MV6)N5QO5N[,XFLTN5(_Z/W.V2(MCY_4U9 +MIU'0<=YJOE&61^+4(+]"K%=,748Y;3;C(SRFD*LA,`Y\6%4DL!^'FUY8A-L1 +M'A)`Z#TQ@VO28XW:]>[$--59(S74PX(BG7CH3N:@MK<*!Y5*.77(A@:>[^FTV$+8V(Z[4+?PC-,N^K%$@->=:5KJ:(4\,*H6:W#Q87-,*CL\45D1I +MZ-BH)<:H'4=BMW(;TV+LNXVB`&U-JGZ)9"1_1ZC#T-+E@,QT][:&5UOYS^Q__\X[:=U5C&&: +MYL?V6CRK"/?%X=\K&]FRL\WD*$I@M8W=LTVS@EHN"BH,`&/65-=R2M6F,'&H +M&C=6_(_'8,6H5_55K>K#]2Q$82F7NP1[ULZOQH/Y$K[I-5A!=P?E1?;("/:_ +M=K^,`P316_*N15(@$('MM6YT^>[-&<\01RX!A_]AW?NVY%T;Q:,O8&"A&$\0 +M)C`VM8:WDF"6>H8JHDE&JL1!D]Y:50%*>`?_Y759$N'X8%38HE4P:<'N_DL. +M:E<2\AHV_WNS-O?Z=IZ].=Q$&Y4H.UK^.08H_V6/@LPF2'G2XMK#U]$I7NE[ +M2-ALYI2\T$TRJKUG1(BOH/"JEWN\O4AF3O)O0&J#796>G&/`5Z$/%]8Z(0.' +MS6T2$U5H=9/6>/9UR>'3NX\7\T:9F>I`2[!9>1:[PU"U(]\9DL8I[,YI]IMA +MN,8K3-\IIPCNL;*93)O"Z+*>_K%9]KYKY1O*,IF0@#V6E_:]3+1`>0IHIAVI!\T@MGNU7BK43RFW^X>!9-'$VON:PR,#VU]^!"O6V)V%*\OX +M80:!WXNCD!!SGY!E[,C)SK::L-;*TB7S'WNS62B1&)[PC>U.Z;EA"H16D<#Z +M1"C/>M8$_ZR*#;#\>*DO))@"]4Q;K?[W>?2\#B)9&YH&&1#*4)FXIV_7-.FV +M-EF]2(:P=SUY3G]8)6KO"J'#(.7L'W"^#SYQN!I`DCF4>4-!'`C/*/`%23(Y +M3O=L^=4*9VE-#4"46RX(!\_7L8'%,;'G".''P\#FK=7C#D>*[,3I?%LS=8H6 +MD>]BOWEC@)*B=YI)M;#!]<(!6"SM(`HS*7>1R(,]:S +MIXBX8:"N7'.PR2<.)P=%[(/N6R(C:!=!&D.O4LCN[ +M$0U4^%:/8&>*MF/8G>+`]+D0%1W=LR&O#\BPED>!L%)0@)9C][;4@>XSM\9. +M:)@-;`P;C2R[(9V``#!;2B#!((RQ_=Z6A8FC13AC)KPFS,2C#KC@0,,!=4?R +MNT"$]8]=HQTZL(EN1[58BJV!V[57>%W%7X>JOLBE`M$2#H$]D*^XG5$W&.Z" +M,UMY\(ZZ?PZ2Q8I97T1HY31%^T?DEJD<3B#IQ[R'N(RF;7Y5?FA:X>SN +M(7R,Y(H;,A)1F"=-US`;XC%_I3B;D?T7FD;8![YAU#I-;%CXW7JK^PX\LV7F +MA2=25.UV$OSP6%60;NVVTJ4.A4_NXC%ZG +M@OV7P!"@KL+@[/0U@YU0RLHH(\`D2/S8NE73/1759@?VG-[#^5K)-V( +MKC6BB"B-J9LJ?F(BIO&UP^-/FN6/E+:U3+;`=]/`ZK5#%!T+@O#UKQQ$3>V` +M#?N3<3,8.])L;@N:L%8V +M%G.KOPN7][!"[<'*KR+>`%0ZO_69&2QU.UUBS4>G2\R`)1#0[B9[]O"E4N)/X +M/RH)DT><1X-KU`4F93].H>N,X2VLZ]+;::6/Q72]V6FY42.I'7X@@09-A],I +M3!,:C#/^]1Z>LS"7-]A3=Z.>]>)V>F1T\KH9=\5.07;*4JCJA"%Z`\C>PA3V +MS>5?9UUE[S7/+R7B>K_&UGZ!Y7%0@A(T?$I=:6GZDM:)'2;2-S9/LO8OQ31K +M(M^>-'.XA.G'!TF$BW7LCL,IF@6.0JR#Y.\(P;V!X74=#QH1T0%T%C&SCI$* +M^'_2-=-9JNC"#ZJ",4\]LE*,%0[5'OKA9P\,%&QZ%F +MX`35=#VBJ>BXGVQA2XH#.SYX`),GM0SI9](2TZX1LH!+S*$BXB()*)C5L;LD +MEB6YHX1"HN4=2%H*$Y:LNC^=5-M>#$I5YA)@WM].QN[0];"PJ&F#?,.BVJRM +M27FN=O8,P?\`P=*M!EM!DGG[H_UZ8<,B>%`A%P!,O[/%@[8_5"DYRX51)=.` +M\PHFMJ90"*@XI.^8F,9'T%FYMW\E%H5.4L`XRO\.=X.+42F7Z?%=UH.#\WWG +MJ#_"]0F<4,V6G#T<7-ZA*MP+`CZ:N`KRI$N5NP1N%\2=SNAY40I2%KO\6QHG +MQF4KH'C;5@VCGO(394SKUP$USQF?(B`3ZU:FP9BR)&K,KC1`$X./> +MF-TOJ2C,?Y!9K!B:J`Z''=?RG,I%\TB)I;KUTT-A66=SHB=B`D57L*\B9X:Y +M]7CA-Z&[`7"=9Y`<"1V08NK?,;CS*5A#>0SOT29]?W+:$2WP(IR`6#;7(U"U +M5?H&ZQM#?;Q$RJ0!JKC2I#K3/(!P6;2EU!O,1:,2B%@4-;YL>TXPH0)@I7`P+BM<:Z +MD'A$\_+O7XXGNHD20)0N--U#>LA+8IBW&@FWGG%SU[A%"$$L2560DF&G&SS- +M9'V/_$0KPRN_X[QMJ^@2SK,YT4RYG,Y[19OVYO,1[RM8HV4X+<>8GD%0#9>. +M\[9%/ZMK<@#&:I79^69,&>(IMYR7E>\;$&:&@S;'?%=7X3)7J$BT>)0U_TYQ +M9ZE9!;>)S@$)V(2M7+YD#U6:R9XKNH58$`Y0[?!,!E_%;P$@9M[J4!2V;?7J9KR@DK_5&0Z4D%.>R% +MZ):(=I#:@8@P47-WUYI]GC3)=ZHM-RGW3DV4RF-N:;/ZC;F,`%XF:J3$DR^- +MUO.%(6\"F@9D]+N>"M+.`UPM7OEQ]FL +M=+*8#`?/-V6:^@Y%SEG(<..;Y;(H^$H,G%&\,DFEB?*"!6]@VYG!GOOC!NCP +M3GP'Y[:+1P$N#*F?6(UV)A?.XYS62=)&BQR:)TO^'6L6:O?TNGOHF>AE>VW3 +MQ+^7)L[9\V>8!"AT@0/(5?/]9""`>7U]FAMD(3>IHQ +MFM)CGJ,V"3X.3!Y`BWH9:/`L%%IV03`3"CB*>Q[@>,M.GO%(M,16IR[4N-H7 +M0_F1S`[>>ZR>0L8I041N/:1`ON +M)P)JZ15?2%&?).C&0JD<30`?_:NO=WD!HX_O;?[SFKQE1X-)C%\Z\("^ +M.SP??@UG)[9(>E$''Z.VX4CG=W5`"XDM.(ZO43K*UNWT/9:2?8AT(),]T]8S +M(D-VQM8A9O)O0Z%6U-FQA`CSH)+QSN1O#H]&B%7JS5]TDHP%/><[;6B +MV#FVW&`*ZQGAFSV!#"#H/B=8Q&%J\"SR8@&8R;`P1+6\A(\8QC/%$/.?1ITG^19+V--7 +M7A8J0;PBPT,)1REB/^984W3T;E'-EF6/QO\N<>WJ-M6\MK//H)=__J-E`'17 +M:M=Y]>J5K`:?=";=62H6^%BEO%*IF.JF`/4N_R7<1IW&[@#EJYZ"_S\W<^%B +MDRHSI!"+1=?<+J0,I-+A,Q?:K.?FGHOT-M#2;F\(-L_L:"48C+`"W#!ZU&0J +M^B)6X;P)5=7&#^E5`-:Y>[.UFGM#3X+KP1-W>^F,Q:;@T:YOV?Y]J4CIVM2L +MO(/=LOCHY@R&HP3IP9LR))TK:`OW/A=H4-HSPI."(I`[)R&CI6[4)!1J3"3F +ML;%]WD8X8O^[L1T$1#(2V;+(X&L$\F\8:>>KQ8:IB#.F).O(1L3JB^MW&%F`99/EXP1-^>*@"NT3'^,,:C>*E=#?-$'-P+W*?DFGG+RV(V7Y1DD%^13&2K\[( +MW6&D;*IGQGN@/@75IQI3B\.R$[WG%`][8JZONR"G!MD>;DO`M#S7.#F+2*EP +M\)D<(Z)5E6_\NXRI#.8FPSMY[SR1 +M_Q!M@A"1["=3C!MC$\I=D&4_,LZ6.VB#9(R-0:RC7N#H)8`X;.R(OOI>%0(- +MA^G"&8WSYE=:$LH&KI0R8\A\(245F%S>,>*@!\DIFN2D8>UUFRG,DY/3B"QY +M%R^8%]#BE*SP\LA-J#*BHOP^KL!#4'S@7K:BXOM6>]K(\:Q-Y#9M&:0''!W1 +M2).:.8;W=B;:*A7[8UE/I^#OS#!+K-%75./$>*Z/-R$5FY_2"9%Q%+IGF-,8 +M.*!/U+B49C6!7B9CFH3^#$0IUM\_EL[I;^:[K^$7E\.0B/0U::D"<)>I!H=4 +MT#D:R$E]*;2(U2?8>I2IO<-9=&##O32K$-T=0#`6I@L3"W*;&YZ21.V`TE." +M&42I%D-,[&UY!L>A:]Z)MW,9(#X)6@3*40H\EU5C!:"1]KT_2Q+9W9)HD):2 +M==I=*F'KQUX_VQB00Z2)COJ$;..3>7=7="`"^CY+(%/>)=4@"<1L;*;0`D_2 +M[PS93J2SI=MS)=:M=P`7"*CE@##"6 +MJZ&B:%LTQI65O^3"$0@KN6.+'+98S#SRV?B;N/Z3833[SOG(O]W?(!3SSB'C +MU7R"-#6+C'Z^/>6D/4Z"<\%G;E:.+1#F/4R.=BU3_1&FE**#EX6'J4E?-)\- +M"O*X52TK19<%1A'L$4O:<"H"D;RD[`>S3ARV(4)/F%J;! +M\I$,R!+>M8+'/K3SSZD/"3Y(01+;E1L,G1YU-?,T^"4:!!^$PKA7T[ENIM$P +M]888.#/ZFXZ9Q8&&BNJ]O68EJ^6D12?)S1HDFSH:C$\'LW"DB%7QB;=I$X'F +M,#-2AV!Y:FS]=QDPR51@_7=7,H,P_X6AR#'*VQC$3@?/;KZ@$RT%+>)?!"1K +M5XH^VQ&9SQE^1NL[GQ +MWX4^.,=&6A()!6RP1%Q+U"K)'U8C:BC`Q1"_NKW_Y#R@='88JUY7_"F##Z&5 +M94Q?2'(A"$PQ%%\;_\2:3:ZFA6%?8PY97Y9N;2`+BG@0;>B[[`;7MH$T7XB_ +M>M]K821YHVV6#)5`2CQW.EK4:LPGE.!4J:W#X13RQOA7"NY$)-%M]\R'VH1< +M3GYYF"S2`%941%][8L@\,,VZT\+0#:?FNF'-ZV*->]#M3PN2>M'7ZA!2V*`& +M`J@;^%INM4.S]N+M@TXT9[]P6]Y!3-4\VC^MM)E]GMP)'D+1&R\FAS'C2S,P +M3/SNG2`;)J9(`HJ&#XJ^(T81,J2[H4Y"!($_@$X4!+E0`(:7F_'=A4Z5YLF( +M3L%Q.UKWM%E$$YD<=JZVX2:3`6F2@M(O"&T_"/!5&'-E3=++;:#0D1=?U*_Q +M?]5%7@%IJ3R=)`0TDKU"D=SG"[K1'M5R/710FDWP[',9W$JLL)-,?LK4;\Y2B/&2"XF?9MK[48':8.M^0Y/H-Q(H>00X.;">\'%$"@;DL.)[:*R5]V!W*N4")7 +M**KA;-."B]"3`R4)5TMDL$Z=BUGN^'/UJ.,&N-T:(E$'X"HFS'.(F7U%N@]2 +MRP4&YHX`8\^M)$$[#?U,&WK68/#!.[]+Y`+;Q@DXORL?,"^]*I;[I]YDMX&Z +M2%/6I]O,]R>\&JA^Y%Z@WFL]TMS/VX]*VJQ)FQ>(N&'@$WW7VHC5/ZK,QL3A +M`D[`7@WAN34HL2U:U?I[&O$1^,(-]$6(!E56K&>](Y%IYD:-'L!:.^A][3AY +MBX+Y;0A`W-)")Z^PM!W4(3&M\1K!42/KVXK?&`_#>$(+)N";"DQ;S9A\0%+N +M4LP93U4+7)B];I)0,SR"9^BU"H9H!%F='-GP(=5>U:7@D>ITZG&0SPI9"@:$ +M(;D.M$PIWS]._CP#+!L<&!@K/&QW\>'&\DAZ14_EV"FT0RL9U!;G`.&G$5'Q +M*H<;>XEOE+M?```ZPK@`B.JJ]H]EB+!K>0-;.2-,>[(V1T0-'NIXE'OD%]TZ+>2:"TE?K1#Y:&=@0@ +M0<8"CL@H)5G*2_8GG&B6UN[&]?B)]O_D>2%)UIU_';T.!GV+=4(NH1YJ"5.R +MK6VT]E)]M%&H*,9-H1^S&J)ZD?P@P_=:/BF7`2V0BZ^GV?O#8^F58L:)OPXS +MT#X'.''TMY!JTO-(C6YUWA68@2VX6@+UQB[3#QIZ +MGZO?T9/<_!I,F[MV(=L+3R-@,63-I,1XX>?[N9!BR0=O-Z@&0TW&B7[VM'Q< +MDS,^-V\NCX:D!F;?7Z\6?`J@3-S'Q)>HU"10U;L^^;0'X!N*BLI[`%X^/X;D +M![C/25?/J8J1$PW6D[UJ[C0LV6<(QV*(L-LPG/!,_^\C1J7YYOE_O'>9,LI! +M!@YK6$%OD\O,>HRNU=KFN(7#2U8WTF_PS^*%C+O>-*NN0P0$'%>QQHA]Q;)B +MF*J!C4?H,CAB><5PO"E>@FT0@+VEJY?F.^GD8P28:?QJ`8*GZQ.I9P"V"APO +M/_7RBZ\VNE=ZW.@J4;21,]B$=33[D21X`-]08D;V+'[I4K<.0QLX,D@"9<(- +M^Z#1#-&\.)4[6DX]^@=-;'NT`1.^N@N*LGW&9E>DYBAX4N4\6\T_T'ITL6^= +M83<]PJP560@+SXZ\S++[:V@R[C9G;K"E.R5BUC@BX#X$1,R5]L'*HLO2+(:+ +M8:=@06<]YQA"U&>&7%ML#I?*Y3(SO$1!B`3_+P!X\9GO4B$M"(S=;F;_UU9T*`FOU>O)\/_$4"M@C1K7K^)_4CBMCK0M3B].-[>G0) +MZZVJ/=4.8Z>?(248O?);T8WJAMTCN0[%PTWU[.-CUO'5>4$T75'Q)O5".',A +MGT!WALW&R8DV>TY,J6^NQ?*=BLL^?G,#U3'U;#1NN,RZ7'HC@#5?(D:X!;Y` +M\&6!WI[+ODO46HR("Z.4'3LK^KO&$ZFS,WE?,DYJ>#DK4';BH'!]D&?X]\YC +ML>[%;DF;E$"#%"@M8LQ#H2]K.E2K^Z"ZG8YC$\IN88<0E>>;``"ZH1*XN8)D +MX*'L[KI)>'W6L__0P*T(I_4693<;@A%\-#A6\H*XGJ#/2T46JOAK+^YGH`;F +MI=\"5S +M0"FO5T"UX#J-Y#.SW'\YOS/@H6I('!`YJXDZT&`K$"A7USET[I3/+RU#9]ZL +M6,(TT&9!TY,]1FG=_^:X987GD_2DY[[GWK19QP.39)F7:#P9`&=(.K5Y`CC" +MDWW/9"P%48&0'VD8$%HTHNVG.Q%O]/.<^_)P0J\C(.IAY/;-!]6(=#/O'C2\ +MIBR:31K8@[[QY<;Q\1=A5[QSR"8B2-A/F1)3G$?91>KY_[94@'N33WWK%.M$ +MPR-G$YCMD;W7S[?]<2V4^=NS!V0SG8%&!T-^5&QL]BLV49Q+21RT7-<@&M;& +M;B^Y$&YDVO301F&2C2_?`7=#ZFGY'TDZO;AF9_\9)65?9]V#>`NK:&'^?!"I +M\/W08`7$K?_^S=FA3-2_H.^K1.%[X%VBHIMRS924QBI5M29].U@D[CR>\LY9 +MFCH"/RB?/8KRL7>1K?D;!CK +M2JFRV+?#2"/_X5W]-J('=:Y=YXT>)V*&&^\]E$Z*?W"N+H1_S+2)"H3&@;4/ +M*](.UZR,;LITE-#=%EIO@6%T%VR9)*LCQV=&T_7S%_;%%L_JSSM4YW'=$C^' +M(]#AS$97_A3&IZ"$+':9E%^'7]1?^:'!@U7[Z5$IXAPZFLR^ZC+=0H+(Z&M[ +M4WH0O\;*[V%&.:C-W.1Q;].Z>PWGQM/Y!=`?/+!#[B]:3839+81=@GM//`3BP$']S^^2NH^K"Q[AZT"AK36LR\;WPW."@%Y_F +MT3>FH?8UMQCKAO]LV%%IK2:_C@.;@6"LT_IV2K!2EYX(!K]6027B#J#P4C+; +M[;>%TLKN3']+5?HCUK'Z5Q4DO!61L0H>D4'1^9&M'Q?E"MSHE/-4,=8MJ/$2 +M(C&0OV6H`*50KKOLVM-XB_5>-]==):(Z'$ZF3%COR%=S,7Z7/&9K=3/7>R`( +M#I$$ZF_YC]W%\%J#$%R"/`5#0-V_6S-^C5EV9*;%L)G::QU\GY]D(H@5AC3Y +M4R*.IX/!N"R99ZFT?@3$7D@>P]]=,\#"WTH$EB,Y[H0_0\Z_H<7[Q/<%($H8 +M\RZ3@,Q[!SKSV4]QXCB*3GIZR;M>OZT,YGZ$@?QT<;CSYT4*!!)F9F3-^\!Z +M(EFOXEYT&%J8U<%T"HNK'$9AQ=D)Q90RC4!OJ]-1.Q0EGQ1QY<,QX\A;J2XL +M@(@5#\!`)/)88#'LT$IT?\F8*%_&@1W^N&(PSJ$+<)M[`F@NVC91DB7)+;3' +MZ'K4Q=ZQWU8YRVC_VR;'EA@%8U]=#2G)W(2XE0`AU(\%/OC9H5"/;&7KXE\W +M?.8XVL<-,[,I\)HD=MS=Y2THV(3)!9-(E+.NU.DWMSN]L_/#NVH+?XJSH_0A +M@8%X-`4)9ZL`J_A78C'DF;G"VB"?P$O&ZQ=Q.0%'6P`N\GOZC0*)=4L'JVO; +M[-8=?M`X>;>X'ZO42T*L'SVG26!RP%RFHTXITO7+J8%U_U;6]2K#?8BB;JS; +MT:%^:II9#9NP`&"(M*-G;17!KI]F28/&7+TLGK"6?\4=@T/>TPH$5F(FPD"]OW-9JX@E$!`V0L1:-'V3Y% +M/-P1(CGA/<#AS@)>J+:>E?K,$S=\WS+#W^KIDQ>>YXE80`\NTRO%0%F?DL@O9.'[8HK&NW. +MJ-U"#/7M=^=+H1@.R48J4L&BPI,+7UJ/X%"W]K[%K2*`&5_9387H7!P'SL(O +M@+]D4VV'`$]+\!"'M.FT!@5XVZ(]!$$]4,/;Z90?;94YG%5D(0"PSRIDG(]_ +M!404$.3*!<^K"A^IN?(-?#M2F-U,5_W`(B9E+MTAY%-5CRLQ^(.H*0PW/1R=]4)?8MVX(N1 +MT0'<,8)MN9_Y3_&G!V,YHH$!<_:>=;HA^AYX`KLQ^097HXMTQC-ZPC>!P*W$ +M"G$]P0K%2R!NI6;K??%9@$A?&>7-:<-W1TB;V0]U=$6HT@5@V]EAI(F#:W=T:HH#2G44M_AZS.IHW4E +MQ]?O%PPW9S&1?%5F@JHU@AX5T8$A(L:RP]A41DR`@<;V++D!O'G21X],J*MM +M?8JF).WJU!H'X5:L\?JAF(=`^2:$DW6V=+84UTU>%5_\@:3KH\02U!LM^M3% +M:)_4/GM"^_=M?]=>!K^L\R_<^VU!FDS]Y*,PF>NB"IR@!NVP'3@A*7VA%VA0 +M/XX(;+U[82(4]!.:]?2\SA,3BYL]I5DO5*NB3(N$E=C;.A$O+9(-8HD\<)ZTJP!O#0\LV*%!3*)Z>\KUXQR +M5/VO#I"EAZ6[2^=M@3B4W[`"-+^69K#M*/UN)=P;*$PRK;8); +M*&-+!7WXR4ZW;\2?2X?0M?@77]Y9IGT#LIQ0SCI>G=3($J +M%#M3&-6[J"N'BA1/T*=AW1N\8IXP)ZZ>"CJ;$KZU3-FDZ\:ZZ4^7`\$#-38V!_53T>Y<#VN7TL4!-#1#OSMC +M9Z#15ND>K9:PI@(KN=/GBSH4%S`&]2+3_8^#E\$3OBQWH'MWU6T;\Q=EP@_# +MH>O6BB#6M^"MN3!^=RE]MRZ"VEWQ'$D>@++.[("^\LQ,T*SX`6?\!+7*`*7? +M)]B=1!^YI&86T*6-0.GM[.*7M(>QE[HO'8,%S)947!AAL$+3%*]9Q.>TZLE#68 +M2XK1;PK=54+\A4J[L'=#`@2$XV'.6)DCM7*!+-I=LEGZO'+O3"B5@&=#-MP? +MIXE5:9*Q%S$#0+3OYZ#:GU,#ZA'*H6H"9S#%8='*\L%2)=QG?AB+[Q\CFIQ^ +M&^GX_?+E=EIL_=UM"@F58*?A*`YO`X?O4<#+Z!R`Z#,HD_<@3.W:]T"4_$>3 +M@[.U&%JEV-%KZ(L<-X?*5AEO2#F&@"YXX!=T)Q+HO2*T*,[<[O9VLTVTKD9R +ML:4S"ER16"LL+0(MC&_*DSQ?MZ1.G)2LAFM";J;(RE1>!<$-=GR&6]JN;T/D +M:'#_JP004=/^\0WT`J8T?(V05T_<["1R9KGA1WP@YBF85J;6R"9R^0=;3T6/ +M0L/M7[8S7Y4/B%[:L_-`$'G(#9E<^DS_,HE14SH&;%`F!<8(%[%W$9],MG>' +M-%6S!I<*40F<$$*85-P6Q!9B]&"VU^R&K$LLQF_&\Q^H-?=05=-H&25;A<5@ +MFKGV5>BK_JOD]'8DYH1C&>8?S(X4,.AK7*(0B86_\`T'&'=D62W;(.=92\<^ +MQPNGQ<$QDL>PVLPJ0"Q!71D)]MM!JV?"!,GOMMI+]ZK=85$Z"4V<<8'RT<2, +MX%W@\GJRS/B4_W4XS-8N%.J#$,6LT2)V>X?I3H?*K*83&3J=-<@A7%N'6#QG +M[*XC&=@%O=^!AJZTE$>VCH5%B$,%,,YS!UB3K\:[__U_/?W_L^9=+$0[]%34 +M$%2A`I$X_W$51X*$Y]?)/CQX'%U'2W`E#Z&.'5)\N^35,U"1;LY%E*C6[(NX +MNI%F&E9B(R19Y]:6\_A/!(>;^%9]LF./CM)1G`TT"Y=]=(8/X5N.70L*B$*; +M.8/6-;0\5)V^)[P(ON +MAA0'%ZWQG,!H&+GT"UYVTWI#G'6J:H`LK]COP.Q-+1Q)9N8]8YYYD^I+K;^R +MU`7(;"V/W//3P5I:!AX'0>XL:H`*B*>:.^LA0W'"I5YI;T+Q6+1(%+[VJ+)9 +MN^7\BFZ^U"$2)%5*7BK9-VI2N06O@'1 +M\')`*S#DBK>)L],YQ!G$#2#?*#E+K]?(?@;JW1@]6N1XNW&USE=O`IRR$#%_S(^ +MLQ.?0ZVF@+88#8L>CE[7&[I;2\I2=%DR+MR$-:4QV#A94_)A&,+FQ=UN6_>P +M989E%2:S:SVHZ2#*#`+*,X*NAX>"NF4YS9;V$<#)'L\R_8;51*F1>3X`,L8S +MM]]V4(%%6D1WU\7>+)7*/+EOW@S!/D57QR9#R3M:&N6SJB!B.5%AY20`P\UP +M12;DPNX'ER`G4E,87<\@D(.0#:7.%-H+V'&"M[!JAM&<:4P,F[,3*)CK>5KUU^MZCY>>NH`H'[3A'K]=&Z6 +M!?G>SAB]^W8W0HK)%-\4LG?10`A,G0;XZ]1S'[-7(T^>16]B0LC!;`3D.DEN+^"6'X[=A2O5D5;IU-M,KP^N783S%ZE\C,*\X;@P5X:QV^;T1Y#)%* +MLC@7GEE.\,]*4<[3!;`7GH#8/E]72:C]TCTEL:;387`2P+CB-^H*J!1^[C@4 +M%!55-B[<$[F!I*EX]=<5W0W=NP9ICH*JN4V6O1ZA4Z=4H_&GR`PS1]7GE:AO +M]?39:FOK'Q%GNE)%^FH>-98O$#/U?2`B@GD.G&L4_7`B`41A..V_D!!G3_8^ +M>G^$CBM*_#@W@>@0\#W#5\X1\&C*R#&=EZ(HU`90ZB6^9I*4Z'FH_\,L_5*= +M!$IL#Q7A3S!IYO!P]T5%9EMB7DM:A_78]9YN_[]+RZFJ4V>J@0SA#[NP-D#1 +M:C"-(%KC&'R>WHUS>%I2?_`H,_NJQ.C'4QLJS'XVE\)HT#0_.?[$2%/[!=K2 +MHK47V@L3JAGSL0&6M_HO>!KX61&'6#G;RZ? +M!%%NBHU2-_V7X.*[9ZK;\N0N=9M\=$>EL7#]NHAD\7*FJKU.^E:()]6(2ZR! +M3PPIS`"1YC$SY8Z/])K`#883#9&Z8:`W63_'WC1\^#.6!H\='78>HD(7]:M% +M]K(`0J,F>L/0N2LE$+;>/(89ZDD\U6W+CA<+.S'I_G+-S,*@N,HYR3:4#@,@ +M`MG2V"[EA$K`^P:O`^(.:(.B'FK@-M[`S"I$9W/**,=?C>5;I/!L0OST&X.D +M(&ZI*&\4M8D5B3-S,33)*R>/*X4I<8!V0>6YW'57OY? +M@S$?1(MILODT@KL2K2^^_L(;43,(W==PA>",I\?COZUI5C^UB6&B,[(<^_$+ +MYKU8,9";R/_2@+9D#WQ=@^0G*EM'TC-58)&V8JBD=]VJUMURJQH2=RE]&2WB +MN^;BIA!)ROUGE4Q"T3`@"TK6XT8E,^W0'N<*(4;R +ME=TAXS8SQMYES6>SPIVB!EOVR0I36T/D1_]WL5W#5N<`=^C(QRWIE?N@3?TG +M_Y8__>U%Z?BL^N9Z;F\<Y53SON2&L61A<]!T_4?%:EC9&GU84U/1A-[?4#[-9J%Y +MPD30#+9`6#_G+]%`";]Y\D6(OWXAZ)]]K%`D[B*+H]V2=^]M&[:Y_^L?94I= +M=M2U@)%LT]N%GV]=\A3GBB-K>A2PTBJE%<,<4XPGA)C(/1+S1*(E3&P +MA@6$5)V",Q[0E6;-*E0=*A6T5U.KY^_C66Y'44^BP35>=31^5S>,T3;IH^"$4%^3OM/P796=[G_HXE!"5@1+V#?H6"# +M[49)5#Z-6K_XMB;K;,MGSN_&I4"VT%%A9#$J&FMN>8)_\(G6@-]ERD58.OQ" +M_PZ@>Y'+TPY0Y2T3%TMN/,V\.16J8&X"5;AMM)85SNS$6Q[_8+2A9^V[>0T4 +MZNHACJ&`])R!9R7BFS=:[OL:HPQ@V'KC?/.[0-)\/2GV<5=TTD@X$``!!`8` +M`0G`648`!PL!``(C`P$!!5T`@```(0,!`P$`#,#K:\#K:P`("@$6V^8W```% +M`1D)````````````$0T`9@!I`&P`90`Q````%`H!```M0RMQLYT!%08!`""` +$I($````` +` +end diff --git a/libarchive/test/test_read_format_7zip_delta4_lzma2.7z.uu b/libarchive/test/test_read_format_7zip_delta4_lzma2.7z.uu new file mode 100644 index 00000000000..951da15ec6f --- /dev/null +++ b/libarchive/test/test_read_format_7zip_delta4_lzma2.7z.uu @@ -0,0 +1,407 @@ +begin 664 test_read_format_7zip_delta4_lzma2.7z +M-WJ\KR<<``1,P\W78$8```````!B`````````-6%26G@:^I&6%T`)QO*P@;2 +M+(;6`.G?97%G65J_4ERCV:^K1%6D4`M822)8PY*%14J=_<,7#6T/3RFH$9!9G6HOBE'E<0M'0-5!6&]I9Q(LNP>FO1,4C"0-HJF]E+UO?$`OP,0L]9]-?IRQ"#_8 +M4'^\-:$GT3JIHJE5;*\M)]-TIEK1=3?[2#(5!+N!_HL=H!H_R)BU+F9HX\D5 +M.\?T=(M`=9=W4SJW579?/KS>1Y+'M^%0#4C+X<'3U$3C&%='!5[\EF[@4#2B +M9^U]FY)?`J8B_0+7B.I$N.X)PP3;'V&J*6VY.!&;Q7R,;M8N$$GCE7A'DD(" +M6>XDN+^7'[7.>5XJAT[)1$"IP%"H\ENNG?(IVD$"4B#R#;E,KWX0"(+I)G\I +M;FDXUW0:G\77W)*"$2C1DY7G2A@X<7?HF<0(324$@RQ94+EXCPV;A\!J_=-I +MO`PB]JI0O;215>3NFC>&L@ +MA8ZVO8G:(Z+'4*>R53SX'U!L=#-R5/?1CX"K49RW+6#"?:O9#&F-VU+]XA>- +MH/+P67D.ZN0JL3&7/ST/0,:N;-K'@%MH5*U@'\5C)M\[!]I6*3,C]3NA^O +MCP?_.^L?=17`;X\L"SHC@$#^"05.3&=DUY$\848Q-SC.@/%KQ:P`5J3YZ^,Q +M\-/Y(6LQP?6TCO52!37-BUF`NWYVMM2?O%GP33Q3P%?#">B/A68F2MV1P'FKVPF +M);5);K1B>8HI`'2@,V/:[^SK\W]3Z;KMD.*+:9B<=!"$;J;;UE5* +MDM)][UB?]6V.JGB<\EVIL3WF^NX79\"D2_^:2*;[&U%K7_@JZDKEF1,3>-*< +M/L@/V:2=:I*Z6Q%6C)N$U>TY[(C`P/L=7ANK-S3-TT\L:SL +M.T*&Y0>E.GQ/D;-/0XPRM5SL()'1_^7U(H`O&?G,YY4X%=>F@:@Z-KF"#'$: +M)WGH[<$,.1GS0RT6+#EYTEZ8W(/*D52"P-B('Z;VJ('L\]V;[3YB+2 +M64VOM'M9/U7+D0$Z>XTTR0PP6 +M85OJ%/<&J2F(<2MA[/"%RY6$59Q4^<^.2E4`K*^\*=EF4`D<\@V"R2>@9+%N +MD3R*?DVCY?U5RIHO)]4_)8R<3XLHQ< +MU*%_PKX_M,LTP$2ITA\+->:ARO&7:7!:VK==FV^WJ;$;UM<&(,B#=E*6P*"V +M"T5QBA@I!4R$!8.UO\`TE@9K9&W_'H:$?K3:4(%MF):*_OVK^A>=63C@11U@ +MT1I"1Q?#6CJRJNUTIW9D'7P=!P341-$$(0GVW+S/D5NL-H62CQW"4(";.>F1 +M#VI1`SN^2//BUZ2!*N-S5?\L%+&&+]KQ%-VW#[C)/0LX@$90T;HK*16" +M?-10DTO0>).+H4UE!^5"8EZY\AI;S5W!&-W_GR_7YP*YD*]*(84G3+C"6?R[ +M@K<$M+8"'9V'M]T:$P]LZQ6A3#<)_X2D.=BY9BP7WN:17-HZ=K8E9V9>'#%. +MR$L/'`U2%RBA6\@>;DV"%M-2Z_VL]=$Z/^)=`$-)$CDP#?3I3M&Q"21C?*R@ +M#L:;1=**>6J6M\$JO&[IM%E1\K(KV#CK]1!0:?M>([H%FUMVGTU,`#D*,+%) +M&$FT""V`3=1]S*'&PDK^6@#Z,&X][V6I0Z^[B8*7P?4_5N'E9`)5*.4!K2G` +M=(U@/RV>"C?],9@_Q]#\G67)I_,)+$U?R>51LS+,1<0/C$RW$8A_)U)K0:!3 +MGQA004^(:U*X8T!*T_1#W1V4@6DMD&89Q$$,KQ\3 +MF%!524963-!]GJ5^KWZP[LWX!PPEUI'YM$#^I_KLT9X0#)6@K!PWB_NF@WT8/RU2Z8]AY4K"=0@6$,M"\?8/]ZFR2&1&`_!3U=IC.6Y0BN!TA +M.6C(>Y)EI%0?'CJGYHT2-)@CS.KV"@Y<=3%Z4N%FE7E--^Y651G3+2.IEL@B +MMU6O&1?8X45]0!(O%9X!M:1>K`YGV^_O%/GM_5>+640WA4F9R0420YS.DVJ\99T+VE?TO``CRDOS!&U(=)T6!7O'S!QZ!/&Z+KD=FN8U) +M\$M19IA^E8N&#-K%0\KB=RE(0WMKCWNFP/9(//7_,0.J@:`(8F,M63OAJPG& +M`F/$\U>\E?3``?\,Q!FODDU".=+F\0>6-QN([3HC%L$7E(5*FNR9B/R`O\&8 +M;<:8U"H-L?X;3TE6(>O0>/9T)7AX+(SZ6/D?FA(.D-JE)"38_Z9*0\%&R+`7 +MY%"/I@__WF;"!AYKPC`NQ$A]4AFT!ZXW6G-CK3HE&(*Y:LP^FG8;+QYXJBN" +M!P9@CWYCNX@XHZ>]I0YW[,6RH'.JY%\J&"UI8,UC!6+9BR$8ISK9U>KC)*JZ +MYH[[*XDY9`UXU/1_KC'"'5G'Y"&Q +MDW`4H^?00ZOI`F$V4_#7+OH<),CK;&JU[^F#;AL<5FW0%]&2.AG#K,3E8:ZI +MWK+P[/`-['JND8[[^DAI`"ZV>]]YO# +M83_2-Z63%G!2V?XI;66V?((CDM$I#793L`;V]-/[,8_!%6_S2H=/G`\M6QU;]^=M/BMU/?,EQBMJY>6@=21H3LPE5LF9XL/AB4+8E.WGE6X2T +M!O\'-(WMEO'%E0`NU;*PKPV$PR-M9Y%1`&/MC941*O9L=CM/9_A8#*38Y +M6[=4E-`I(M2?3[;8&3''0#RMMF'CW$_6L@E1\V%9^U]/F&G=&[-!=R-XO]=I +M0O55K3CBY:66KWS>^MJQ\9$VL_2VBB\1W1^A>=][1UMIL$].A,T,W?A5IA:W +M@/'.WAF:2*K;Y']X8D/,;&X,YW-(C:O>"*@5_EZP#J]'/X,'`OZU=@2/&;O@ +MZX(!^?H\7>I'OPXHV(.@N6 +M[6&;7[
*G'YH*M+W>S84F&^UQP/>!^$/*J6#8P);S!S3ALHDN3_BL+3>: +M8#XL,V3.:69'F<4LN!:2(9RP#:V#A)'<`%`CMNJ[^WMKOCK^K.%J_T`@RA.` +MLPH:_W`3-#"&2!B6PZ&30#4F:E.)@1&KRIB,&JIR13OQY'R]Y(%?K\"/V +ML'(M&JII'VO>J3U#_:[LB-JQZ9>*2.D]2_@U1`>CDQ"L3M0W(D09XTJ$>+T) +M\6[8[0.PPWSWY$R7A.VC[]3SC&-%I$,#)0V$A_%KF."AMKSX/IG2T%BRNZHN +M$2`W]O[,:4=$*F=AM(#HRD(`[!&`Y3>]="+V`@C<5[5D6 +MJ?GMYQ<"DEL"N&A@L)PW_T=K7L6HBC3@-5W`S9W2DU9A5/'LQGM4*9TW[;#= +MLDKA[Q`H(XK*DP6REW[4U@-<@"%&K4^-I5Q]W>)[+33W#8X5-LY0(6)P"*H] +MIT$=PL2;V7]>=7S>WGG?H%DV>=ROMC->C]68@]YF;!!6 +MF53BEQ_L`0$I*5WKS*W7G>]2YHHA1A)D +MI11RZNU3(HXMRO2C5)*;!Z4_Z_S;E66MJ%"%X@KZ)>2,IA:E+O:9F4EHL +M#'D0U](#Z$1=A(5"RQPB"W:DCM$M957$TTX]?;_"W]'#,6[#T%:=BU%45@G>`(0W8H +MH;2WP.:>7X.^L`0,QC6'QB.4'<:H_;?[HH55KK+ZZ(K(;#4BU/6M]A-C0R[-7?A!\A$XV)ZV<;3>(#PWJ'G`A1H^M73&2TBW80SG"6\ +M;_OXLLVXYX"RW]>A3W+`BH'-7?H)$L"JS&0PLA@6NZ_KV+$G$NV'N&&+PN)M +M'G5`7X^SMS8K5ANE%#L&\;1RA3@"QV;B\,S=(VM7*6P.8;7>YK]SQZ5)/T5I +MW\X7J/F)NH5RK0RF!YFU;``:"/K48?)96)H:VL/W +MCSBK@FI:EG7O*9+W1\`4#U^CUUD)[A!W)[`::QDFW6+FWM>5AA5A[NZ/@G]K[-;E=Q/+VX04AU1D3SFJ35+AHSQ.:LL*B@; +M,;S@)LR>(C]7B^7VTH$RLX+1JGD;-V!+R,*5G%7QYY`>AG>9RA"1YQ +MOM]^O*Z#^.F?[5K(S6HC:U-CI\J@^=LXH<]U0=.?[:QWLN2_*H:.S/\_)XG% +MV<6-"3:+\(K_EQVPN-IU^YY=#6Q+')ZE(BAR.DE[]QV?,&/$]UVN:H$VV&H! +M3S]=(Y88^?CP.6IHOHQ&NT/)MOK%$E90.VO&>3\%W`0*6I@[$&"OKU1/Q,"7YI)EYL2 +MY461?+1&M2<\%E#K*'87RWDOF@X<;E4-LEBB$0?(CH5(ULI^S.D9:)O9D\52 +MXM*N7>?_&UEV@C3$3(!N;`>4-CU_ZCX?WFHBV"K[,!:08Q[@@`Z%).)!O>(H +M__Y12NQOV+%>&TZS;9\1Q@D3WF_'37E%S"6@N;K@^&PS;2PQY\,DRW>;X^MK +M/*[QW(:@-`IW$&7U>3@IG%W\HDOMTO*UU>->\P).[R-8?@JD?K.5T:8` +MV,N8_^@0C=YQ'VNPS%3#"4\BVSY5-VJ&*D6Q(C1_0B#@<7A?>/-_Y:F^S;O4 +MJ8-0->_CE`/I>\%4@M:.9?:,@/`*M6]4[_H#":*BPKM&-*.XBF\WHW,P,D71 +M^62[3?"90>H01 +MXC.;&/,&Y1^?\5W9A*]LMIDHV:MDE@%?@SG"L)XLS]6;!X8B-#.%83SI.T-!WH_OZ*]6.6"(DJ +MZB8:+4[#BI35;.F)C)J#^-Y1G_\/1-2Z%/^WML]Y`U`(!\%AO+R*+ROH'68P +M#W$]LNW4N$23ZM0$*FWW>5==F.;B1#(4J&&7G;4?$7KD[4_0Y-S;G`<%O5PS +M_M[2\-]A4-EF1&L$-Q)`*Y +MG38`;^"`Q$&?&V04*(>I(MSZJU>0BGD$KM,FR7P5Q[#/HCE9-_]AY)VF?;R%-I!%14OB]F^RU, +M^&Q-2>*XPN!&O""WQ +MHB?EB7MV"*:BJ"UO6@U5(I]FX^]WAR+(*+TWZY(07;Z4;JMJ/35+;LRL*`0; +M'E87GUX1XXBG5K!JQN^86V)%,-@BZR([\L(;]/"@FT*\#TS]UJ9&="`[]&@CSZ!CU9]Y8>(V&PI +MMKA*-%[A.67]I'72](-.H6+$I]S=NVIW&?Y9CMBGC'^U.[=+F9W5IW?X:BY$ +MQ&7VE5VM."JPM-ZU!X?$YEQ#SCP3=H.3WDSV'JL[*^ZBU)2:QC=4$)*LG\18 +MN&6#B&.)SF`5A9(^F60I>/Y7)YC:\(HQWGPH1@I?8*&>QP5[T*!'9^EMJ`[I +M9^%_[>G8.$Y1V9$HT_(QKYGJ(Q=,;J0:<]2/0.4D[5M#XB\("W)S?WHS&%5W +M\Q0*)24BW47>9%4PG-92JL+CJHF("1+\P\??,G2>F"LZR360WKT.5XQD +MK@/Q@U0-MH2GF"N[F,E`U%L/3>U.^+SOM)/[Y!#H8(WNN56 +M"1M)7)+9ZX^`QY$)VYV&C4A@5$MV6)N5QO5N[,XFLTN5(_Z/W.V2 +M(MCY_4U9IU'0<=YJOE&61^+4(+]"K%=,748Y;3;C(SRFD*LA,`Y\6%4DL!^' +MFUY8A-L1'A)`Z#TQ@VO28XW:]>[$--59(S74PX(BG7CH3N:@MK<*!Y5*.77( +MA@:>[^FTV$+8V(Z[4+?PC-,N^K%$@->=:5KJ:(4\,*H6:W#Q87-,* +MCL\45D1IZ-BH)<:H'4=BMW(;TV+LNXVB`&U-JGZ)9"1_1 +MZC#T-+E@,QT][:&5UOYS^Q__\X[ +M:=U5C&&:YL?V6CRK"/?%X=\K&]FRL\WD*$I@M8W=LTVS@EHN"BH,`&/65-=R +M2M6F,'&H&C=6_(_'8,6H5_55K>K#]2Q$82F7NP1[ULZOQH/Y$K[I-5A!=P?E +M1?;("/:_=K^,`P316_*N15(@$('MM6YT^>[-&<\01RX!A_]AW?NVY%T;Q:,O +M8&"A&$\0)C`VM8:WDF"6>H8JHDE&JL1!D]Y:50%*>`?_Y759$N'X8%38HE4P +M:<'N_DL.:E<2\AHV_WNS-O?Z=IZ].=Q$&Y4H.UK^.08H_V6/@LPF2'G2XMK# +MU]$I7NE[2-ALYI2\T$TRJKUG1(BOH/"JEWN\O4AF3O)O0&J#796>G&/`5Z$/ +M%]8Z(0.'S6T2$U5H=9/6>/9UR>'3NX\7\T:9F>I`2[!9>1:[PU"U(]\9DL8I +M[,YI]IMAN,8K3-\IIPCNL;*93)O"Z+*>_K%9]KYKY1O*,IF0@#V6E_:]3 +M+1`>0IHIAVI!\T@MGNU7BK43RFW^X>!9-'$VON:PR,#VU]^!"O6 +MV)V%*\OX80:!WXNCD!!SGY!E[,C)SK::L-;*TB7S'WNS62B1&)[PC>U.Z;EA +M"H16D<#Z1"C/>M8$_ZR*#;#\>*DO))@"]4Q;K?[W>?2\#B)9&YH&&1#*4)FX +MIV_7-.FV-EF]2(:P=SUY3G]8)6KO"J'#(.7L'W"^#SYQN!I`DCF4>4-!'`C/ +M*/`%23(Y3O=L^=4*9VE-#4"46RX(!\_7L8'%,;'G".''P\#FK=7C#D>*[,3I +M?%LS=8H6D>]BOWEC@)*B=YI)M;#!]<(!6"SM(`HS*7 +M>1R(,]:SIXBX8:"N7'.PR2<.)P=%[(/N6R(C:!=!& +MD.O4LCN[$0U4^%:/8&>*MF/8G>+`]+D0%1W=LR&O#\BPED>!L%)0@)9C][;4 +M@>XSM\9.:)@-;`P;C2R[(9V``#!;2B#!((RQ_=Z6A8FC13AC)KPFS,2C#KC@ +M0,,!=4?RNT"$]8]=HQTZL(EN1[58BJV!V[57>%W%7X>JOLBE`M$2#H$]D*^X +MG5$W&.Z",UMY\(ZZ?PZ2Q8I97T1HY31%^T?DEJD<3B#IQ[R'N(RF;7Y5 +M?FA:X>SN(7R,Y(H;,A)1F"=-US`;XC%_I3B;D?T7FD;8![YAU#I-;%CXW7JK +M^PX\LV7FA2=25.UV$OSP6%60;NVVTJ4.A +M4_NXC%ZG@OV7P!"@KL+@[/0U@YU0RLHH(\`D2/S8NE73/1759@?VG-[ +M#^5K)-V(KC6BB"B-J9LJ?F(BIO&UP^-/FN6/E+:U3+;`=]/`ZK5#%!T+@O#U +MKQQ$3>V`#?N3<3,8.])L;@N:L%8V%G.KOPN7][!"[<'*KR+>`%0ZO_69&2QU.UUBS4>G2\R`)1#0[B9[] +MO"E4N)/X/RH)DT><1X-KU`4F93].H>N,X2VLZ]+;::6/Q72]V6FY42.I'7X@ +M@09-A],I3!,:C#/^]1Z>LS"7-]A3=Z.>]>)V>F1T\KH9=\5.07;*4JCJA"%Z +M`\C>PA3VS>5?9UUE[S7/+R7B>K_&UGZ!Y7%0@A(T?$I=:6GZDM:)'2;2-S9/ +MLO8OQ31K(M^>-'.XA.G'!TF$BW7LCL,IF@6.0JR#Y.\(P;V!X74=#QH1T0%T +M%C&SCI$*^'_2-=-9JNC"#ZJ",4\]LE*,%0[5'OKA9P +M\,%&QZ%FX`35=#VBJ>BXGVQA2XH#.SYX`),GM0SI9](2TZX1LH!+S*$BXB() +M*)C5L;LDEB6YHX1"HN4=2%H*$Y:LNC^=5-M>#$I5YA)@WM].QN[0];"PJ&F# +M?,.BVJRM27FN=O8,P?\`P=*M!EM!DGG[H_UZ8<,B>%`A%P!,O[/%@[8_5"DY +MRX51)=.`\PHFMJ90"*@XI.^8F,9'T%FYMW\E%H5.4L`XRO\.=X.+42F7Z?%= +MUH.#\WWGJ#_"]0F<4,V6G#T<7-ZA*MP+`CZ:N`KRI$N5NP1N%\2=SNAY40I2 +M%KO\6QHGQF4KH'C;5@VCGO(394SKUP$USQF?(B`3ZU:FP9BR)&K,K +MC1`$X./>F-TOJ2C,?Y!9K!B:J`Z''=?RG,I%\TB)I;KUTT-A66=SHB=B`D57 +ML*\B9X:Y]7CA-Z&[`7"=9Y`<"1V08NK?,;CS*5A#>0SOT29]?W+:$2WP(IR` +M6#;7(U"U5?H&ZQM#?;Q$RJ0!JKC2I#K3/(!P6;2EU!O,1:,2B%@4-;YL>TXPH0)@I7 +M`P+BM<:ZD'A$\_+O7XXGNHD20)0N--U#>LA+8IBW&@FWGG%SU[A%"$$L2560 +MDF&G&SS-9'V/_$0KPRN_X[QMJ^@2SK,YT4RYG,Y[19OVYO,1[RM8HV4X+<>8 +MGD%0#9>.\[9%/ZMK<@#&:I79^69,&>(IMYR7E>\;$&:&@S;'?%=7X3)7J$BT +M>)0U_TYQ9ZE9!;>)S@$)V(2M7+YD#U6:R9XKNH58$`Y0[?!,!E_%;P$@9M[J4!2V;?7J9KR@DK_5&0 +MZ4D%.>R%Z):(=I#:@8@P47-WUYI]GC3)=ZHM-RGW3DV4RF-N:;/ZC;F,`%XF +M:J3$DR^-UO.%(6\"F@9D]+N>"M+.`UP +MM7OEQ]FL=+*8#`?/-V6:^@Y%SEG(<..;Y;(H^$H,G%&\,DFEB?*"!6]@VYG! +MGOOC!NCP3GP'Y[:+1P$N#*F?6(UV)A?.XYS62=)&BQR:)TO^'6L6:O?TNGOH +MF>AE>VW3Q+^7)L[9\V>8!"AT@0/(5?/]9""`>7U]FA +MMD(3>IHQFM)CGJ,V"3X.3!Y`BWH9:/`L%%IV03`3"CB*>Q[@>,M.GO%(M,16 +MIR[4N-H70_F1S`[>>ZR>0L8I04 +M1N/:1`ON)P)JZ15?2%&?).C&0JD<30`?_:NO=WD!HX_O;?[SFKQE1X-)C%\Z\("^.SP??@UG)[9(>E$''Z.VX4CG=W5`"XDM.(ZO43K*UNWT/9:2?8AT +M(),]T]8S(D-VQM8A9O)O0Z%6U-FQA`CSH)+QSN1O#H]&B%7JS5]TDHP%/><[ +M;6BV#FVW&`*ZQGAFSV!#"#H/B=8Q&%J\"SR8@&8R;`P1+6\A(\8QC/%$/.?1ITG +M^19+V--77A8J0;PBPT,)1REB/^984W3T;E'-EF6/QO\N<>WJ-M6\MK//H)=_ +M_J-E`'17:M=Y]>J5K`:?=";=62H6^%BEO%*IF.JF`/4N_R7<1IW&[@#EJYZ" +M_S\W<^%BDRHSI!"+1=?<+J0,I-+A,Q?:K.?FGHOT-M#2;F\(-L_L:"48C+`" +MW#!ZU&0J^B)6X;P)5=7&#^E5`-:Y>[.UFGM#3X+KP1-W>^F,Q:;@T:YOV?Y] +MJ4CIVM2LO(/=LOCHY@R&HP3IP9LR))TK:`OW/A=H4-HSPI."(I`[)R&CI6[4 +M)!1J3"3FL;%]WD8X8O^[L1T$1#(2V;+(X&L$\F\8:>>KQ8:IB#.F).O(1L3J +MB^MW&%F`99/EXP1-^>*@"NT3'^,,:C>*E=#?-$'-P+W*?DFGG+RV(V7Y1DD%^ +M13&2K\[(W6&D;*IGQGN@/@75IQI3B\.R$[WG%`][8JZONR"G!MD>;DO`M#S7 +M.#F+2*EP\)D<(Z)5E6_\NXRI#.8F +MPSMY[SR1_Q!M@A"1["=3C!MC$\I=D&4_,LZ6.VB#9(R-0:RC7N#H)8`X;.R( +MOOI>%0(-A^G"&8WSYE=:$LH&KI0R8\A\(245F%S>,>*@!\DIFN2D8>UUFRG, +MDY/3B"QY%R^8%]#BE*SP\LA-J#*BHOP^KL!#4'S@7K:BXOM6>]K(\:Q-Y#9M +M&:0''!W12).:.8;W=B;:*A7[8UE/I^#OS#!+K-%75./$>*Z/-R$5FY_2"9%Q +M%+IGF-,8.*!/U+B49C6!7B9CFH3^#$0IUM\_EL[I;^:[K^$7E\.0B/0U::D" +M<)>I!H=4T#D:R$E]*;2(U2?8>I2IO<-9=&##O32K$-T=0#`6I@L3"W*;&YZ2 +M1.V`TE."&42I%D-,[&UY!L>A:]Z)MW,9(#X)6@3*40H\EU5C!:"1]KT_2Q+9 +MW9)HD):2==I=*F'KQUX_VQB00Z2)COJ$;..3>7=7="`"^CY+(%/>)=4@"<1L +M;*;0`D_2[PS93J2SI=MS)=:M=P`7" +M*CE@##"6JZ&B:%LTQI65O^3"$0@KN6.+'+98S#SRV?B;N/Z3833[SOG(O]W? +M(!3SSB'CU7R"-#6+C'Z^/>6D/4Z"<\%G;E:.+1#F/4R.=BU3_1&FE**#EX6' +MJ4E?-)\-"O*X52TK19<%1A'L$4O:<"H"D;RD[`>S3ARV(4)/F%J;!\I$,R!+>M8+'/K3SSZD/"3Y(01+;E1L,G1YU-?,T^"4:!!^$PKA7 +MT[ENIM$P]888.#/ZFXZ9Q8&&BNJ]O68EJ^6D12?)S1HDFSH:C$\'LW"DB%7Q +MB;=I$X'F,#-2AV!Y:FS]=QDPR51@_7=7,H,P_X6AR#'*VQC$3@?/;KZ@$RT% +M+>)?!"1K5XH^VQ&9SQ +ME^1NL[GQWX4^.,=&6A()!6RP1%Q+U"K)'U8C:BC`Q1"_NKW_Y#R@='88JUY7 +M_"F##Z&594Q?2'(A"$PQ%%\;_\2:3:ZFA6%?8PY97Y9N;2`+BG@0;>B[[`;7 +MMH$T7XB_>M]K821YHVV6#)5`2CQW.EK4:LPGE.!4J:W#X13RQOA7"NY$)-%M +M]\R'VH1<3GYYF"S2`%941%][8L@\,,VZT\+0#:?FNF'-ZV*->]#M3PN2>M'7 +MZA!2V*`&`J@;^%INM4.S]N+M@TXT9[]P6]Y!3-4\VC^MM)E]GMP)'D+1&R\F +MAS'C2S,P3/SNG2`;)J9(`HJ&#XJ^(T81,J2[H4Y"!($_@$X4!+E0`(:7F_'= +MA4Z5YLF(3L%Q.UKWM%E$$YD<=JZVX2:3`6F2@M(O"&T_"/!5&'-E3=++;:#0 +MD1=?U*_Q?]5%7@%IJ3R=)`0TDKU"D=SG"[K1'M5R/710FDWP[',9W$JLL)-, +M?LK4;\Y2B/&2"XF?9MK[48':8.M^0Y/H-Q(H>00X.;">\'%$"@;DL.)[:*R5]V +M!W*N4")7**KA;-."B]"3`R4)5TMDL$Z=BUGN^'/UJ.,&N-T:(E$'X"HFS'.( +MF7U%N@]2RP4&YHX`8\^M)$$[#?U,&WK68/#!.[]+Y`+;Q@DXORL?,"^]*I;[ +MI]YDMX&Z2%/6I]O,]R>\&JA^Y%Z@WFL]TMS/VX]*VJQ)FQ>(N&'@$WW7VHC5 +M/ZK,QL3A`D[`7@WAN34HL2U:U?I[&O$1^,(-]$6(!E56K&>](Y%IYD:-'L!: +M.^A][3AYBX+Y;0A`W-)")Z^PM!W4(3&M\1K!42/KVXK?&`_#>$(+)N";"DQ; +MS9A\0%+N4LP93U4+7)B];I)0,SR"9^BU"H9H!%F='-GP(=5>U:7@D>ITZG&0 +MSPI9"@:$(;D.M$PIWS]._CP#+!L<&!@K/&QW\>'&\DAZ14_EV"FT0RL9U!;G +M`.&G$5'Q*H<;>XEOE+M?```ZPK@`B.JJ]H]EB+!K>0-;.2-,>[(V1T0-'NIXE'OD%]TZ+>2:"TE?K1 +M#Y:&=@0@0<8"CL@H)5G*2_8GG&B6UN[&]?B)]O_D>2%)UIU_';T.!GV+=4(N +MH1YJ"5.RK6VT]E)]M%&H*,9-H1^S&J)ZD?P@P_=:/BF7`2V0BZ^GV?O#8^F5 +M8L:)OPXST#X'.''TMY!JTO-(C6YUWA68@2VX6@+U +MQB[3#QIZGZO?T9/<_!I,F[MV(=L+3R-@,63-I,1XX>?[N9!BR0=O-Z@&0TW& +MB7[VM'QHU"10U;L^^;0'X!N*BLI[ +M`%X^/X;D![C/25?/J8J1$PW6D[UJ[C0LV6<(QV*(L-LPG/!,_^\C1J7YYOE_ +MO'>9,LI!!@YK6$%OD\O,>HRNU=KFN(7#2U8WTF_PS^*%C+O>-*NN0P0$'%>Q +MQHA]Q;)BF*J!C4?H,CAB><5PO"E>@FT0@+VEJY?F.^GD8P28:?QJ`8*GZQ.I +M9P"V"APO/_7RBZ\VNE=ZW.@J4;21,]B$=33[D21X`-]08D;V+'[I4K<.0QLX +M,D@"9<(-^Z#1#-&\.)4[6DX]^@=-;'NT`1.^N@N*LGW&9E>DYBAX4N4\6\T_ +MT'ITL6^=83<]PJP560@+SXZ\S++[:V@R[C9G;K"E.R5BUC@BX#X$1,R5]L'* +MHLO2+(:+8:=@06<]YQA"U&>&7%ML#I?*Y3(SO$1!B`3_+P!X\9GO4B$M"(S= +M;F;_UU9T*`FOU>O)\/_$4"M@C1K7K^)_4CBMCK0M3B +M].-[>G0)ZZVJ/=4.8Z>?(248O?);T8WJAMTCN0[%PTWU[.-CUO'5>4$T75'Q +M)O5".',AGT!WALW&R8DV>TY,J6^NQ?*=BLL^?G,#U3'U;#1NN,RZ7'HC@#5? +M(D:X!;Y`\&6!WI[+ODO46HR("Z.4'3LK^KO&$ZFS,WE?,DYJ>#DK4';BH'!] +MD&?X]\YCL>[%;DF;E$"#%"@M8LQ#H2]K.E2K^Z"ZG8YC$\IN88<0E>>;``"Z +MH1*XN8)DX*'L[KI)>'W6L__0P*T(I_4693<;@A%\-#A6\H*XGJ#/2T46JOAK +M+^YGH`;FI=\"5S0"FO5T"UX#J-Y#.SW'\YOS/@H6I('!`YJXDZT&`K$"A7USET[I3/ +M+RU#9]ZL6,(TT&9!TY,]1FG=_^:X987GD_2DY[[GWK19QP.39)F7:#P9`&=( +M.K5Y`CC"DWW/9"P%48&0'VD8$%HTHNVG.Q%O]/.<^_)P0J\C(.IAY/;-!]6( +M=#/O'C2\IBR:31K8@[[QY<;Q\1=A5[QSR"8B2-A/F1)3G$?91>KY_[94@'N3 +M3WWK%.M$PR-G$YCMD;W7S[?]<2V4^=NS!V0SG8%&!T-^5&QL]BLV49Q+21RT +M7-<@&M;&;B^Y$&YDVO301F&2C2_?`7=#ZFGY'TDZO;AF9_\9)65?9]V#>`NK +M:&'^?!"I\/W08`7$K?_^S=FA3-2_H.^K1.%[X%VBHIMRS924QBI5M29].U@D +M[CR>\LY9FCH"/RB?/8KRL7>1K?D;!CK2JFRV+?#2"/_X5W]-J('=:Y=YXT>)V*&&^\]E$Z*?W"N+H1_S+2) +M"H3&@;4/*](.UZR,;LITE-#=%EIO@6%T%VR9)*LCQV=&T_7S%_;%%L_JSSM4 +MYW'=$C^'(]#AS$97_A3&IZ"$+':9E%^'7]1?^:'!@U7[Z5$IXAPZFLR^ZC+= +M0H+(Z&M[4WH0O\;*[V%&.:C-W.1Q;].Z>PWGQM/Y!=`?/+!#[B]:3839+81= +M@GM//`3BP$']S^^2NH^K"Q[AZT"AK36LR\;WP +MW."@%Y_FT3>FH?8UMQCKAO]LV%%IK2:_C@.;@6"LT_IV2K!2EYX(!K]6027B +M#J#P4C+;[;>%TLKN3']+5?HCUK'Z5Q4DO!61L0H>D4'1^9&M'Q?E"MSHE/-4 +M,=8MJ/$2(C&0OV6H`*50KKOLVM-XB_5>-]==):(Z'$ZF3%COR%=S,7Z7/&9K +M=3/7>R`(#I$$ZF_YC]W%\%J#$%R"/`5#0-V_6S-^C5EV9*;%L)G::QU\GY]D +M(H@5AC3Y4R*.IX/!N"R99ZFT?@3$7D@>P]]=,\#"WTH$EB,Y[H0_0\Z_H<7[ +MQ/<%($H8\RZ3@,Q[!SKSV4]QXCB*3GIZR;M>OZT,YGZ$@?QT<;CSYT4*!!)F +M9F3-^\!Z(EFOXEYT&%J8U<%T"HNK'$9AQ=D)Q90RC4!OJ]-1.Q0EGQ1QY<,Q +MX\A;J2XL@(@5#\!`)/)88#'LT$IT?\F8*%_&@1W^N&(PSJ$+<)M[`F@NVC91 +MDB7)+;3'Z'K4Q=ZQWU8YRVC_VR;'EA@%8U]=#2G)W(2XE0`AU(\%/OC9H5"/ +M;&7KXE\W?.8XVL<-,[,I\)HD=MS=Y2THV(3)!9-(E+.NU.DWMSN]L_/#NVH+ +M?XJSH_0A@8%X-`4)9ZL`J_A78C'DF;G"VB"?P$O&ZQ=Q.0%'6P`N\GOZC0*) +M=4L'JVO;[-8=?M`X>;>X'ZO42T*L'SVG26!RP%RFHTXITO7+J8%U_U;6]2K# +M?8BB;JS;T:%^:II9#9NP`&"(M*-G;17!KI]F28/&7+TLGK"6?\4=@T/>TPH$5F(FPD"]OW-9JX@E$!`V0L +M1:-'V3Y%/-P1(CGA/<#AS@)>J+:>E?K,$S=\WS+#W^KIDQ>>YXE80`\NTRO%0%F?DL@O9.' +M[8HK&NW.J-U"#/7M=^=+H1@.R48J4L&BPI,+7UJ/X%"W]K[%K2*`&5_9387H +M7!P'SL(O@+]D4VV'`$]+\!"'M.FT!@5XVZ(]!$$]4,/;Z90?;94YG%5D(0"P +MSRIDG(]_!404$.3*!<^K"A^IN?(-?#M2F-U,5_W`(B9E+MTAY%-5CRLQ^(.H*0PW/1R=]4) +M?8MVX(N1T0'<,8)MN9_Y3_&G!V,YHH$!<_:>=;HA^AYX`KLQ^097HXMTQC-Z +MPC>!P*W$"G$]P0K%2R!NI6;K??%9@$A?&>7-:<-W1TB;V0]U=$6HT@5@V +M]EAI(F#:W=T:HH#2G44M_A +MZS.IHW4EQ]?O%PPW9S&1?%5F@JHU@AX5T8$A(L:RP]A41DR`@<;V++D!O'G2 +M1X],J*MM?8JF).WJU!H'X5:L\?JAF(=`^2:$DW6V=+84UTU>%5_\@:3KH\02 +MU!LM^M3%:)_4/GM"^_=M?]=>!K^L\R_<^VU!FDS]Y*,PF>NB"IR@!NVP'3@A +M*7VA%VA0/XX(;+U[82(4]!.:]?2\SA,3BYL]I5DO5*NB3(N$E=C;.A$O+9(-8HD\<)ZTJP!O#0\LV*%!3*) +MZ>\KUXQR5/VO#I"EAZ6[2^=M@3B4W[`"-+^69K#M*/UN)=P;* +M$PRK;8);*&-+!7WXR4ZW;\2?2X?0M?@77]Y9IGT#LIQ0SC +MI>G=3($J%#M3&-6[J"N'BA1/T*=AW1N\8IXP)ZZ>"CJ;$KZU3-FDZ\:ZZ4^7`\$#-38V!_53T>Y<#VN7TL4! +M-#1#OSMC9Z#15ND>K9:PI@(KN=/GBSH4%S`&]2+3_8^#E\$3OBQWH'MWU6T; +M\Q=EP@_#H>O6BB#6M^"MN3!^=RE]MRZ"VEWQ'$D>@++.[("^\LQ,T*SX`6?\ +M!+7*`*7?)]B=1!^YI&86T*6-0.GM[.*7M(>QE[HO'8,%S)947!AAL$+3%*]9 +MQ.>TZLE#682XK1;PK=54+\A4J[L'=#`@2$XV'.6)DCM7*!+-I=LEGZO'+O3"B5 +M@&=#-MP?IXE5:9*Q%S$#0+3OYZ#:GU,#ZA'*H6H"9S#%8='*\L%2)=QG?AB+ +M[Q\CFIQ^&^GX_?+E=EIL_=UM"@F58*?A*`YO`X?O4<#+Z!R`Z#,HD_<@3.W: +M]T"4_$>3@[.U&%JEV-%KZ(L<-X?*5AEO2#F&@"YXX!=T)Q+HO2*T*,[<[O9V +MLTVTKD9RL:4S"ER16"LL+0(MC&_*DSQ?MZ1.G)2LAFM";J;(RE1>!<$-=GR& +M6]JN;T/D:'#_JP004=/^\0WT`J8T?(V05T_<["1R9KGA1WP@YBF85J;6R"9R +M^0=;3T6/0L/M7[8S7Y4/B%[:L_-`$'G(#9E<^DS_,HE14SH&;%`F!<8(%[%W +M$9],MG>'-%6S!I<*40F<$$*85-P6Q!9B]&"VU^R&K$LLQF_&\Q^H-?=05=-H +M&25;A<5@FKGV5>BK_JOD]'8DYH1C&>8?S(X4,.AK7*(0B86_\`T'&'=D62W; +M(.=92\<^QPNGQ<$QDL>PVLPJ0"Q!71D)]MM!JV?"!,GOMMI+]ZK=85$Z"4V< +M<8'RT<2,X%W@\GJRS/B4_W4XS-8N%.J#$,6LT2)V>X?I3H?*K*83&3J=-<@A +M7%N'6#QG[*XC&=@%O=^!AJZTE$>VCH5%B$,%,,YS!UB3K\:[__U_/?W_L^9= +M+$0[]%34$%2A`I$X_W$51X*$Y]?)/CQX'%U'2W`E#Z&.'5)\N^35,U"1;LY% +ME*C6[(NXNI%F&E9B(R19Y]:6\_A/!(>;^%9]LF./CM)1G`TT"Y=]=(8/X5N. +M70L*B$*;.8/6-;0\5) +MV^)[P(ONAA0'%ZWQG,!H&+GT"UYVTWI#G'6J:H`LK]COP.Q-+1Q)9N8]8YYY +MD^I+K;^RU`7(;"V/W//3P5I:!AX'0>XL:H`*B*>:.^LA0W'"I5YI;T+Q6+1( +M%+[VJ+)9N^7\BFZ^U"$2)%5*7BK9-VI +M2N06O@'1\')`*S#DBK>)L],YQ!G$#2#?*#E+K]?(?@;JW1@]6N1XNW&USE=O +M`IR +MR$#%_S(^LQ.?0ZVF@+88#8L>CE[7&[I;2\I2=%DR+MR$-:4QV#A94_)A&,+F +MQ=UN6_>P989E%2:S:SVHZ2#*#`+*,X*NAX>"NF4YS9;V$<#)'L\R_8;51*F1 +M>3X`,L8SM]]V4(%%6D1WU\7>+)7*/+EOW@S!/D57QR9#R3M:&N6SJB!B.5%A +MY20`P\UP12;DPNX'ER`G4E,87<\@D(.0#:7.%-H+V'&"M[!JAM&<:4P,F[,3*)CK>5KUU^MZCY>>NH`H'[3 +MA'K]=&Z6!?G>SAB]^W8W0HK)%-\4LG?10`A,G0;XZ]1S'[-7(T^>16]B0LC! +M;`3D.D +ME;'FEC90`JK::$Y[8`U(2T6H@BUF`)8-PPZ`/`4+NB +M,Q5;.$^QD+O=>N+^"6'X[=A2O5D5;IU-M,KP^N783S%ZE\C,*\X;@P5X:QV^ +M;T1Y#)%*LC@7GEE.\,]*4<[3!;`7GH#8/E]72:C]TCTEL:;387`2P+CB-^H* +MJ!1^[C@4%!55-B[<$[F!I*EX]=<5W0W=NP9ICH*JN4V6O1ZA4Z=4H_&GR`PS +M1]7GE:AO]?39:FOK'Q%GNE)%^FH>-98O$#/U?2`B@GD.G&L4_7`B`41A..V_ +MD!!G3_8^>G^$CBM*_#@W@>@0\#W#5\X1\&C*R#&=EZ(HU`90ZB6^9I*4Z'FH +M_\,L_5*=!$IL#Q7A3S!IYO!P]T5%9EMB7DM:A_78]9YN_[]+RZFJ4V>J@0SA +M#[NP-D#1:C"-(%KC&'R>WHUS>%I2?_`H,_NJQ.C'4QLJS'XVE\)HT#0_.?[$ +M2%/[!=K2HK47V@L3JAGSL0&6M_HO>!KX61&'6#G;RZ?!%%NBHU2-_V7X.*[9ZK;\N0N=9M\=$>EL7#]NHAD\7*FJKU.^E:( +M)]6(2ZR!3PPIS`"1YC$SY8Z/])K`#883#9&Z8:`W63_'WC1\^#.6!H\='78> +MHD(7]:M%]K(`0J,F>L/0N2LE$+;>/(89ZDD\U6W+CA<+.S'I_G+-S,*@N,HY +MR3:4#@,@`MG2V"[EA$K`^P:O`^(.:(.B'FK@-M[`S"I$9W/**,=?C>5;I/!L +M0OST&X.D(&ZI*&\4M8D5B3-S,33)*R>/*X4I<8!V0>6YW'57OY?@S$?1(MILODT@KL2K2^^_L(;43,(W==PA>",I\?COZUI5C^UB6&B +M,[(<^_$+YKU8,9";R/_2@+9D#WQ=@^0G*EM'TC-58)&V8JBD=]VJUMURJQH2 +M=RE]&2WBN^;BIA!)ROUGE4Q"T3`@"TK6XT8E,^W0 +M'N<*(4;RE=TAXS8SQMYES6>SPIVB!EOVR0I36T/D1_]WL5W#5N<`=^C(QRWI +ME?N@3?TG_Y8__>U%Z?BL^N9Z;F\<Y53SON2&L61A<]!T_4?%:EC9&GU84U/1A-[? +M4#[-9J%YPD30#+9`6#_G+]%`";]Y\D6(OWXAZ)]]K%`D[B*+H]V2=^]M&[:Y +M_^L?94I==M2U@)%LT]N%GV]=\A3GBB-K>A2PTBJE%<,<4XPGA)C(/1+ +MS1*(E3&PA@6$5)V",Q[0E6;-*E0=*A6T5U.KY^_C66Y'44^BP35>=31^5S>,T3;IH^"$4%^3OM/P796=[G_HXE!"5@1 +M+V#?H6"#[49)5#Z-6K_XMB;K;,MGSN_&I4"VT%%A9#$J&FMN>8)_\(G6@-]E +MRD58.OQ"_PZ@>Y'+TPY0Y2T3%TMN/,V\.16J8&X"5;AMM)85SNS$6Q[_8+2A +M9^V[>0T4ZNHACJ&`])R!9R7BFS=:[OL:HPQ@V'KC?/.[0-)\/2GV<5=TTD@X +M$````00&``$)P&!&``<+`0`"(2$!!B$#`0,!``S`ZVO`ZVL`"`H!%MOF-P`` +M!0$9#P```````````````````!$-`&8`:0!L`&4`,0```!0*`0``+4,K<;.= ++`14&`0`@@*2!```` +` +end diff --git a/libarchive/test/test_read_format_7zip_packinfo_digests.c b/libarchive/test/test_read_format_7zip_packinfo_digests.c index 94cd1ad32e4..7f105d1f280 100644 --- a/libarchive/test/test_read_format_7zip_packinfo_digests.c +++ b/libarchive/test/test_read_format_7zip_packinfo_digests.c @@ -35,43 +35,55 @@ DEFINE_TEST(test_read_format_7zip_packinfo_digests) extract_reference_file(refname); assert((a = archive_read_new()) != NULL); - assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); - assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); - assertEqualIntA(a, ARCHIVE_OK, - archive_read_open_filename(a, refname, 10240)); + if (ARCHIVE_OK != archive_read_support_filter_xz(a)) { + skipping("7zip:lzma decoding is not supported on this " + "platform"); + } else { + assertEqualIntA(a, ARCHIVE_OK, + archive_read_support_filter_all(a)); + assertEqualIntA(a, ARCHIVE_OK, + archive_read_support_format_all(a)); + assertEqualIntA(a, ARCHIVE_OK, + archive_read_open_filename(a, refname, 10240)); - /* Verify regular file1. */ - assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); - assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae)); - assertEqualString("a.txt", archive_entry_pathname(ae)); - assertEqualInt(1576808819, archive_entry_mtime(ae)); - assertEqualInt(4, archive_entry_size(ae)); - assertEqualInt(archive_entry_is_encrypted(ae), 0); - assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); - assertEqualInt(4, archive_read_data(a, buff, sizeof(buff))); - assertEqualMem(buff, "aaa\n", 4); + /* Verify regular file1. */ + assertEqualIntA(a, ARCHIVE_OK, + archive_read_next_header(a, &ae)); + assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae)); + assertEqualString("a.txt", archive_entry_pathname(ae)); + assertEqualInt(1576808819, archive_entry_mtime(ae)); + assertEqualInt(4, archive_entry_size(ae)); + assertEqualInt(archive_entry_is_encrypted(ae), 0); + assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); + assertEqualInt(4, archive_read_data(a, buff, sizeof(buff))); + assertEqualMem(buff, "aaa\n", 4); - /* Verify regular file2. */ - assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); - assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae)); - assertEqualString("b.txt", archive_entry_pathname(ae)); - assertEqualInt(1576808819, archive_entry_mtime(ae)); - assertEqualInt(4, archive_entry_size(ae)); - assertEqualInt(archive_entry_is_encrypted(ae), 0); - assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); - assertEqualInt(4, archive_read_data(a, buff, sizeof(buff))); - assertEqualMem(buff, "bbb\n", 4); + /* Verify regular file2. */ + assertEqualIntA(a, ARCHIVE_OK, + archive_read_next_header(a, &ae)); + assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae)); + assertEqualString("b.txt", archive_entry_pathname(ae)); + assertEqualInt(1576808819, archive_entry_mtime(ae)); + assertEqualInt(4, archive_entry_size(ae)); + assertEqualInt(archive_entry_is_encrypted(ae), 0); + assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); + assertEqualInt(4, archive_read_data(a, buff, sizeof(buff))); + assertEqualMem(buff, "bbb\n", 4); - assertEqualInt(2, archive_file_count(a)); + assertEqualInt(2, archive_file_count(a)); - /* End of archive. */ - assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); + /* End of archive. */ + assertEqualIntA(a, ARCHIVE_EOF, + archive_read_next_header(a, &ae)); - /* Verify archive format. */ - assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0)); - assertEqualIntA(a, ARCHIVE_FORMAT_7ZIP, archive_format(a)); + /* Verify archive format. */ + assertEqualIntA(a, ARCHIVE_FILTER_NONE, + archive_filter_code(a, 0)); + assertEqualIntA(a, ARCHIVE_FORMAT_7ZIP, + archive_format(a)); - /* Close the archive. */ - assertEqualInt(ARCHIVE_OK, archive_read_close(a)); + /* Close the archive. */ + assertEqualInt(ARCHIVE_OK, archive_read_close(a)); + } assertEqualInt(ARCHIVE_OK, archive_read_free(a)); } diff --git a/libarchive/test/test_read_format_gtar_sparse.c b/libarchive/test/test_read_format_gtar_sparse.c index 7ab13c1109a..6d15a4745f9 100644 --- a/libarchive/test/test_read_format_gtar_sparse.c +++ b/libarchive/test/test_read_format_gtar_sparse.c @@ -214,8 +214,9 @@ verify_archive_file(const char *name, struct archive_contents *ac) * Any byte before the expected * data must be NULL. */ - failure("%s: pad at offset %d " - "should be zero", name, actual.o); + failure("%s: pad at offset %jd " + "should be zero", name, + (intmax_t)actual.o); assertEqualInt(c, 0); } else if (actual.o == expect.o) { /* diff --git a/libarchive/test/test_read_format_rar5.c b/libarchive/test/test_read_format_rar5.c index bb94d4e34e2..f91521e72f8 100644 --- a/libarchive/test/test_read_format_rar5.c +++ b/libarchive/test/test_read_format_rar5.c @@ -1256,3 +1256,18 @@ DEFINE_TEST(test_read_format_rar5_different_winsize_on_merge) EPILOGUE(); } + +DEFINE_TEST(test_read_format_rar5_block_size_is_too_small) +{ + char buf[4096]; + PROLOGUE("test_read_format_rar5_block_size_is_too_small.rar"); + + /* This file is damaged, so those functions should return failure. + * Additionally, SIGSEGV shouldn't be raised during execution + * of those functions. */ + + assertA(archive_read_next_header(a, &ae) != ARCHIVE_OK); + assertA(archive_read_data(a, buf, sizeof(buf)) <= 0); + + EPILOGUE(); +} diff --git a/libarchive/test/test_read_format_rar5_block_size_is_too_small.rar.uu b/libarchive/test/test_read_format_rar5_block_size_is_too_small.rar.uu new file mode 100644 index 00000000000..5cad2194ee1 --- /dev/null +++ b/libarchive/test/test_read_format_rar5_block_size_is_too_small.rar.uu @@ -0,0 +1,8 @@ +begin 644 test_read_format_rar5_block_size_is_too_small.rar +M4F%R(1H'`0"-[P+2``+'(!P,("`@N`,!`B`@("`@("`@("`@("`@("#_("`@ +M("`@("`@("`@((:Q;2!4-'-^4B`!((WO`M(``O\@$/\@-R`@("`@("`@("`@ +M``X@("`@("`@____("`@("`@(/\@("`@("`@("`@("#_(+6U,2"UM;6UM[CU +M)B`@*(0G(`!.`#D\3R``(/__(,+_````-0#_($&%*/HE=C+N`"```"```"`D +J`)$#("#_("#__P`@__\@_R#_("`@("`@("#_("#__R`@(/__("#__R`" +` +end diff --git a/libarchive/test/test_read_format_zip.c b/libarchive/test/test_read_format_zip.c index 9afbfb6c586..04f7e98ccfc 100644 --- a/libarchive/test/test_read_format_zip.c +++ b/libarchive/test/test_read_format_zip.c @@ -194,7 +194,7 @@ test_basic(void) verify_basic(a, 1); /* Verify with streaming reader. */ - p = slurpfile(&s, refname); + p = slurpfile(&s, "%s", refname); assert((a = archive_read_new()) != NULL); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); @@ -264,7 +264,7 @@ test_info_zip_ux(void) verify_info_zip_ux(a, 1); /* Verify with streaming reader. */ - p = slurpfile(&s, refname); + p = slurpfile(&s, "%s", refname); assert((a = archive_read_new()) != NULL); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); @@ -328,7 +328,7 @@ test_extract_length_at_end(void) verify_extract_length_at_end(a, 1); /* Verify extraction with streaming reader. */ - p = slurpfile(&s, refname); + p = slurpfile(&s, "%s", refname); assert((a = archive_read_new()) != NULL); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); @@ -347,7 +347,7 @@ test_symlink(void) struct archive_entry *ae; extract_reference_file(refname); - p = slurpfile(&s, refname); + p = slurpfile(&s, "%s", refname); /* Symlinks can only be extracted with the seeking reader. */ assert((a = archive_read_new()) != NULL); diff --git a/libarchive/test/test_read_format_zip_7075_utf8_paths.c b/libarchive/test/test_read_format_zip_7075_utf8_paths.c index 7b78770aae4..a0a510c8f29 100644 --- a/libarchive/test/test_read_format_zip_7075_utf8_paths.c +++ b/libarchive/test/test_read_format_zip_7075_utf8_paths.c @@ -90,7 +90,7 @@ DEFINE_TEST(test_read_format_zip_utf8_paths) assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a)); /* Verify with streaming reader. */ - p = slurpfile(&s, refname); + p = slurpfile(&s, "%s", refname); assert((a = archive_read_new()) != NULL); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); diff --git a/libarchive/test/test_read_format_zip_comment_stored.c b/libarchive/test/test_read_format_zip_comment_stored.c index b92b2886cdd..95df0107fec 100644 --- a/libarchive/test/test_read_format_zip_comment_stored.c +++ b/libarchive/test/test_read_format_zip_comment_stored.c @@ -38,7 +38,7 @@ verify(const char *refname) struct archive_entry *ae; extract_reference_file(refname); - p = slurpfile(&s, refname); + p = slurpfile(&s, "%s", refname); /* Symlinks can only be extracted with the seeking reader. */ assert((a = archive_read_new()) != NULL); diff --git a/libarchive/test/test_read_format_zip_extra_padding.c b/libarchive/test/test_read_format_zip_extra_padding.c index 54f7fa04ee8..6e2f836f16e 100644 --- a/libarchive/test/test_read_format_zip_extra_padding.c +++ b/libarchive/test/test_read_format_zip_extra_padding.c @@ -80,7 +80,7 @@ DEFINE_TEST(test_read_format_zip_extra_padding) assertEqualInt(ARCHIVE_OK, archive_read_free(a)); /* Verify with streaming reader. */ - p = slurpfile(&s, refname); + p = slurpfile(&s, "%s", refname); assert((a = archive_read_new()) != NULL); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); diff --git a/libarchive/test/test_read_format_zip_high_compression.c b/libarchive/test/test_read_format_zip_high_compression.c index 42faed378f6..16cfbb18289 100644 --- a/libarchive/test/test_read_format_zip_high_compression.c +++ b/libarchive/test/test_read_format_zip_high_compression.c @@ -56,7 +56,7 @@ DEFINE_TEST(test_read_format_zip_high_compression) } extract_reference_file(refname); - p = slurpfile(&archive_size, refname); + p = slurpfile(&archive_size, "%s", refname); assert((a = archive_read_new()) != NULL); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_zip(a)); diff --git a/libarchive/test/test_read_format_zip_jar.c b/libarchive/test/test_read_format_zip_jar.c index ffb520eb83c..912e6713770 100644 --- a/libarchive/test/test_read_format_zip_jar.c +++ b/libarchive/test/test_read_format_zip_jar.c @@ -40,7 +40,7 @@ DEFINE_TEST(test_read_format_zip_jar) char data[16]; extract_reference_file(refname); - p = slurpfile(&s, refname); + p = slurpfile(&s, "%s", refname); assert((a = archive_read_new()) != NULL); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_zip_seekable(a)); diff --git a/libarchive/test/test_read_format_zip_mac_metadata.c b/libarchive/test/test_read_format_zip_mac_metadata.c index 99b7012328c..3f2813cc989 100644 --- a/libarchive/test/test_read_format_zip_mac_metadata.c +++ b/libarchive/test/test_read_format_zip_mac_metadata.c @@ -76,7 +76,7 @@ DEFINE_TEST(test_read_format_zip_mac_metadata) }; extract_reference_file(refname); - p = slurpfile(&s, refname); + p = slurpfile(&s, "%s", refname); /* Mac metadata can only be extracted with the seeking reader. */ assert((a = archive_read_new()) != NULL); diff --git a/libarchive/test/test_read_format_zip_malformed.c b/libarchive/test/test_read_format_zip_malformed.c index e14a3f5660d..f1160648e75 100644 --- a/libarchive/test/test_read_format_zip_malformed.c +++ b/libarchive/test/test_read_format_zip_malformed.c @@ -46,7 +46,7 @@ test_malformed1(void) assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a)); /* Verify with streaming reader. */ - p = slurpfile(&s, refname); + p = slurpfile(&s, "%s", refname); assert((a = archive_read_new()) != NULL); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); diff --git a/libarchive/test/test_read_format_zip_msdos.c b/libarchive/test/test_read_format_zip_msdos.c index 5f147d55778..1867204bb6e 100644 --- a/libarchive/test/test_read_format_zip_msdos.c +++ b/libarchive/test/test_read_format_zip_msdos.c @@ -103,7 +103,7 @@ DEFINE_TEST(test_read_format_zip_msdos) assertEqualInt(ARCHIVE_OK, archive_read_free(a)); /* Verify with streaming reader. */ - p = slurpfile(&s, refname); + p = slurpfile(&s, "%s", refname); assert((a = archive_read_new()) != NULL); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); diff --git a/libarchive/test/test_read_format_zip_nested.c b/libarchive/test/test_read_format_zip_nested.c index 5f6edf26744..4418fc4f250 100644 --- a/libarchive/test/test_read_format_zip_nested.c +++ b/libarchive/test/test_read_format_zip_nested.c @@ -34,7 +34,7 @@ DEFINE_TEST(test_read_format_zip_nested) struct archive_entry *ae; extract_reference_file(refname); - p = slurpfile(&s, refname); + p = slurpfile(&s, "%s", refname); /* Inspect outer Zip */ assert((a = archive_read_new()) != NULL); diff --git a/libarchive/test/test_read_format_zip_nofiletype.c b/libarchive/test/test_read_format_zip_nofiletype.c index b01afabe953..b3260fa7563 100644 --- a/libarchive/test/test_read_format_zip_nofiletype.c +++ b/libarchive/test/test_read_format_zip_nofiletype.c @@ -40,7 +40,7 @@ DEFINE_TEST(test_read_format_zip_nofiletype) char data[16]; extract_reference_file(refname); - p = slurpfile(&s, refname); + p = slurpfile(&s, "%s", refname); assert((a = archive_read_new()) != NULL); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_zip_seekable(a)); diff --git a/libarchive/test/test_read_format_zip_padded.c b/libarchive/test/test_read_format_zip_padded.c index 2094eca3557..d8c694bae5e 100644 --- a/libarchive/test/test_read_format_zip_padded.c +++ b/libarchive/test/test_read_format_zip_padded.c @@ -34,7 +34,7 @@ verify_padded_archive(const char *refname) struct archive_entry *ae; extract_reference_file(refname); - p = slurpfile(&s, refname); + p = slurpfile(&s, "%s", refname); assert((a = archive_read_new()) != NULL); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_zip_seekable(a)); diff --git a/libarchive/test/test_read_format_zip_sfx.c b/libarchive/test/test_read_format_zip_sfx.c index dc76ef9b382..a33c1b808c5 100644 --- a/libarchive/test/test_read_format_zip_sfx.c +++ b/libarchive/test/test_read_format_zip_sfx.c @@ -37,7 +37,7 @@ DEFINE_TEST(test_read_format_zip_sfx) struct archive_entry *ae; extract_reference_file(refname); - p = slurpfile(&s, refname); + p = slurpfile(&s, "%s", refname); /* Symlinks can only be extracted with the seeking reader. */ assert((a = archive_read_new()) != NULL); diff --git a/libarchive/test/test_read_format_zip_with_invalid_traditional_eocd.c b/libarchive/test/test_read_format_zip_with_invalid_traditional_eocd.c index dc94f94f157..aca8bed6094 100644 --- a/libarchive/test/test_read_format_zip_with_invalid_traditional_eocd.c +++ b/libarchive/test/test_read_format_zip_with_invalid_traditional_eocd.c @@ -39,7 +39,7 @@ DEFINE_TEST(test_read_format_zip_with_invalid_traditional_eocd) struct archive_entry *ae; extract_reference_file(refname); - p = slurpfile(&s, refname); + p = slurpfile(&s, "%s", refname); assert((a = archive_read_new()) != NULL); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_zip_seekable(a)); diff --git a/libarchive/test/test_read_format_zip_zip64.c b/libarchive/test/test_read_format_zip_zip64.c index ac3789f46b8..bd2324e549b 100644 --- a/libarchive/test/test_read_format_zip_zip64.c +++ b/libarchive/test/test_read_format_zip_zip64.c @@ -88,7 +88,7 @@ DEFINE_TEST(test_read_format_zip_zip64a) size_t s; extract_reference_file(refname); - p = slurpfile(&s, refname); + p = slurpfile(&s, "%s", refname); /* First read with seeking. */ assert((a = archive_read_new()) != NULL); @@ -112,7 +112,7 @@ DEFINE_TEST(test_read_format_zip_zip64b) size_t s; extract_reference_file(refname); - p = slurpfile(&s, refname); + p = slurpfile(&s, "%s", refname); /* First read with seeking. */ assert((a = archive_read_new()) != NULL); diff --git a/libarchive/test/test_read_pax_truncated.c b/libarchive/test/test_read_pax_truncated.c index bc5d74d5bdb..1f6e78ace20 100644 --- a/libarchive/test/test_read_pax_truncated.c +++ b/libarchive/test/test_read_pax_truncated.c @@ -82,7 +82,7 @@ DEFINE_TEST(test_read_pax_truncated) assertEqualIntA(a, ARCHIVE_FATAL, archive_read_next_header(a, &ae)); goto wrap_up; } else { - failure("Archive truncated to %d bytes", i); + failure("Archive truncated to %zu bytes", i); assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); } @@ -91,7 +91,7 @@ DEFINE_TEST(test_read_pax_truncated) assertEqualIntA(a, ARCHIVE_FATAL, archive_read_data(a, filedata, filedata_size)); goto wrap_up; } else { - failure("Archive truncated to %d bytes", i); + failure("Archive truncated to %zu bytes", i); assertEqualIntA(a, filedata_size, archive_read_data(a, filedata, filedata_size)); } @@ -103,7 +103,7 @@ DEFINE_TEST(test_read_pax_truncated) * does not return an error if it can't consume * it.) */ if (i < 1536 + 512*((filedata_size + 511)/512) + 512) { - failure("i=%d minsize=%d", i, + failure("i=%zu minsize=%zu", i, 1536 + 512*((filedata_size + 511)/512) + 512); assertEqualIntA(a, ARCHIVE_FATAL, archive_read_next_header(a, &ae)); diff --git a/libarchive/test/test_read_truncated_filter.c b/libarchive/test/test_read_truncated_filter.c index 6cc91e347a2..632638d6fe9 100644 --- a/libarchive/test/test_read_truncated_filter.c +++ b/libarchive/test/test_read_truncated_filter.c @@ -83,7 +83,7 @@ test_truncation(const char *compression, for (i = 0; i < 100; i++) { sprintf(path, "%s%d", compression, i); archive_entry_copy_pathname(ae, path); - failure(path); + failure("%s", path); if (!assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae))) { archive_write_free(a); @@ -94,7 +94,7 @@ test_truncation(const char *compression, for (j = 0; j < (int)datasize; ++j) { data[j] = (char)(rand() % 256); } - failure(path); + failure("%s", path); if (!assertEqualIntA(a, datasize, archive_write_data(a, data, datasize))) { archive_write_free(a); diff --git a/libarchive/test/test_sparse_basic.c b/libarchive/test/test_sparse_basic.c index 5ad591be830..0fbb7f7bf46 100644 --- a/libarchive/test/test_sparse_basic.c +++ b/libarchive/test/test_sparse_basic.c @@ -430,7 +430,7 @@ verify_sparse_file(struct archive *a, const char *path, assert(sparse->type == END); assertEqualInt(expected_offset, archive_entry_size(ae)); - failure(path); + failure("%s", path); assertEqualInt(holes_seen, expected_holes); assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); @@ -466,13 +466,13 @@ verify_sparse_file2(struct archive *a, const char *path, /* Verify the number of holes only, not its offset nor its * length because those alignments are deeply dependence on * its filesystem. */ - failure(path); + failure("%s", path); assertEqualInt(blocks, archive_entry_sparse_count(ae)); archive_entry_free(ae); } static void -test_sparse_whole_file_data() +test_sparse_whole_file_data(void) { struct archive_entry *ae; int64_t offset; diff --git a/libarchive/test/test_write_disk.c b/libarchive/test/test_write_disk.c index 60bcdc24edf..e38dbc78ff4 100644 --- a/libarchive/test/test_write_disk.c +++ b/libarchive/test/test_write_disk.c @@ -186,7 +186,7 @@ static void create_reg_file4(struct archive_entry *ae, const char *msg) #if !defined(_WIN32) || defined(__CYGWIN__) assertEqualInt(st.st_mode, (archive_entry_mode(ae) & ~UMASK)); #endif - failure(msg); + failure("%s", msg); assertEqualInt(st.st_size, sizeof(data)); } diff --git a/libarchive/test/test_write_format_cpio_empty.c b/libarchive/test/test_write_format_cpio_empty.c index 60fb2834013..2ba415c7b98 100644 --- a/libarchive/test/test_write_format_cpio_empty.c +++ b/libarchive/test/test_write_format_cpio_empty.c @@ -64,7 +64,7 @@ DEFINE_TEST(test_write_format_cpio_empty) assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a)); assertEqualInt(ARCHIVE_OK, archive_write_free(a)); - failure("Empty cpio archive should be exactly 87 bytes, was %d.", used); + failure("Empty cpio archive should be exactly 87 bytes, was %zu.", used); assert(used == 87); failure("Empty cpio archive is incorrectly formatted."); assertEqualMem(buff, ref, 87); diff --git a/libarchive/test/test_write_format_pax.c b/libarchive/test/test_write_format_pax.c index 41a423a96a0..4538aac8241 100644 --- a/libarchive/test/test_write_format_pax.c +++ b/libarchive/test/test_write_format_pax.c @@ -104,6 +104,28 @@ DEFINE_TEST(test_write_format_pax) assertEqualIntA(a, 1024, archive_write_data(a, nulls, 1024)); assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9)); + /* + * "file4" is similar to "file1" but has a large uid, large gid, + * uname and gname are longer than 32 characters + */ + assert((ae = archive_entry_new()) != NULL); + archive_entry_set_atime(ae, 2, 20); + archive_entry_set_birthtime(ae, 3, 30); + archive_entry_set_ctime(ae, 4, 40); + archive_entry_set_mtime(ae, 5, 50); + archive_entry_copy_pathname(ae, "file4"); + archive_entry_set_mode(ae, S_IFREG | 0755); + archive_entry_set_size(ae, 8); + archive_entry_copy_uname(ae, + "long-uname123456789012345678901234567890"); + archive_entry_copy_gname(ae, + "long-gname123456789012345678901234567890"); + archive_entry_set_uid(ae, 536870912); + archive_entry_set_gid(ae, 536870913); + assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); + archive_entry_free(ae); + assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9)); + /* * XXX TODO XXX Archive directory, other file types. * Archive extended attributes, ACLs, other metadata. @@ -198,6 +220,30 @@ DEFINE_TEST(test_write_format_pax) assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); assertEqualMem(buff2, "12345678", 8); + /* + * Read "file4 + */ + assertEqualIntA(a, 0, archive_read_next_header(a, &ae)); + assertEqualInt(2, archive_entry_atime(ae)); + assertEqualInt(20, archive_entry_atime_nsec(ae)); + assertEqualInt(3, archive_entry_birthtime(ae)); + assertEqualInt(30, archive_entry_birthtime_nsec(ae)); + assertEqualInt(4, archive_entry_ctime(ae)); + assertEqualInt(40, archive_entry_ctime_nsec(ae)); + assertEqualInt(5, archive_entry_mtime(ae)); + assertEqualInt(50, archive_entry_mtime_nsec(ae)); + assertEqualString("file4", archive_entry_pathname(ae)); + assertEqualString("long-uname123456789012345678901234567890", + archive_entry_uname(ae)); + assertEqualString("long-gname123456789012345678901234567890", + archive_entry_gname(ae)); + assertEqualInt(536870912, archive_entry_uid(ae)); + assertEqualInt(536870913, archive_entry_gid(ae)); + assert((S_IFREG | 0755) == archive_entry_mode(ae)); + assertEqualInt(8, archive_entry_size(ae)); + assertEqualIntA(a, 8, archive_read_data(a, buff2, 10)); + assertEqualMem(buff2, "12345678", 8); + /* * Verify the end of the archive. */ diff --git a/libarchive/test/test_write_format_shar_empty.c b/libarchive/test/test_write_format_shar_empty.c index 03d70a3b5fa..13794b02bb0 100644 --- a/libarchive/test/test_write_format_shar_empty.c +++ b/libarchive/test/test_write_format_shar_empty.c @@ -49,6 +49,6 @@ DEFINE_TEST(test_write_format_shar_empty) assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a)); assertEqualInt(ARCHIVE_OK, archive_write_free(a)); - failure("Empty shar archive should be exactly 0 bytes, was %d.", used); + failure("Empty shar archive should be exactly 0 bytes, was %zu.", used); assert(used == 0); } diff --git a/libarchive/test/test_write_format_tar.c b/libarchive/test/test_write_format_tar.c index 3588e8fe2d9..a5ccdc0115b 100644 --- a/libarchive/test/test_write_format_tar.c +++ b/libarchive/test/test_write_format_tar.c @@ -81,7 +81,7 @@ DEFINE_TEST(test_write_format_tar) /* This calculation gives "the smallest multiple of * the block size that is at least 2048 bytes". */ - failure("blocksize=%d", blocksize); + failure("blocksize=%zu", blocksize); assertEqualInt(((2048 - 1)/blocksize+1)*blocksize, used); /* diff --git a/libarchive/test/test_write_format_tar_sparse.c b/libarchive/test/test_write_format_tar_sparse.c index cc725a9a72e..54ac00988e3 100644 --- a/libarchive/test/test_write_format_tar_sparse.c +++ b/libarchive/test/test_write_format_tar_sparse.c @@ -94,7 +94,7 @@ test_1(void) /* This calculation gives "the smallest multiple of * the block size that is at least 11264 bytes". */ - failure("blocksize=%d", blocksize); + failure("blocksize=%zu", blocksize); assertEqualInt(((11264 - 1)/blocksize+1)*blocksize, used); /* @@ -229,7 +229,7 @@ test_2(void) /* This calculation gives "the smallest multiple of * the block size that is at least 11264 bytes". */ - failure("blocksize=%d", blocksize); + failure("blocksize=%zu", blocksize); assertEqualInt(((11264 - 1)/blocksize+1)*blocksize, used); /* diff --git a/libarchive/test/test_write_format_xar.c b/libarchive/test/test_write_format_xar.c index 7cfdbcf4d17..02fd2c0e35a 100644 --- a/libarchive/test/test_write_format_xar.c +++ b/libarchive/test/test_write_format_xar.c @@ -279,6 +279,7 @@ DEFINE_TEST(test_write_format_xar) /* Disable TOC checksum. */ test_xar("!toc-checksum"); + test_xar("toc-checksum=none"); /* Specify TOC checksum type to sha1. */ test_xar("toc-checksum=sha1"); /* Specify TOC checksum type to md5. */ @@ -286,6 +287,7 @@ DEFINE_TEST(test_write_format_xar) /* Disable file checksum. */ test_xar("!checksum"); + test_xar("checksum=none"); /* Specify file checksum type to sha1. */ test_xar("checksum=sha1"); /* Specify file checksum type to md5. */ @@ -293,6 +295,7 @@ DEFINE_TEST(test_write_format_xar) /* Disable compression. */ test_xar("!compression"); + test_xar("compression=none"); /* Specify compression type to gzip. */ test_xar("compression=gzip"); test_xar("compression=gzip,compression-level=1"); diff --git a/libarchive/test/test_write_format_zip_file.c b/libarchive/test/test_write_format_zip_file.c index e27b23b4b6d..9ac0126e5ac 100644 --- a/libarchive/test/test_write_format_zip_file.c +++ b/libarchive/test/test_write_format_zip_file.c @@ -84,7 +84,7 @@ DEFINE_TEST(test_write_format_zip_file) unsigned char *central_header, *local_header, *eocd, *eocd_record; unsigned char *extension_start, *extension_end; char file_data[] = {'1', '2', '3', '4', '5', '6', '7', '8'}; - char *file_name = "file"; + const char *file_name = "file"; #ifndef HAVE_ZLIB_H zip_version = 10; diff --git a/libarchive/test/test_write_format_zip_file_zip64.c b/libarchive/test/test_write_format_zip_file_zip64.c index 7bba50d2922..4e6344fb533 100644 --- a/libarchive/test/test_write_format_zip_file_zip64.c +++ b/libarchive/test/test_write_format_zip_file_zip64.c @@ -86,7 +86,7 @@ DEFINE_TEST(test_write_format_zip_file_zip64) unsigned char *central_header, *local_header, *eocd, *eocd_record; unsigned char *extension_start, *extension_end; char file_data[] = {'1', '2', '3', '4', '5', '6', '7', '8'}; - char *file_name = "file"; + const char *file_name = "file"; #ifndef HAVE_ZLIB_H zip_compression = 0; diff --git a/libarchive_fe/err.h b/libarchive_fe/err.h index ebf5de814f5..c663103b0b4 100644 --- a/libarchive_fe/err.h +++ b/libarchive_fe/err.h @@ -35,9 +35,14 @@ #if defined(__GNUC__) && (__GNUC__ > 2 || \ (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)) -#define __LA_PRINTFLIKE(f,a) __attribute__((__format__(__printf__, f, a))) +# ifdef __MINGW_PRINTF_FORMAT +# define __LA_PRINTF_FORMAT __MINGW_PRINTF_FORMAT +# else +# define __LA_PRINTF_FORMAT __printf__ +# endif +# define __LA_PRINTFLIKE(f,a) __attribute__((__format__(__LA_PRINTF_FORMAT, f, a))) #else -#define __LA_PRINTFLIKE(f,a) +# define __LA_PRINTFLIKE(f,a) #endif void lafe_warnc(int code, const char *fmt, ...) __LA_PRINTFLIKE(2, 3); diff --git a/tar/bsdtar.1 b/tar/bsdtar.1 index 04b56553ce0..f1574234905 100644 --- a/tar/bsdtar.1 +++ b/tar/bsdtar.1 @@ -25,7 +25,7 @@ .\" .\" $FreeBSD$ .\" -.Dd June 3, 2019 +.Dd January 31, 2020 .Dt TAR 1 .Os .Sh NAME @@ -209,15 +209,16 @@ specified on the command line. .It Fl Fl exclude-vcs Do not process files or directories internally used by the version control systems -.Sq CVS , -.Sq RCS , -.Sq SCCS , -.Sq SVN , .Sq Arch , .Sq Bazaar , -.Sq Mercurial +.Sq CVS , +.Sq Darcs , +.Sq Mercurial , +.Sq RCS , +.Sq SCCS , +.Sq SVN and -.Sq Darcs . +.Sq git . .It Fl Fl fflags (c, r, u, x modes only) Archive or extract platform-specific file attributes or file flags. @@ -469,6 +470,13 @@ This is the reverse of and the default behavior if .Nm is run as non-root in x mode. +.It Fl Fl no-safe-writes +(x mode only) +Do not create temporary files and use +.Xr rename 2 +to replace the original ones. +This is the reverse of +.Fl Fl safe-writes . .It Fl Fl no-same-owner (x mode only) Do not extract owner and group IDs. @@ -567,7 +575,14 @@ As above, but the corresponding key and value will be provided only to modules whose name matches .Ar module . .El -The currently supported modules and keys are: +.Pp +The complete list of supported modules and keys +for create and append modes is in +.Xr archive_write_set_options 3 +and for extract and list modes in +.Xr archive_read_set_options 3 . +.Pp +Examples of supported options: .Bl -tag -compact -width indent .It Cm iso9660:joliet Support Joliet extensions. @@ -756,6 +771,26 @@ The default is .Ar hrs which applies substitutions to all names. In particular, it is never necessary to specify h, r, or s. +.It Fl Fl safe-writes +(x mode only) +Extract files atomically. +By default +.Nm +unlinks the original file with the same name as the extracted file (if it +exists), and then creates it immediately under the same name and writes to +it. +For a short period of time, applications trying to access the file might +not find it, or see incomplete results. +If +.Fl Fl safe-writes +is enabled, +.Nm +first creates a unique temporary file, then writes the new contents to +the temporary file, and finally renames the temporary file to its final +name atomically using +.Xr rename 2 . +This guarantees that an application accessing the file, will either see +the old contents or the new contents at all times. .It Fl Fl same-owner (x mode only) Extract owner and group IDs. diff --git a/tar/bsdtar.c b/tar/bsdtar.c index b59963d0f82..af41be5e4e2 100644 --- a/tar/bsdtar.c +++ b/tar/bsdtar.c @@ -542,6 +542,9 @@ main(int argc, char **argv) bsdtar->extract_flags &= ~ARCHIVE_EXTRACT_MAC_METADATA; bsdtar->flags |= OPTFLAG_NO_MAC_METADATA; break; + case OPTION_NO_SAFE_WRITES: + bsdtar->extract_flags &= ~ARCHIVE_EXTRACT_SAFE_WRITES; + break; case OPTION_NO_SAME_OWNER: /* GNU tar */ bsdtar->extract_flags &= ~ARCHIVE_EXTRACT_OWNER; break; @@ -658,6 +661,9 @@ main(int argc, char **argv) usage(); #endif break; + case OPTION_SAFE_WRITES: + bsdtar->extract_flags |= ARCHIVE_EXTRACT_SAFE_WRITES; + break; case OPTION_SAME_OWNER: /* GNU tar */ bsdtar->extract_flags |= ARCHIVE_EXTRACT_OWNER; break; diff --git a/tar/bsdtar.h b/tar/bsdtar.h index c61d568fd74..89aa3aa9198 100644 --- a/tar/bsdtar.h +++ b/tar/bsdtar.h @@ -25,6 +25,9 @@ * $FreeBSD: src/usr.bin/tar/bsdtar.h,v 1.37 2008/12/06 07:37:14 kientzle Exp $ */ +#ifndef BSDTAR_H_INCLUDED +#define BSDTAR_H_INCLUDED + #include "bsdtar_platform.h" #include @@ -161,6 +164,7 @@ enum { OPTION_NO_ACLS, OPTION_NO_FFLAGS, OPTION_NO_MAC_METADATA, + OPTION_NO_SAFE_WRITES, OPTION_NO_SAME_OWNER, OPTION_NO_SAME_PERMISSIONS, OPTION_NO_XATTRS, @@ -174,6 +178,7 @@ enum { OPTION_OPTIONS, OPTION_PASSPHRASE, OPTION_POSIX, + OPTION_SAFE_WRITES, OPTION_SAME_OWNER, OPTION_STRIP_COMPONENTS, OPTION_TOTALS, @@ -224,3 +229,5 @@ const char * passphrase_callback(struct archive *, void *); void passphrase_free(char *); void list_item_verbose(struct bsdtar *, FILE *, struct archive_entry *); + +#endif diff --git a/tar/cmdline.c b/tar/cmdline.c index 21558e12df4..b80937ffcb6 100644 --- a/tar/cmdline.c +++ b/tar/cmdline.c @@ -123,6 +123,7 @@ static const struct bsdtar_option { { "no-fflags", 0, OPTION_NO_FFLAGS }, { "no-mac-metadata", 0, OPTION_NO_MAC_METADATA }, { "no-recursion", 0, 'n' }, + { "no-safe-writes", 0, OPTION_NO_SAFE_WRITES }, { "no-same-owner", 0, OPTION_NO_SAME_OWNER }, { "no-same-permissions", 0, OPTION_NO_SAME_PERMISSIONS }, { "no-xattr", 0, OPTION_NO_XATTRS }, @@ -144,6 +145,7 @@ static const struct bsdtar_option { { "posix", 0, OPTION_POSIX }, { "preserve-permissions", 0, 'p' }, { "read-full-blocks", 0, 'B' }, + { "safe-writes", 0, OPTION_SAFE_WRITES }, { "same-owner", 0, OPTION_SAME_OWNER }, { "same-permissions", 0, 'p' }, { "strip-components", 1, OPTION_STRIP_COMPONENTS }, diff --git a/tar/test/CMakeLists.txt b/tar/test/CMakeLists.txt index 459d9dcb1ef..2cd573acfaa 100644 --- a/tar/test/CMakeLists.txt +++ b/tar/test/CMakeLists.txt @@ -59,6 +59,7 @@ IF(ENABLE_TAR AND ENABLE_TEST) test_option_q.c test_option_r.c test_option_s.c + test_option_safe_writes.c test_option_uid_uname.c test_option_uuencode.c test_option_xattrs.c diff --git a/tar/test/test_basic.c b/tar/test/test_basic.c index 9bb966a0cf8..b1c49834a45 100644 --- a/tar/test/test_basic.c +++ b/tar/test/test_basic.c @@ -96,7 +96,7 @@ run_tar(const char *target, const char *pack_options, /* Use the tar program to create an archive. */ r = systemf("%s cf - %s %s >%s/archive 2>%s/pack.err", testprog, pack_options, flist, target, target); - failure("Error invoking %s cf -", testprog, pack_options); + failure("Error invoking %s cf -%s", testprog, pack_options); assertEqualInt(r, 0); assertChdir(target); diff --git a/tar/test/test_copy.c b/tar/test/test_copy.c index b828666b93f..d618e45ca36 100644 --- a/tar/test/test_copy.c +++ b/tar/test/test_copy.c @@ -256,13 +256,13 @@ verify_tree(size_t limit) continue; switch(dp[0]) { case 'l': case 'm': case 'd': - failure("strlen(p)=%d", strlen(p)); + failure("strlen(p)=%zu", strlen(p)); assert(strlen(p) < limit); assertEqualString(p, filenames[strlen(p)]); break; case 'f': case 's': - failure("strlen(p)=%d", strlen(p)); + failure("strlen(p)=%zu", strlen(p)); assert(strlen(p) < limit + 1); assertEqualString(p, filenames[strlen(p)]); diff --git a/tar/test/test_option_C_upper.c b/tar/test/test_option_C_upper.c index dae98544689..538890f5817 100644 --- a/tar/test/test_option_C_upper.c +++ b/tar/test/test_option_C_upper.c @@ -117,7 +117,7 @@ DEFINE_TEST(test_option_C_upper) assertMakeDir("test6", 0755); assertChdir("test6"); r = systemf("%s -cf archive.tar -C XXX -C ../d1 file1 2>write.err", - testprog, testworkdir); + testprog); assert(r != 0); assertNonEmptyFile("write.err"); assertEqualInt(0, diff --git a/tar/test/test_option_s.c b/tar/test/test_option_s.c index 09c72ee7d63..fa799a295d0 100644 --- a/tar/test/test_option_s.c +++ b/tar/test/test_option_s.c @@ -92,10 +92,8 @@ DEFINE_TEST(test_option_s) * Test 5: Name-switching substitutions when extracting archive. */ assertMakeDir("test5", 0755); - systemf("%s -cf test5.tar in/d1/foo in/d1/bar", - testprog, testprog); - systemf("%s -xf test5.tar -s /foo/bar/ -s }bar}foo} -C test5", - testprog, testprog); + systemf("%s -cf test5.tar in/d1/foo in/d1/bar", testprog); + systemf("%s -xf test5.tar -s /foo/bar/ -s }bar}foo} -C test5", testprog); assertFileContents("foo", 3, "test5/in/d1/bar"); assertFileContents("bar", 3, "test5/in/d1/foo"); diff --git a/tar/test/test_option_safe_writes.c b/tar/test/test_option_safe_writes.c new file mode 100644 index 00000000000..8edf5c69f7e --- /dev/null +++ b/tar/test/test_option_safe_writes.c @@ -0,0 +1,77 @@ +/*- + * Copyright (c) 2020 Martin Matuska + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "test.h" +__FBSDID("$FreeBSD$"); + +DEFINE_TEST(test_option_safe_writes) +{ + /* Create files */ + assertMakeDir("in", 0755); + assertEqualInt(0, chdir("in")); + assertMakeFile("f", 0644, "a"); + assertMakeFile("fh", 0644, "b"); + assertMakeFile("d", 0644, "c"); + assertMakeFile("fs", 0644, "d"); + assertMakeFile("ds", 0644, "e"); + assertEqualInt(0, chdir("..")); + + /* Tar files up */ + assertEqualInt(0, + systemf("%s -c -C in -f t.tar f fh d fs ds " + ">pack.out 2>pack.err", testprog)); + + /* Verify that nothing went to stdout or stderr. */ + assertEmptyFile("pack.err"); + assertEmptyFile("pack.out"); + + /* Create various objects */ + assertMakeDir("out", 0755); + assertEqualInt(0, chdir("out")); + assertMakeFile("f", 0644, "a"); + assertMakeHardlink("fh", "f"); + assertMakeDir("d", 0755); + if (canSymlink()) { + assertMakeSymlink("fs", "f", 0); + assertMakeSymlink("ds", "d", 1); + } + assertEqualInt(0, chdir("..")); + + /* Extract created archive withe safe writes */ + assertEqualInt(0, + systemf("%s -x -C out --safe-writes -f t.tar " + ">unpack.out 2>unpack.err", testprog)); + + /* Verify that nothing went to stdout or stderr. */ + assertEmptyFile("unpack.err"); + assertEmptyFile("unpack.out"); + + /* Verify that files were overwritten properly */ + assertEqualInt(0, chdir("out")); + assertTextFileContents("a","f"); + assertTextFileContents("b","fh"); + assertTextFileContents("c","d"); + assertTextFileContents("d","fs"); + assertTextFileContents("e","ds"); +} diff --git a/tar/util.c b/tar/util.c index 662db5baa79..8ebec64c48d 100644 --- a/tar/util.c +++ b/tar/util.c @@ -666,6 +666,14 @@ list_item_verbose(struct bsdtar *bsdtar, FILE *out, struct archive_entry *entry) const char *fmt; time_t tim; static time_t now; + struct tm *ltime; +#if defined(HAVE_LOCALTIME_R) || defined(HAVE__LOCALTIME64_S) + struct tm tmbuf; +#endif +#if defined(HAVE__LOCALTIME64_S) + errno_t terr; + __time64_t tmptime; +#endif /* * We avoid collecting the entire list in memory at once by @@ -737,7 +745,19 @@ list_item_verbose(struct bsdtar *bsdtar, FILE *out, struct archive_entry *entry) fmt = bsdtar->day_first ? DAY_FMT " %b %Y" : "%b " DAY_FMT " %Y"; else fmt = bsdtar->day_first ? DAY_FMT " %b %H:%M" : "%b " DAY_FMT " %H:%M"; - strftime(tmp, sizeof(tmp), fmt, localtime(&tim)); +#if defined(HAVE_LOCALTIME_R) + ltime = localtime_r(&tim, &tmbuf); +#elif defined(HAVE__LOCALTIME64_S) + tmptime = tim; + terr = _localtime64_s(&tmbuf, &tmptime); + if (terr) + ltime = NULL; + else + ltime = &tmbuf; +#else + ltime = localtime(&tim); +#endif + strftime(tmp, sizeof(tmp), fmt, ltime); fprintf(out, " %s ", tmp); safe_fprintf(out, "%s", archive_entry_pathname(entry)); diff --git a/test_utils/test_common.h b/test_utils/test_common.h index 7538d8cb7b5..80d54f0a450 100644 --- a/test_utils/test_common.h +++ b/test_utils/test_common.h @@ -38,6 +38,9 @@ #elif defined(__FreeBSD__) /* Building as part of FreeBSD system requires a pre-built config.h. */ #include "config_freebsd.h" +#elif defined(__NetBSD__) +/* Building as part of NetBSD system requires a pre-built config.h. */ +#include "config_netbsd.h" #elif defined(_WIN32) && !defined(__CYGWIN__) /* Win32 can't run the 'configure' script. */ #include "config_windows.h" @@ -112,6 +115,19 @@ #pragma warn -8068 /* Constant out of range in comparison. */ #endif + +#if defined(__GNUC__) && (__GNUC__ > 2 || \ + (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)) +# ifdef __MINGW_PRINTF_FORMAT +# define __LA_PRINTF_FORMAT __MINGW_PRINTF_FORMAT +# else +# define __LA_PRINTF_FORMAT __printf__ +# endif +# define __LA_PRINTFLIKE(f,a) __attribute__((__format__(__LA_PRINTF_FORMAT, f, a))) +#else +# define __LA_PRINTFLIKE(f,a) +#endif + /* Haiku OS and QNX */ #if defined(__HAIKU__) || defined(__QNXNTO__) /* Haiku and QNX have typedefs in stdint.h (needed for int64_t) */ @@ -132,6 +148,10 @@ #define O_BINARY 0 #endif +#ifndef __LIBARCHIVE_TEST_COMMON +#define __LIBARCHIVE_TEST_COMMON +#endif + #include "archive_platform_acl.h" #define ARCHIVE_TEST_ACL_TYPE_POSIX1E 1 #define ARCHIVE_TEST_ACL_TYPE_NFS4 2 @@ -259,7 +279,7 @@ skipping_setup(__FILE__, __LINE__);test_skipping /* Function declarations. These are defined in test_utility.c. */ -void failure(const char *fmt, ...); +void failure(const char *fmt, ...) __LA_PRINTFLIKE(1, 2); int assertion_assert(const char *, int, int, const char *, void *); int assertion_chdir(const char *, int, const char *); int assertion_compare_fflags(const char *, int, const char *, const char *, @@ -302,10 +322,10 @@ int assertion_utimes(const char *, int, const char *, long, long, long, long ); int assertion_version(const char*, int, const char *, const char *); void skipping_setup(const char *, int); -void test_skipping(const char *fmt, ...); +void test_skipping(const char *fmt, ...) __LA_PRINTFLIKE(1, 2); /* Like sprintf, then system() */ -int systemf(const char * fmt, ...); +int systemf(const char *fmt, ...) __LA_PRINTFLIKE(1, 2); /* Delay until time() returns a value after this. */ void sleepUntilAfter(time_t); @@ -368,7 +388,7 @@ void *sunacl_get(int cmd, int *aclcnt, int fd, const char *path); /* Suck file into string allocated via malloc(). Call free() when done. */ /* Supports printf-style args: slurpfile(NULL, "%s/myfile", refdir); */ -char *slurpfile(size_t *, const char *fmt, ...); +char *slurpfile(size_t *, const char *fmt, ...) __LA_PRINTFLIKE(2, 3); /* Dump block of bytes to a file. */ void dumpfile(const char *filename, void *, size_t); diff --git a/test_utils/test_main.c b/test_utils/test_main.c index 1b44edf171d..7b8aa70fac2 100644 --- a/test_utils/test_main.c +++ b/test_utils/test_main.c @@ -388,7 +388,7 @@ static const char *refdir; */ static int log_console = 0; static FILE *logfile; -static void +static void __LA_PRINTFLIKE(1, 0) vlogprintf(const char *fmt, va_list ap) { #ifdef va_copy @@ -406,7 +406,7 @@ vlogprintf(const char *fmt, va_list ap) #endif } -static void +static void __LA_PRINTFLIKE(1, 2) logprintf(const char *fmt, ...) { va_list ap; @@ -478,7 +478,7 @@ static struct line { const char *failed_filename; /* Count this failure, setup up log destination and handle initial report. */ -static void +static void __LA_PRINTFLIKE(3, 4) failure_start(const char *filename, int line, const char *fmt, ...) { va_list ap; @@ -751,7 +751,7 @@ static void strdump(const char *e, const char *p, int ewidth, int utf8) logprintf("]"); logprintf(" (count %d", cnt); if (n < 0) { - logprintf(",unknown %d bytes", len); + logprintf(",unknown %zu bytes", len); } logprintf(")"); @@ -1167,7 +1167,7 @@ assertion_text_file_contents(const char *filename, int line, const char *buff, c logprintf(" file=\"%s\"\n", fn); if (n > 0) { hexdump(contents, buff, n, 0); - logprintf(" expected\n", fn); + logprintf(" expected\n"); hexdump(buff, contents, s, 0); } else { logprintf(" File empty, contents should be:\n"); @@ -1497,7 +1497,7 @@ assertion_file_time(const char *file, int line, } } else if (filet != t || filet_nsec != nsec) { failure_start(file, line, - "File %s has %ctime %lld.%09lld, expected %lld.%09lld", + "File %s has %ctime %lld.%09lld, expected %ld.%09ld", pathname, type, filet, filet_nsec, t, nsec); failure_finish(NULL); return (0); @@ -1593,8 +1593,8 @@ assertion_file_nlinks(const char *file, int line, r = my_GetFileInformationByName(pathname, &bhfi); if (r != 0 && bhfi.nNumberOfLinks == (DWORD)nlinks) return (1); - failure_start(file, line, "File %s has %d links, expected %d", - pathname, bhfi.nNumberOfLinks, nlinks); + failure_start(file, line, "File %s has %jd links, expected %d", + pathname, (intmax_t)bhfi.nNumberOfLinks, nlinks); failure_finish(NULL); return (0); #else @@ -1605,8 +1605,8 @@ assertion_file_nlinks(const char *file, int line, r = lstat(pathname, &st); if (r == 0 && (int)st.st_nlink == nlinks) return (1); - failure_start(file, line, "File %s has %d links, expected %d", - pathname, st.st_nlink, nlinks); + failure_start(file, line, "File %s has %jd links, expected %d", + pathname, (intmax_t)st.st_nlink, nlinks); failure_finish(NULL); return (0); #endif @@ -2480,7 +2480,7 @@ canBzip2(void) static int tested = 0, value = 0; if (!tested) { tested = 1; - if (systemf("bzip2 -d -V %s", redirectArgs) == 0) + if (systemf("bzip2 --help %s", redirectArgs) == 0) value = 1; } return (value); @@ -2510,7 +2510,7 @@ canGzip(void) static int tested = 0, value = 0; if (!tested) { tested = 1; - if (systemf("gzip -V %s", redirectArgs) == 0) + if (systemf("gzip --help %s", redirectArgs) == 0) value = 1; } return (value); @@ -2552,7 +2552,7 @@ canLz4(void) static int tested = 0, value = 0; if (!tested) { tested = 1; - if (systemf("lz4 -V %s", redirectArgs) == 0) + if (systemf("lz4 --help %s", redirectArgs) == 0) value = 1; } return (value); @@ -2567,7 +2567,7 @@ canZstd(void) static int tested = 0, value = 0; if (!tested) { tested = 1; - if (systemf("zstd -V %s", redirectArgs) == 0) + if (systemf("zstd --help %s", redirectArgs) == 0) value = 1; } return (value); @@ -2582,7 +2582,7 @@ canLzip(void) static int tested = 0, value = 0; if (!tested) { tested = 1; - if (systemf("lzip -V %s", redirectArgs) == 0) + if (systemf("lzip --help %s", redirectArgs) == 0) value = 1; } return (value); @@ -2597,7 +2597,7 @@ canLzma(void) static int tested = 0, value = 0; if (!tested) { tested = 1; - if (systemf("lzma -V %s", redirectArgs) == 0) + if (systemf("lzma %s", redirectArgs) == 0) value = 1; } return (value); @@ -2612,7 +2612,7 @@ canLzop(void) static int tested = 0, value = 0; if (!tested) { tested = 1; - if (systemf("lzop -V %s", redirectArgs) == 0) + if (systemf("lzop --help %s", redirectArgs) == 0) value = 1; } return (value); @@ -2627,7 +2627,7 @@ canXz(void) static int tested = 0, value = 0; if (!tested) { tested = 1; - if (systemf("xz -V %s", redirectArgs) == 0) + if (systemf("xz --help %s", redirectArgs) == 0) value = 1; } return (value); @@ -3271,7 +3271,7 @@ assertion_entry_set_acls(const char *file, int line, struct archive_entry *ae, acls[i].qual, acls[i].name); if (r != 0) { ret = 1; - failure_start(file, line, "type=%#010x, ", + failure_start(file, line, "type=%#010x, " "permset=%#010x, tag=%d, qual=%d name=%s", acls[i].type, acls[i].permset, acls[i].tag, acls[i].qual, acls[i].name); @@ -3499,9 +3499,9 @@ static int test_run(int i, const char *tmpdir) { #ifdef PATH_MAX - char workdir[PATH_MAX]; + char workdir[PATH_MAX * 2]; #else - char workdir[1024]; + char workdir[1024 * 2]; #endif char logfilename[64]; int failures_before = failures; From 49f384cb477bd32a4d1e85f0bf9fe7499f6b3e72 Mon Sep 17 00:00:00 2001 From: Eugene Grosbein Date: Wed, 12 Feb 2020 00:31:00 +0000 Subject: [PATCH 087/144] ng_nat: avoid panic if attached directly to ng_ether and got short packet From the beginning, ng_nat safely assumed cleansed traffic because of limited ways it could be attached to NETGRAPH: ng_ipfw or ng_ppp only. Now as it may be attached with ng_ether too, the assumption proven wrong. Add needed check to the ng_nat. Thanks for markj for debugging this. PR: 243096 Submitted by: Lutz Donnerhacke Reported by: Robert James Hernandez Reviewed by: markj and others MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D23091 --- sys/netgraph/ng_nat.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/sys/netgraph/ng_nat.c b/sys/netgraph/ng_nat.c index f0784f43ddb..4b6039d3365 100644 --- a/sys/netgraph/ng_nat.c +++ b/sys/netgraph/ng_nat.c @@ -806,11 +806,16 @@ ng_nat_rcvdata(hook_p hook, item_p item ) panic("Corrupted priv->dlt: %u", priv->dlt); } + if (m->m_pkthdr.len < ipofs + sizeof(struct ip)) + goto send; /* packet too short to hold IP */ + c = (char *)mtodo(m, ipofs); ip = (struct ip *)mtodo(m, ipofs); - KASSERT(m->m_pkthdr.len == ipofs + ntohs(ip->ip_len), - ("ng_nat: ip_len != m_pkthdr.len")); + if (ip->ip_v != IPVERSION) + goto send; /* other IP version, let it pass */ + if (m->m_pkthdr.len < ipofs + ntohs(ip->ip_len)) + goto send; /* packet too short (i.e. fragmented or broken) */ /* * We drop packet when: From 04777538e7381726cec143bd00c08de064106ce8 Mon Sep 17 00:00:00 2001 From: Eugene Grosbein Date: Wed, 12 Feb 2020 00:46:33 +0000 Subject: [PATCH 088/144] ipfw nat: add missing bits after r357092 (RFC 6598/Carrier Grade NAT) Submitted by: Neel Chauhan Reviewed by: Lutz Donnerhacke MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D23448 --- sbin/ipfw/nat.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sbin/ipfw/nat.c b/sbin/ipfw/nat.c index 6c861e7c2c2..51fc9da1710 100644 --- a/sbin/ipfw/nat.c +++ b/sbin/ipfw/nat.c @@ -793,6 +793,7 @@ ipfw_config_nat(int ac, char **av) case TOK_SAME_PORTS: case TOK_SKIP_GLOBAL: case TOK_UNREG_ONLY: + case TOK_UNREG_CGN: case TOK_RESET_ADDR: case TOK_ALIAS_REV: case TOK_PROXY_ONLY: @@ -887,6 +888,9 @@ ipfw_config_nat(int ac, char **av) case TOK_UNREG_ONLY: n->mode |= PKT_ALIAS_UNREGISTERED_ONLY; break; + case TOK_UNREG_CGN: + n->mode |= PKT_ALIAS_UNREGISTERED_CGN; + break; case TOK_SKIP_GLOBAL: n->mode |= PKT_ALIAS_SKIP_GLOBAL; break; From 8e2e3137a3e5e9957cadccb1b25c723c927b0254 Mon Sep 17 00:00:00 2001 From: Brooks Davis Date: Wed, 12 Feb 2020 00:58:17 +0000 Subject: [PATCH 089/144] Mark hme(4) as deprecated. It was saved from the initial purge of drivers in fcp-101 due to being the onboard Ethernet device on a number of sparc64 machines. Now that sparc64 is gone, it serves little purpose (PCI cards exist, but are rare and are unlikely to have been deployed outside Sun systems). MFC after: 3 days --- share/man/man4/hme.4 | 10 +++++++++- sys/dev/hme/if_hme.c | 2 ++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/share/man/man4/hme.4 b/share/man/man4/hme.4 index f75ee452be1..0cc2aea1ff0 100644 --- a/share/man/man4/hme.4 +++ b/share/man/man4/hme.4 @@ -29,7 +29,7 @@ .\" .\" $FreeBSD$ .\" -.Dd June 14, 2009 +.Dd February 12, 2020 .Dt HME 4 .Os .Sh NAME @@ -50,6 +50,14 @@ module at boot time, place the following line in .Bd -literal -offset indent if_hme_load="YES" .Ed +.Sh DEPRECATION NOTICE +The +.Nm +driver is not present in +.Fx 13.0 +and later. +See https://github.com/freebsd/fcp/blob/master/fcp-0101.md for more +information. .Sh DESCRIPTION The .Nm diff --git a/sys/dev/hme/if_hme.c b/sys/dev/hme/if_hme.c index 10e1c5d772f..c35d6d13148 100644 --- a/sys/dev/hme/if_hme.c +++ b/sys/dev/hme/if_hme.c @@ -373,6 +373,8 @@ hme_config(struct hme_softc *sc) ifp->if_capabilities |= IFCAP_VLAN_MTU | IFCAP_HWCSUM; ifp->if_hwassist |= sc->sc_csum_features; ifp->if_capenable |= IFCAP_VLAN_MTU | IFCAP_HWCSUM; + + gone_in_dev(sc->sc_dev, 13, "10/100 NIC almost exclusively for sparc64"); return (0); fail_txdesc: From 77ad00bf36d0786acd06748af759d3464a6e8120 Mon Sep 17 00:00:00 2001 From: Navdeep Parhar Date: Wed, 12 Feb 2020 02:55:06 +0000 Subject: [PATCH 090/144] cxgbe(4): Update T4/5/6 firmwares to 1.24.12.0. Obtained from: Chelsio Communications MFC after: 1 month Sponsored by: Chelsio Communications --- sys/conf/files | 6 +++--- sys/dev/cxgbe/firmware/t4fw-1.24.11.0.bin | Bin 568832 -> 0 bytes sys/dev/cxgbe/firmware/t4fw-1.24.12.0.bin | Bin 0 -> 568832 bytes sys/dev/cxgbe/firmware/t4fw_interface.h | 6 +++--- ...{t5fw-1.24.11.0.bin => t5fw-1.24.12.0.bin} | Bin 673280 -> 673280 bytes sys/dev/cxgbe/firmware/t6fw-1.24.11.0.bin | Bin 727552 -> 0 bytes sys/dev/cxgbe/firmware/t6fw-1.24.12.0.bin | Bin 0 -> 727552 bytes sys/modules/cxgbe/t4_firmware/Makefile | 2 +- sys/modules/cxgbe/t5_firmware/Makefile | 2 +- sys/modules/cxgbe/t6_firmware/Makefile | 2 +- 10 files changed, 9 insertions(+), 9 deletions(-) delete mode 100644 sys/dev/cxgbe/firmware/t4fw-1.24.11.0.bin create mode 100644 sys/dev/cxgbe/firmware/t4fw-1.24.12.0.bin rename sys/dev/cxgbe/firmware/{t5fw-1.24.11.0.bin => t5fw-1.24.12.0.bin} (54%) delete mode 100644 sys/dev/cxgbe/firmware/t6fw-1.24.11.0.bin create mode 100644 sys/dev/cxgbe/firmware/t6fw-1.24.12.0.bin diff --git a/sys/conf/files b/sys/conf/files index 32443799dc0..41e37007c66 100644 --- a/sys/conf/files +++ b/sys/conf/files @@ -1473,7 +1473,7 @@ t4fw.fwo optional cxgbe \ no-implicit-rule \ clean "t4fw.fwo" t4fw.fw optional cxgbe \ - dependency "$S/dev/cxgbe/firmware/t4fw-1.24.11.0.bin" \ + dependency "$S/dev/cxgbe/firmware/t4fw-1.24.12.0.bin" \ compile-with "${CP} ${.ALLSRC} ${.TARGET}" \ no-obj no-implicit-rule \ clean "t4fw.fw" @@ -1507,7 +1507,7 @@ t5fw.fwo optional cxgbe \ no-implicit-rule \ clean "t5fw.fwo" t5fw.fw optional cxgbe \ - dependency "$S/dev/cxgbe/firmware/t5fw-1.24.11.0.bin" \ + dependency "$S/dev/cxgbe/firmware/t5fw-1.24.12.0.bin" \ compile-with "${CP} ${.ALLSRC} ${.TARGET}" \ no-obj no-implicit-rule \ clean "t5fw.fw" @@ -1541,7 +1541,7 @@ t6fw.fwo optional cxgbe \ no-implicit-rule \ clean "t6fw.fwo" t6fw.fw optional cxgbe \ - dependency "$S/dev/cxgbe/firmware/t6fw-1.24.11.0.bin" \ + dependency "$S/dev/cxgbe/firmware/t6fw-1.24.12.0.bin" \ compile-with "${CP} ${.ALLSRC} ${.TARGET}" \ no-obj no-implicit-rule \ clean "t6fw.fw" diff --git a/sys/dev/cxgbe/firmware/t4fw-1.24.11.0.bin b/sys/dev/cxgbe/firmware/t4fw-1.24.11.0.bin deleted file mode 100644 index db5848ec8d2e53d2ef875554aa34f34920fa560f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 568832 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

U<0;u>p?XSNdN1}PAOU+?Dm>f+w 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

P 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 NjU{ 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≷;u(%AR$=`oMjYaf5k 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

Hw`eP^%6C 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

p53x9=q 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

-DxPCe}E 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

s^w8o& zKK9PQWQ7(7di>#LMMY}sw-wNH_+A<~5*;>Tq&PjAT+!lQ@sIqTQEjTr-vkC+ztE50 z3h~T1I{5lEXV3JzE$3dpu-R@9YPk@eISO*kI48_Fcf)y6CsW2*l6(jd=tJ@k;m$T1 zWgLu2lXHhK?YQ|}@$_+K)_%^|sM8<9PRKdal%e!;L2{YhB8gXe5NT0{L!(*K#8Va| zzxIwV=Wxi6jf0s0`EKc{?ioEj1{DR$3w$yrx@+Liw z;2$KpY)66q{A+bLOdzee)$1t5g!9o=Atv?Zkc+hB3`p_CfBan5RENH|5 z(1Ky56})vQY)6IXpm`w+hbY@FQ4W{8r%&-2c*ZtD;FyfT#g7PmD(cu%zrD=cd4Yxb#vUg8ZY(Zoed2kF%TGiindS=wyxxCjXs&=ko=KAL4mdp8%MF>-(K^;ky4#&8tR=4*aG+63yyO@R_ zND&RpAQ~N>Y(L#+;1JJ2oqS;rUh8mw$L*oCO(88BDDfH?MtUCy<`j~zk7HTH==y;? z0S}nh09W>$im@#Zj_`FXF|@^zS};)S+foq%etWuM&{Oj0IQWDwiOmV1`EPa76F3}0 zel-0gE=L}BebS!$roAkZ%=4b_wyG>5#%7+ZA?*(m`5kU$eR-+3SK3|O$nWr61YzK3 z-(x@ftU}M_l0{yPX%lq9AMhWjMQXzm8o=~Rt$CN`POMJDmcAsBr}24@Q(%VxqgDu(fz*H)uF5=zO}$Qs@LXm|P|m>@e2;BxCn^LMeO0_Ag1Ia_4O(KVmnYXhA$Bq+F$BTfQPOZvE0tuPs@+1HmBH=!i#t$ z+DG18#IBw{JD#!+{PAGmkGimue)se(ILh!$DJPOkkU?li5-vet$6q(@5(sRFUhce% zH$-PxQZo=*;Jz7XT@OdT;9%EG_!v(hV|mihe;AnNxw00Kp^YgE$b>7{-7d+K3LPx) zOvxw9ui)7rO@Y>9;80bUs~~;%6XjJ{yeFA+6-(HN;70akJ^A@6@Ys7D|0kS)62k(7 z;{Npw{n+pKRr>nHtosQxx4{LrRU@lk7RNa#hIO`%R@5YoA=VYvKT^NJWt}iQR;b69 zve-ikKm)pEKjUpEKSWH?{@T@Bj5}C+K3ikh$NC*$ZbfKKL)cpoxIzc;WU^)6{lrUX z&wd__{x-B6xS6Ov^m7;Z;!(1OzHZKPq>D6R*boOyuxQd<=Bss9X3vj(taDzv3jjLe?~pnUXJ) z`M=_&*3%ZpiITr39=}1hi6KXR!#g2TG~_m(!GG_Q+=f)%##3#chQ->7k|T-Y4q#*l zX}AMP!GWZ_5|0Xv4Vi*tR`p5WG@9QfM*=uy{4hN~o~~2(^DlQ zGuq0 zc>j6LxyD?b#mWL0U($y~(JVGn8{CVOKf|knB28@e>`S03eiBwj$%DV-g~sy30w_Z- z0tXtD`i5Q%nf4rFx{-g8tG6GV}!=EZ$e!eF*HN z<##n88JD&fa13ACBn>9lUf{NnB(Z&oy95UTbEU#rT#8l$Sc=37L;74AiDOG39N62} z@~aOKWn}D2;4C+?@+FpfE)w^)vw*IYDO=9BUhL-6+q$lo3%U6cBA*Y4^DDg2W`;6M z-FHAi2k&gP^Tr3Pv zUm#7NAF3G^t{L8tcz|?xjr|hlfVbA7JEV+@1d_z95L%{uL7Ezkag-XUx$&fg;?9dD z_Fz{*g&!y>Ul^KRkQ2#$lv+tE<2sRzuW?VGg-r`{RW;1vtV;N079dpkaTf2y0%CrR zmxJ}Z{4X2|2bGThg(oBHRcnOG&_WXX2FrXA{F01i0sVN3gLbZ)UUv0E04wWLw90P# zNx>W7xl^R%4ff}cSBB=0^KWpB_->dGNrf0J7p`l4Tgw44W#397c#9>i=SGZ}qrDn2 za!%xkIX9fg--r@jjQKej&@QN&Y zi&No9K;>I55izp{vSeDF_d8IwExz#U=_Ki?_v+cfr{`a!?|a7HJwh#ER2-sV|{`>|!oMlI{ zrpvj9a&qqjV66+Wt^+NTO*Yj5G`YIY_26T{aVfb0%fM!yV1RJ)YI4AUNAbOs!Oq0n z2zq!N8D_+hIP?WsYJ_A~n_6<%h`ZVi0W%e7C22S@LA6Ud5G+JByWf?jUw|EzUm!9Q z-fBG=kRVSWciIqfZoWdi=oY78RTDJI zkREJIiD)s;4USiL#=KNCnG|E57r$ra^%7Ezc_Qzg_gFCDGgmH_maVY>pn;}IA)*_Ie zbzNu_at8wR%GjTYg3sFscE@`@FA@|}pcQW_xIr7Ncz&)MxfwvxB;2tuWN;?=$%+?? ziq=^3I>J$*PSybLmn7Yq*9sB|h1T%ViUZke%{!HEPxA(kg`a`_@b~LrCwOMdASjSJ z9o!NW9Yyn0Gb|-L{j+NZ+=tUVwr)fl%ayy2u-vnK*yoRZRP0!me=9mT<?K{Rhw zEnHpyb6InV=B+9E&+phiYXHL4ze1S}B^L_Jwz_-s95jDY8O@(a)BG>JY5tTOP&PnO zK#7C;{F!j$LGve9L74}o6?Aw3XMj|V`x)pY+8-0Lj&>^ts#>EEB5 z>$!KUq5Y!&{67ElhX3_GyQy;~T-m}-+I0VT413?aS`J_#{; z{pZEQ@-q0dhTJ__WXJQ%=fR1W3AEMG-=OS;k`E;p>KG_{;J!axA492Vs$=ijcTMFO z?{l~~*suppTYWeVC5yItC#S9c`m|G4A4;Hp{il-u&x+4qa`*q}@UQou4felym;X0t z{ucxM-~0b_0e^c2bpHzje{1mn_(~{vWm||9^z?e**Y_7?2z9f8PFox&Qy1 z;Q#jgUjb(K|G&Qc|KT0C|Nk2R{<-4+%^1+U{#LtB|H(D_y- zkaDIqP-a5;0!mLPu~1xSD`O*+Cs3|K`TzL(6M!hI?|&SBX70ldGVB90z{3v103#}* zqT;?Qxa267D2Qg3xV+0s1(ynOLo2Vg*l4DusJIjbE{MCC;a28~3!9pvAj=HQ{9gB& z0kzNf|F3S(@H}@t_ndRjJ@=e*e?!`iv>JuMH4XESQjrEBbwZL0R(fzzJ$>c548Orm zS^ig(ejMIw*gMRB+XuZHehc`3%*~I@@0ailkHx%TeQ1VYU33NSGx7Hq^rjn8SS1Mj zAa~m0Mj~Bi34EBNz=xi|6H9eS4q{>R_`7qV)}1WoeP+)RtY-%c*6$8Sk_*76m)&tS( ziB*S05ldwFKa`mHsk9`3_*fq*5D>PWmIshA6Lg3lJ{Zx`ZCOxx#1B8@Z#s~TZK@2B z)DibPEfJ}f<5pPvn+lh+Nb3HkZ)FHzo-WuNLmcs={k`%aaM%e8(ji?(bwNbokt8@wL#?)WHLc8KszZeN433rsk)_rd0)8h_Z7_+E zWYe5rl3_ms4euR{DEq0jDVT%}m?1dWB9~1qUTN@2iKour^vwx$4ch`o&MuKfsxRXR zl0dFL7Rcrj7HeN{aKI)~l_`*I8k!zL!kjR~Pj7LF&aDF3DWe-hh)P+J(!s!@WBaq0z5Ny_;y8b@W?|d z2ii;xBXVg`I$an>diZL~IlEx)8!>ME3BkcD6;}u(BFS*G07tKck?o$dWdc7YU2w?6 zyG(qWorF|C^TJ73N1foH!0UIA6go~4pUp|bShfO$zOUvu7Ds=MfIgln!Hfv}yC-OM zIO!dN8s=mp6(H3L4s$g~sRI8I-p?%)9Oj|e+&r2TL1s$5%4tai@sgy{YY~KcmkSQ_ zWk^6HQ!8@nFrcvlU-Bc(QITN*NjNe_;b4Iy65eDqnM?+xr$|RlK(5S8TCc)>CX>{qQi z-b5LJ%GAU^xg0kqXpm&MD4`{m6(!R6PI-9R90kh0k0S3Q&-*2~4M9M@B!SHR0(lYz zhZy9}w!%}hB%9+vmrwCKlV+n@7afR$Whq0odci>>&;m8_?4E;*4?ZZ6Atu`<6bABg z_&XKfQ#o(;TT>tqnLA+NjNj$NgOLHJz{Lv%8={DhPiIWYo^VWyyan}wA`;LOo#4

{U_Y|lE|Wdd68FFO&6Y0E1#}^KBvQ;HQ3@4h{TRP-?2<&O$S8YBHj^SFdwF` zzQJS(T1x%lCbmds$%nH%bItn9VaUFPIg#fL)fb@k7LhDo+C;oByJiObC{-b}$p4MAM#eO4p3?N5Ssz?oU6QW~feM9u}WZ z(@sZ9(|2owkkS@13#%83sux1k*F-qBeR;>uL{{KS)sJcdo|xCIeG{FpFW;0To0p*c zsGepWwlLW|gI?c)nm5nw{+j&EcCT`C!E!&iE;#etkIv&)9f88zBwJIHb<@>24*f83 z6V*Lco7`lq;cA&fes9%}p7yNKXsEQi!+u(|2Ja71^J`Wxhx;CDdt*&1-XEyuS6kAK zpIYymYhJ+vV5C|mWEtrADg>M}M7RgaM=SO#kwea&pV7owI; zVd<^6dTVC51>n)Yv)SN4d$g03s_I$7nn|Ln(~@e+wRJ`QdM0SR=+Q*ik4Ir`c@wiS6_h(cZh26iGTL&#IKTI zaOun4Hoe>}{+@c%6%y}|SHf;%yjS%eYwvZ!>T=PZUP;vy-|BR6b+JquDfbh|2iwU8 zaRpUZ;mr4>U`Tb+Ki}rc-}B{v$Fb<;7veZXu=)ow-l2M;^;Og0!VhE?r#c#3?-CxT zDhfjG5*=FQzrKq(=eL)4Bqp2h;wrKcR=yj7ky2HG;C2tgBJNtA-}56R-Xpn#W{gd1 zSW1U4E`Ihrd@+L#Uqt+e8J;~_TeL0myV8fYr8UI*R_;_t10{QY0mu8qm$PpIgx$vw z^o_9mKKXb?$$}^S^Aht>xuiJ|-3Ky%Nf1KPO9O+JV&s~jDhbP@>3L3JoTG>1%f+6R zsS(nkNa>&+f0wYqSS`@Vb5w}YR};!3;wly7|462B_Dq6Lf5Zss4G{Db=F@)$9Y2wF zPVOLB@-sSh--FXXlX~f%F_JwCx*7;`xbM0nbYaEib@ji(cA^tN`YV2h%wI^5q(=W1 z+YzHe?;0wHF(+JfJME89?GGxA5br^c#xEpbelzvaSjr&16c(wc9Xj2|7>qJAvo_hzVwIwp)K9yZC>Ng_c|5WPx#F&Ah+O%)kPO|&Qa%EwZv0@?Q{Kh~d)&52z9qQJ+ zzAEDW6=CHF`1Ch2#~#HNidt30DNsB>NAxL}_<;DhHNH3Hg(*#`+PxmKACN)fef`oP zWchTRSvp9{L0yZ^bFn;L0#_f9VIsYxLKiNLi1c%lO9Mmw1ZLMbC%SBQe?=__ekZ3n zm0|>qBWLU?X(aIOieI7V53)w{&2zp)_WsJrclX%NCOyNa8ujL{9QYMxgOzJHe&sBv zFba3CvHUz!z2PfoQAMBcZk3s7u~eN)x9{n%@J=fA=sXFH? z2j8I;e_8~tMxFVUGr!`2V7K(SL{fj{Alxl6InO|$IZOG$w$ z*1-FJl9_IYKM4I6ArkGRN)9?KcO8J>zsP3@(AM)8M(`W~h*ur3>>(PI zFF@WyG$>w%+J~e$V12ls8!ksvkQ+`i8nf%BhWfeDR?hxGkFR5#wV;9zuXd40j|v3> zDQ5iH z@oUPj!^uZvtkbt8A@A4k)7FF}Om{@6J0hpb)aJ5G2z`u($FdbL`!QK)--4O~{mgDS z`xw0wci@M|XzpJ=2znk9>4K~Mh{)rH4e*%nYOdE+TEBV{+R1LZ;*=0}g;45QHq5&$ zyEw|HEY+)Qa8Fq_mtEu#FDjcIAax3weSt;F<)4>6_2=OShIRFdH36{t2^l!HETLT5 zFQpiphFLn-`tj4{QF5G%UTl01UmWWBwV`Yd!b@O;X^}h1m|Z!f@sYK+!{1aY|DGddMptJJu+~;dE(ux(C&cRUV~z@M{m5>$YQF=!i-54|be* zwQ9#KnD&f_?0jr-?0uyPu=W`l<5oI6G)j)MWy7BM%XM+-9Jut1ct(_s|L;&sr~dy# zEu8=ZdU2>v{xj6Vzy34S!Uz8uYT?iS8EWC(b8daOmZ;h8ypkg@O-};sP87&L9_Url z4APVVBInXNgTpRl0YnnnKMCsf7|?PbKGBmLyW5{$7nY=yO5xrZ%9BbJh)b42vH=5T z;+MgG0}166M#K9CBIA_If=33-J}l(xeQ3Pgg%}K6Zkhc;4;W`ew4*Dq$%q24AHYb4 zk91B$#tmp8HCgCnA*~f~=B| zP-(VdkV-1$%+@8$+~ZZe9lq@+!jyuv5_hcOAuQgs-`%%(LwSg#c!OR)bil8;5S`k> zT&~HC81=&73eD6Mx);#3SQxZ;xEok1SygWL9KGMB}2NdrCpP9){@^eqo&$SDww>;lA zL=VFWr2`!3vdtLMp4U`Q-_8O6(yU43q77koX|eN?X*c@s8^@7YHZaQ zd_#sCH(W}*OKv=s+9Ihl)q)~5h&j}6xN2+$P*t1~HS8ZiC2^+BhW-Im5F!)=5^AJN zv47YyJ4K>x&@x+};`d-Jp&}5K|1hC=oDv1RPN->$nMo$DJNCIu-QB{*ze1fpgT-N@ zIh4&M%V{u=>89I>36ts}jG`hqC2UwsQ33>8T2E2)f*zQ-4uNx7F-BYCidZzv~E0v7zJ~Wjy5AP!sVh-?pLrQ8M1Oq4?x0 zaq$5#+E4;cQ4S*OQA*C7@i5tz8pKI*2aPQ?!nJ7lw_2kf(_?V!NSK`pAK6lK(L>>D zM`_%r%KuRzYDO+}*imAxI$2*9uCp~V*_lq2(sJOw*dPPAWjua|85ux>7;V25Br{+QU_ zopYegfs!bMcD_5Oh5Ok?NJpa!T;b<0*g2(d0!O-+Gg>X1FhI|vv9uZU<@z zW>JPYQXy_zBhf(aMuOcayKg*2MR}0yNQI+*yT=g;mOltCIa2F5`Q8xYM2+C&+d{Sz z%5yVXRUW;xO1ce)-{T3sxXct+!QZ*SjcIeguBC17iEbBw(x{Tyz~DpjG}6DfqTwKlJj*g6py_Pyj`dWvR<@fJxq3? z=3^wF)`gN`>f?tl)GKy7rfrFmNp|c3S67N>UuVf#*r|pHS4za$F%qV_QvRGB(XiH) zl5uv)>?y=80b$cUs1!X3`=hbtw-dLXuLRNMqW&(K#a z)<+7TUDFU|)vuqU*16ms>bq;QYovp|XCICg13XFwWBgMIVmW_8iwg{p{63L(E};w+ z?JV~x{0Yk4s4JXrjzFtBB>}ZNWrOLYx$d}v%IRBynDBj#zS;mr`f4rsaj5{&PKlcr zon50ue5VO?h%CYkYMow>6&9*tDVI7Uyxsgk!^#PNTILt^x*ffiq3=*bmOqCr-?sh`4<|h+srL=*<#^v6Z-y$_3Z*ly=0X?v*@IHrcUpfO z1QJh*@BXIsGSp{B{cca+f}V2|J*hQpOvr!T3)e_HeCI{^v74dai}J@)9nCIJ3bufp zM=9(-u{>Ld=1U%x&Do+p_c@Px%J$h2WeTUI6DF)*U&c5R>4bGADW;GEKk=!zyiMqw z!g3JtzgcbCSJwB*#l^r5ZtM5!!(v+uThium6o1#zGi zQvulOs+hV!T7?BO&K3Gl_H4UtDPhtZq5=n~l~B_;n^(b466EO3OTp8Z^5blt4?}!W zOm3b6>AqA0XR{wTNvV3|!Zs;&o!TBR%x{HlepDp2eXJmVKfK2LH-?{I4!`+Pv9_8} z=?%g5Advf0b2yuJz*c`Mn6qg!wD?m2e#oz=ofsVQrIl#)>5iMe>;q1yx_A3Yw`r`A z(*Eu3@W7wiX#dDUux*Ku5kN)R|75+K4J`rGAg@i~|4CHZB!h@*}fY@1+#O&HW;Ph zau^ki0wEEW1XDw?02RH zzrN5u(b(X(adpD2KSQ~Un(WP4s>t#=6`C;SmVR3v{RPCyG5F;g zER$2OIsamrZ_OE64S|Q4$?D*<9dl$NZ@Q-FVA&2LfT3B0C)!Zh^mks?hWvoQSh;jq zq;xz=a7fD{WpjMdmSMV8gf_#C2rign5oA3nuA$ zHO^=~byHUP_#a|}TPQO6YcL{|@^Q>95v4R~N(CvexkE}Q<>wQukbe2^oP>n_q5LiR zUR&=%V<;6hM1k>F=vSrXkqJd9owbnAA0(f33iTNdJGm#`@G4u%4qh2wES4W)%Q0T3 z@_KjeIB*D~{FI)F9HBz&W^_PcDjJtBHwWvhXwEs6diHD1y7iNlUD%7OIq&gx{+3z3 zTTeqm7*g>RDzV{BY@)C+~z`|J8^gN-->hy7O*7&)KiP zZ=g1jJsp;YQzEYMq>pBKDbFbVQu+$^FW7nv%EBpO>=A`S{_%asKE%&kQN>Az8ztVx zX+|kl#Oz8iOn+i7OTrX!ogQ;6=vyYPonJ2pYijnbgdf7G0LoY<-dYN_5!4`dB#ell zd;%C7U-~xT^QoxX6wge_;VjGF<16DKC4!0^X38$|Nh^r@JReshJ(&X-#rMTznliA5 zWRqX9D5W~M#9N_NrfBt|ybj@3SNJ4?3K;O|Zf|%RL5=V^t>D_?(!_tXWc`4%=5WH#2aG&iy7#Jr= zJ$O^N`4_>K35v!m@~VQC<1}dYzG5gotf*98I~H0w{My;D$_Xjg+Dg0=Os^&zn^0C< zI6y@^+3~lADIC7*+ZyVY1lyx=Z^2)5(UdQWnd{LgS;xS$XlkgWjn%JYZ4lax<2*5c zo^qEhRnnnpw&spcDvewEVdg-5;tH%CNbv_n&PEF~lI4^+a=yeAzk{(s7`Oax5mb4v z`Rm`LjWjlryoEA9Zp3|!IBzJNABd`23;Z+?PXnKW?I6n6ww59j`!+v;@IjQ1?M&Y- zmwdKdf?0!5uN@1TL6nzslW2=h9_7Z{{0e{baA+8WvT-VO528Z&Yr0sp%ZRJPvKf-i zXJt|NnqqO@6c{*|k~vKZjN*Pe)oXLJ?`AG6A50C#dIpCEQ+)5}&?qn2N?Ttr;Jl;+5QQ$HFRcFCnRo*-(9?Tq@pV5^b4aXrYs;)kLVWj#LF zY|Q)4dU=o`!EGt6L=B_2+|4u?k3g3&V=jgTvtm$-{9rh0>e!!(Gh3(1-tfWZZ<+2> zIB2!Y&Vd<2DW$8E)n-NbnFAmygb5}Ibz*u+^I9tQrl)@agqqVN$O~3!Y(B<00*!Tq& z?`V+)ix=wwOpK-C5pia3ER{r-@iv7(e=G$adhy1eWlE=@XkKWPz;olHzKxgQ=rAhP z=R4nxKShj|mnvmSTjR$2ZugLz!#%$a<3$@$)ldw_MRF4ohf{lFOBCFNwEYupVqL0r zJ3|*|>A8z6X0UYy3NCtw89NsKrcrPg(=E{mhF5v#qDG*KLfXAHj)IJll+fXiVhh0X zsEJTHk_vE&wpfI4%Pjf{E{>#zIK7|RSa|uh&_GJGIT1LoP-iix?c6I=Bxl1D`1KWP zgy%)t^3;g^>)Ym9EI(Oq!O&6E608yjqp02NO1L)}kE;&BkQYY{M0H6QN5v=|Q#)z` z@!;FLJ23@`k6r*5bwOx4`BiG_h-xXh>{t6f#IB5hD`(E z;usVYVerEk%G(((pAAi+=!7@!CO;T37P)sXO|E6s#z(x|b2Pnz;NDm&+oMFBoAWo( za<}#6&Vm)=kZ2jcx!Es>mYel5(Q?)BU>p)H8KmQpXu_9?mdSgWXqg@_6D`yAWuj#| zoqIH%CfZ1^^;nf`A|Zvr*UbRyXjN~RoaF;>-C_HGa_oIn7506blrl8d0Lh2MMN?D(J z^cX|C!_R5wL}=Q*XQkaBns#d~w9EPJIql*Pi*tU0AEro=VWH~= z72!fUZ}g5|gcz-fN>OerbWfvHSW02~bV`FoTRxdijTA3aBvm4aSIQ~xguxR<*+2W_ zc!r!l>7P{0&;AC2XHe@Lv%m4lzUFkzzCU*)G|iww0>2by|5|bqai~7Lkuca>l>HO# zM5PxwZCGA0G?=f54;Ey<0S{+TvG(??vlakhy&Dd@yZmME^p|^gAi;FkTy^+$ zjVOB;ES-s4(oxtx6W4(n-kOOg#wz%FCZ%@&(qi7vDYYQp4y%QQ@zl5h7p$gR)l3;J z9cc-zXk%vYI&Dc^Gw&$_Z?X`DtDQ8T7S?Oxzm2Ca)Xc^7ZZ1dqHU5_tzWK}}lW1H@ z8??F8jmLx2EIdW;gXme*n~K%ekMO7cX(gU?GgLqEHMWVYNhKciH5!cYdH{IMru;srUr` znoY%ydPjkkLYZ;U{he2c8HtAlNAc>MAuL7OkCuCV8)fkTtUev&HA%Ei>$|SmXWf1N zx&}y_gWB)9TTnBHnjrbeYu&rTbt^pAB?ZlH6ysmK2P)=MUYG#ZJRdc!WpHgi^5s$Jo=*+)@Ix~smP^Qbfa=3K z<-ujftZEp&fEp5U9MfgIvowz9>E!JvS%>f#`)ZfrZGY)B+?Wj)tXolr7Mt~EeFiNH zs3bJM+v7B0xyT_ZG`g+;jfxr;G@T}{g}{Aeg3ToS?k6V5u*JVc{wev3%0mQM+u?f^ zH3h4R%NOFhpAHl0KNBEzA)1lxpk^U8oE;0-7gDPx^%=tAti<-R5PMa(A#AAimXGyT z*WXKGy!F=afu2o)o@WC+zt}C~XZAtCB1#dp|MCHOAZ`vUQRauj%rjjMFCVQfjys?1 z*kUC=^C~xcs3h|}_#|J*>e}!@5g&Ohp3+CgDEBIFZLZ5^2D= z*2n8E!2ZS57IytP{;L#Wd$4UCCw}aS6yLLbJusFzeL^kH;NV%!}8BiwE)7ad0&r=`>!$K#JY)SXOi zm{_KA=c{!Y;>=03f`!F9*{Bh)&Ofi#T4zY^e;X}gFLbOSxna?ouo$e?+JXo3FsZFV zI)|^mU{Yt|iv?=^Nqam(EY$UG*B~&!aBaVOJ(!o`WFcmJA|-WSX(R1*2nuGenqFzZ zitT8!iO1WD<}yjS&u+1q>lhG8^M-n~)BEm6bLCmIFM+TVCL{)A#rCO3a8JPgL@LsC zpwri$eK8z)92q96o`fCiAvTE` zWAj^4h#_kNY)hh+;$i1r66NP-(!{w;Vy{5Xkz{mYmP4WJiAjM+51Ec$3%*(55Ry#! zc)gL_A6Df53{Qkp&{|s@QY7?U`x7ioriP9Vw6LJz8Xag9uQNHIRRDLygt*rbD81M} zwf=CZbj}Oc&;?7#YeL*fto4p!xp(a*xRs2@lXkFAp*~@!!B;6%v#WFeT4zr+TdE}E z?DcD%pfr^lYxm?@JDwdf3*c5N6=}O+!z^0ShKtR%Jg*Jv1XFct$M?J4o~@xFqR@<* zse&PCl!i0N3~!_%yMGG*OQRzFE(nO?xHoTEfe3prWL+kj<(+$pkGb_+OVotP;&dfQaf&!xcRIZ z23J>5!`#KpjF=iNE_b8)9Jr=aWrG&uN?=jO<67ZrL+|Q7M9E3S&>J`ZZxHGwnCo%V z)hW&WXj(AOD>!M`Gp?6{)7V}KpQTe?j;sHW``KcKifHv8@GzYk?7Ww^`hK{QFI@e* zX!SjaT1mZ%+I_`JG!|ZilPjs2+|_zf90Eicj&fK!WQX3>Pr-E+s*@EkeibDroubv> zL)I$l0nYcU8B`XB^(WlOpagv>{D2N>D)%rjS&H#GGXuY&R+?_u;d)C}C;0po?oedr zz?8Kp+9P4bS}H;%HFDX38<7t!-7M6h_Y7OlQL03aG;u0?EZbV-V-EB7;pXdlt~0J% zm2%OM-|-gJA0t2@bL!olcwyTg`EDhKqleFfzt&Qj(ltLG$}(l_a2tmk+~IY*!^1yc zUdK1{Y$Gdad6BUIG-`CN%!2)Dv_S2G&(tVAir}G|@{q((9Jhe|!>f7RiS!GM(eKUg3-OZ%JIb3F!LwC#5^duI`Ln&Id7JRd*CRF9F zW>c#@I&Qd@`bIi%x(#&b7z$j^6d0F-ZkBP7or7x5VQ9;te4QicQKJBDUgEJT9KOy$ zl~4+X94gvB>Rv>&CIZD_k7I^gOmH;uT=`x9%I|n;#BR4qv)8Zu8fLDi26I;a0Xx@I zZ(@y74qV3Ms)` zITSwIK*>GBBOh(u^6b|q=3kTP>ITTs8CZsABWi?65WNvy4XSgmZluPtN3Q(AfN>t7 z^g%X|ifCMmT>BzDY}`>MP6lgjhdP8B(EBIlpi4cnw;=3;VOZ`tHxBM>q9!{={Udc>$(*58cO3m>pzW) zrTUe3pfaDTUJUf0G!VBAJ62=I!G64;s9k%I-ibaTXD zLE(s=73)xMj#9cDbwit7PkJA$-%d>;0o>(J;PQ5A8kRzEEueVbE&tybmfwXD1sGb8 z2Em2M3Ws5SA+^in}kL)qvrA7S$=$Iiej)h z_192;54zG;FhY<@QlEmRjEcenm#508NdvGlIy@?&u!2@OmFH;;;|>bzB$vKJ@#1RS zxysEal|X$t^>aXyAXVyE>KV$5DjLyO#CBrYrCk>36+92E64ONLWVNjg#6_D|5;SXLX3IJkhU6TS5ZGiT*pz|bPX9( ziatN&ws^W;P;ags{uk}`Uollk-4f(q70N#z%S*liORG@}%Z6RmRL+1y&qJeLneCGd zz^|c3vlqgm8fqAte`{+{1C+t78tPpXwFhgdY`di2Jd?eJNxuQVjv6#DNiQF52^SkQ zKVF>7{eQybQYe11bGcM5wGA9C?@x9DO&xAMw*N=hcfd7uwGSsD_auY>A%u{f5LOlt zKtT`?P{9E*lp&xX;H(3+j@l}SqYj)^A8{g%x}~-jTNm!pT32oBEZSCE+gb!gAV9w7 zCTM;C@B8udXYM%n+;h))&a(%=I?A6_*il=zjTX&jb;e=ngfgh5n%4fS6qg12$0CTt8Qic%>RqD;e>{Vol?SCeUr9l08Q}l8%@! z95LrVv@aumhKh~UXxB-dBTC+|gRe$R2i7L)I%@WBZ9=~80$?VL-7K%)VE<;EJ16*i zGbJZmkY0OT1(z+9gnRdODt&ey0=H07Ucplwk$9TMVH~7wq2yG-U1`B3n7oD3xfeW; z7ToJBc&?6R_o@mIPH!u?4g0rH2K_}{`DTmo1KcHPHMD$9AvSd?W2g)61~&F`S)N$@ zD_xA0$Krz(Ux;=9$yOAI70_!d<>7bi$5iQvevWrovVtuLC5CF3R+LwW@P!=*r!#C{kh7J$FbkXdjThW4 z$l0(9ht6;~3XxURW&Y3fOt~OER}`KD*KJhy?k;#m(;1M;ZYz)r6sUQy-WgKjfQUqw z&ci2NSRq=0UN}p?(oCN*Z-=B}7D1T2jS3yfC{Mgq)mD%$K!rq2&X%W&f>dRJQB{z# zA{MLJ;af3^e#@5fM7s;lhA4UGR^cd z-Sl#BXMUpqmRD1f9>z6{#j)jy0Z)1<3tU>tkJD3Qw&Y(z>v@5>QR{+kq!UY8pTxXb zY-#?_w)eyRYNYvzV68^B?m4KpQwsKZY5v#HYde+687|3R)0uw&Hf^U2Zrc$$nk>eN zzhf#vdKRVpAK4*gJ100!KhxjRD=_Zqwcu>t8E+|$9teh0eXA=^9MGz z{n0K>X|_wh-f-o77~3I!-_VcQ!`x(vnplUwlKef={3Q4Mk8uZihm5xCFI)3JwRs|} zh?3;*aO2ViDsfA z5NGxH6}z5wXq3UOhn+>66oy8~^Zi#OqS`jUw=&--$@ixhBYzYO-bwlL!fbn`mo?uL z%6Fo+wTe+&a5pyBvJ|^GtKFTD5Uq1(@RqgnJT!HzekBvGuo#X@)cGDzxQmMI`!j7Va?rHV zL?rvZzi6dVIL#Ht2wF?>9^C0|` z>ZzV;6wYe=g3_2!9JR5>XcSuCCLDg*rn#6;yN9J@&!46kehe$aoPqyafEcnDI25(@ z#4Wo1ck%FA+d~}o$olN>Z?%`Z|6-;3JrYoAi$m={GY2rT&b zR_Wn8p{vMa>%ITHK02VVG+@-cq89mh!2rE^$m`)Fz-u?9bIet#m@)N|f(A(6O%*fa zpmsOq@0w~*MB9lg=5xzVhQD`HgI#+VO*Zwg&Ng-3AY~7wh zZ;#<7c!r(xmG;h2Je+VHgnOxN?A?-K&!KiNa(gJ}@1=STIcXFwZ5tnDTbMTS0?l<+ zPD6IqSGKEpT~`;PX^X!4d4O;!MpI#%w3?2aQrmiWjFNhpZFlz@3i!rCv0~UVn6-~e z&s~q-5cI-MgNIzat{7GmP{`;+B@i8dZ!PHZRUcm6A^aG<)DiuNeh)0*R1|dF(Bpfv z&DLSNR2swxR&f|6OGk-u*fyJq)jDh&`0qzidKHY@Pc2ItU=%JeD48e{+Mz2e!6;lr zn_g&_^|t*3P@PT>K9;_;iA6h4C)-VESy4veLfex=x}FTL?R|iXVxqFD>>!fNA#ms* zjx z7Oi!ZebKTr^~M59nOCr6yk{Q2C66Zv#*uaGWfJDYC)ZVZc`gT8TgEH%y!8cqL!nrn z#|#=FwTd%s46=9e5aZ$Fx^g)287_kVy2F%6EtBVIR}`2EI0oU6mOL-C(DgIxMUwSG z!!~_Oo(e(_Q(;(?Xxw4yqu$>k-J?wj_4GE#_{J#AFeqkOj!&_pzKn|o#q76RC*v&U z8|y;G$y)vA*dI~+PN8pX_nOJ7g}IlXm4U)8X)AUi^Z3~apND$RY* zaSy9e3bHFJ$MR< zM=Adv;|=3&EPOdlC5DU*G)FB7l;quM)!J1wt-IWqU$dsxbe@bLtX~pVN^&rj?E*#K zBiMBmq5B88P5(Fp`zvZO)@51#6(x7w#v2!FS;XWu&@m!;esJ_FDn>f=Z_&`_zJ+4_ z>f=7~3z|kqF?D)$LF>?G;QBS?*LP^AAx@8*9f>r@nm>G{BFE!@?etu(G)J(!0G-s; zIj%Zn&e6yD5w5F`NN3IA!>q5-iEd~!{O~n3GWjbDq9nUXiD};ggTJukP3gMiWCxYO zHJ0&%x-PlcH|F4dmho?9ugg3!cvtPBWB8pc%^f&;oC=hmqB#Ycg<_O%tuh7&;vr$~ zeR5rr`z2%vwytQ~rS;xSPdQhbuC7GKZ_1A>IQz;cP}3Q>?)7f>!$WVe9g z6zZ^UVx}RgR$PI6m=O7X)X!tJN_@lQnq0n%%5~SgvQq?EJNtQJp zo}5MLWCOUJqcWw5YE=8zV{Pj|OzBr=n zHxC(lItwDYP+`>MaYyF&_=#vu%DnZ?r=m4!ZOofb zUHRaxqt41UVdfRuQAdq_xEK^8_NSTGciAW9+&6wXh*t%&%q^y1e|hEtIDU~zLxZQw zCEP1npudFr-f9?riIQjbX&|)8FScPqe_QDkFRe5)EkF||$?Us$i}PK__PuTlI(*(D zrqDMx-Hhg@Kpo@j0$FB1WCp8kLLu{3^Ga?-Y)fT4W>kzdi?ip$wM&#X@D@7a4l=iQ zcfyH8_M$tlUCS`q)cx7hY+RaijOKcj${Tkd}5x9|Pqd2Ng6itxwEmeiSvkl);fu%G~TjC!e6x7vW z;ZJOmTaqgsvq4>CiB@EtU8b>kacyju<_6VKg49D&j0e*#}Te4Qw?z&1< zGFe0JL)k5|mpG$r{fDq!1nO44)o z0)%m-MsyNVTj19xUL8Zm(_miGIfRyn-}s{;n6Lif9VP4X_u=JrYKybzkD~S|xP_OG z6Ap=ltv3+de}hvuD6w!_QM>tFaF@M+r#Gkw?%+F$!H<-KpMmZsV(8m2?>Rr>u8{mw*tOmgvgTJxtSjHdF^A?7gq4#0#Efk3sz}#Dur$@Ch zX*|s!psl|lJ9&%W`%!I!KZXOh&SI~PeVekf^M#*nS*QqX0UwnfFOt;M*(FUy(&)T1$llnLN}Z z_@owDx6!LB&sbBNaGRRMbUtabZEp}P=;k@32+sUKC9}^dGSb2QM+`AoukRBp9nuR1 z|A>b7ZLs-AYM*F2jwXZcTp_X!IpQ{pJ=NSY1W!#WLhGtC7Q5l`} zmoA`|ouq+ncaT`R!NWV0M9M3&u0YOB$j59pXamga#<01(B(cHuE(W#@>;(V2=-TuO zlJ25f`YC3dKt=Bla0M^2vsGz_pz$u1;@uB3>mw7CK!;A^cc*_t?-h@wqTE|gRcUJ$ zyDJ7qLfc)+1S{|1vYm#<_o&pQ4E`9m1B(L6BR}8LDP|g&9dS|z58 z5D#HDxN;Z@_LP#vZa-b0P)VaNxC1}I50bP*Rr>Y{4bshZKdJ{?V9tG1xP`%~`-os% z;qHB^yVz^X!}j!{0yBz2Z9ll;%IM6U>FwbA06lM9q5lIaTu24};L@HRjcqW3_XpR` z^hdDz0R}InzJxCyP}_1&=|YNM<)QmJ%gfB|6F7b7y&~(lG07Zh+WU_ES(P=Ht}gLk zDxm8C+ltc(VX1cHsfm{HUG`@o?X`>x?e&@_KXqvO!|g(AH#{8SvxiiW`#Spix(EJ0 zxS4(sc%(hHrZ0x3hscRkfyd8O7<-B=bv2~?jH2WzDE%3gvyLaafsaObY#vp+_b-yY-5iCC=Pqq~d^;8+h^F9`yO#cTytEa@?6L5JL zZ-l0|PCBnpQ=-LLhd7s zE=s)vHy+{SuY|uIQ49Fj^i!_S@2+2+Cr+IUvmYaueg+Oc#yFdlAK}JhjESleGbZ;H zs8cI|`3rSj;J+jivwm)fEMPE~L@H9Y!J}U&wS@X}nPzj<2LB@KSsWKzp6Vh?_iRn~ z1j(R44u zgGHl7TXHm7W*Ii`G)&5maEmOEa0`6@E0ylJxUS0JI` zdqQP6i#lmPTqA-^cIpW@^#rx7HSp6D>Pz(BS@9I(b`}&@Wi577q!{7yQ_7z`S()Mm zFP~Cic|Ep*pmECHa8E7Lv)Ig z?UV(YR7SW)GN>OM{hd_e&zOW$-I<}NT%MD%)@$lmXuBSBE)l3>;9`$-qd6C%G*liO+NBJO65&H^tM#q zAURzsFQt?&m6x*EUMg<_R)5eG*1){?*z#_J+Ejze{-b2xpzi;pWM0a2ESZ+ z9mIqw&nWGaf=H^ws9{U=p~1{MBasI*-RL4Q%6 zro$Tqi_JyWX}EOwXNjVf3{dD zRdS3?&ic@BJ)rPKi3xWWwWnl@r zAn>6}S4fikwv@VI?x4ZwX{SN^)rV$RtW9il?z1MVpqNeyq)4d*pXZc6;bVcbq#q&eIV!+)Q1Tp=F6Hp?b2L4C00*BVQ*j!8 zd`@Y3>t%z&C4+{%PId%`f2h9k$v>29P!Ms@@@X!d*PN1q>ol{*)Zo0SSS7|%> zDMf&yA~Gs32Nl;|{)ZAUC7-C0A9#DQgI-8=UX;a`jhMSfO>6Skn9zcn#@q~}U!cqE zY^5TU_gY}$L}o{J=kOqUL$Fym_k0`Uh4# zrSrKE>A-a$Y({x_6%1>pOvp1WX{I71v)aO#$gJCPzb^^S9zTnIRFOOt?lq%1vL4!- zslM!uqNI4}`}untfm16U}_6$%p71> z3vyXW?Qp^N`wE`4P`#a#>RSiQ5oDm}o+#-tgta2WXAf=zp1)kFoXF5jHG3rOQV)pgNZJHF+Nd&Isju3o zVNyC4qF;&KnXygGHq_%D*r<>sPz;nkb~PeE&|E--%361?=ghl>Pr+j9H#rksOKpuPHZs z4lI8et1o24nrm8RN&|y(yDk|xXUbBQPe6lDQcLqd436Yn7LWwq!UA3agK;^7b_QlJ zB>jE^S1Tn;n5-U{-x)&3Cyg<;4xES#Acm0iTP}!01lP&S!dWoaG!7gkW4Okzlnflr z-HlZvv1TOw*FJEhElxMPKgJ7LsW?{ORyb@$+q)3jtdzl=Q=F0zSk*J2Dzf1pHwOJJ z?E{06NiHq1;*!!~qS^hIy#XCr|Ho^GkT7BYAB7ady`-ap=2lB;vir|myNO6el;thl z6c5^GDsV17&s}?&7y^gBdt*XSfwQI1$>%O3yuRjW%R7$@*5e~fQ#t`NGz;={Q`}n%_<;&^7+y+8jxiVyp^!}y z^e!ucgNik%F|rnWy@BjS!Nqf@@HVn6qr_d8ic_D!4L0#$=D|}o3F*IiNwBSxFIiP> z#WQi?(L6x?VVexoszt@$Yztg9Jz&+egAZyRbiDnHK)mzk)*!Ff^!#;gA{a-JZ!xnz zUC&6-|8wX?NS1I-fh*1~?m}NP&)@8%=wAuD3GroKhVKYj<1@;WRyHPl2*4qE$UnX0kT9%WZR8RS)>cj85-l?jCUJ>g z=!0wo0&3z1Mb<;un@8eW*vlp184jXErZ!}#Puv{u;5lq9-$9GgqD@UBOz_fb*SjZv z$SO~B(DE?Kz&;RRfAa5f;?%dt7lZ8gl?ka3=17cK>b=mBgnFjEO5k9*UbC5Y$P8q3 zs~;2MCrKOx`yI(R*Nc{TfrgPZzpA*Vud?4c@a2(v=?Se`?fmStRz?+@#g$q=CK&EV zW1~8)&5z2x-$HFj8IpuXR=z_SJF4D6OZ#-$|Bynw?pJEtB5ex1guW#0eJdc{i9~tP z2}e>(a@mC*{oWf@y-1&~5+=L~Ojj4Lo@&z0RVIYNAt$0@B|L*`P9z+iRXBXo6D{|> z`6L*pa~hunG4-&M{!zkhKJmkH-|c)7~J?6}<0EjI6|Gu+8@SGkoVvisY9O&*Q(q!ae~bW{CR6G$qph%dzIhgaMG` zLJX_~3(R!E6|I3v7hKU9aNLFT&}_hpg}9=9ALH05tQ+Mw_YJ(!Ss@cY0g)^5LOn*9 zE6L`Mvdu_#-(#x8sj$J7Xjy&kz)4rqGvbOiVI8KZe6#3@*;?&!7AwVm&U@J>M?@

A+Gk)+pa!yEpCac%PNlXGB`M7h^4YwMxr-J)1y}M1AP(kee(^2BHCN+p3`Lvy@O>r*zFd2+e}b&P zXr%LPKzp1*FK|6eF?;H0by8*WE2#~6f6jpuM+=J($nrPs6=TY^0a5Jc{A|wDger5N zt9N?Jpd1+G!%LaNaz)XmqU~&~e1xuPDui&0Fv#uLZ!y4g-1`c?&FdEhsgM{ir1(n+ zM&(BL5HJ%?b+q|CTyvH0H!~RJgBxC^dDBKMj_Xzb6J`ns23~eW42X${i)nrbwiJ`< zW5#Yx%41$s_drnX@ra2r!PDRsxytpFP8~0ldZ?g?Nxi|32s>0yx#YzmioiwWccA6(Sa5k=kkQgpD;?-EUSo>Qt@x2#OTKO30hvIb5;Ey8tSyy z8}L=bd2NMzgfvPwjXEdd7k@>)2x$IbU*ptAgG=bE5gUTQ613p4(rAUw;(Fh~M*+8d z7c=JP3O~hHo=;Urz(=f$6KbS};nTs%Wt2`OwEHKAJx*?fh5?knO z1Rrxy9Xx%G`jqE`I{LWiUd58jY{KiV;;+R7lPuenvJS zrgC~UWGK|`gmuid7(F{Qx~unixmZZ;FocG7*80QH0N&*_>^9p0&$2{m3 z_cr(PT`(UA$-0g)t{}~W@^jtYF}`W&&7?Wynu4Er<(Ik%F+rw~MDA`Pg(XX<3@B-W z`Sb1}m`#)RQdx3Yg&Q*m%fYhJWfdjv6@Zabw|bcd#g{jcFq(^^JM=zIE`0*tr^t|u zv*0`W`e5-l*q4!}vHb#qT-%KG(`~pf-(7T5WUU+z%|H0pwC1b;Nhh zaovX$epY=SI?n)#cT3U%s<}(cwV2B9p#2pRT_82gVSZg=#4bu{sI|&Zu7ANSPAZC* zpAuLPIl?~XRwG8dCbi%ydcPohwqPx-9&Md0scYp##GfOv=sz;+eVFKO=k2mfi#smt zK<5JZkTdWdtojI1@O^qfR2#YJ5Nz-LrjUCx@3*?|b7(a~FkDBC)zN$tNxiBz)qdp3 z?#&8Y)Vd)OpqrVVp6vdLx7Qglre0p^CGM4@w+H*21wT{#;_10egetv9;%17g(z&eq zwmETW512hbPA62>!+vz{Ig@Na&j)2aA1J024CP|%740$qXq@@Q^Ysfmn8o_ahrtIF`+FWZ<~=~>8TG!|aq0cC`~weLI=HlrjoF9rqvrjhPUJoT zSgmS%_R~e3^V)(v9(ci&b+R%0Fb1WO&5r9a@P%GkC2k9ARvWnEAV@>|2zY_SEPO+V z^3*HckJ42*PTLc42*xQOak9b-Ce0SlV|Y$6xpy7}S*rIDhhUr{o9-h%V4MnTws8RN z!6}-Qa|yz4F_wMEQ^+euHCaAjWAavi0MJx!8c+{^_5n-Wa17`+f>(W%LEq4rbr3JB z@0%UhE9;M&px*`F^ZyC-0bpXcf_^vM-vatQ5|ayo-i^COKKOkCVfp8PjdVxNS9!k< z=<%SeabPu#WF>U(Smc&XPBykR$g#ATkq?Unzc=lAL?lvjAAE$qHQQ|@mKO0|b9dSR zEl2sWmFKzCJ#@X7*4G9zQGV-~=uA{TcEKU8X zGv3|+Qx0tTlN;c!rRO3yx?tkLdVjqo3s(Sxe$$K{x;U4)US=JC>>2@P!Kp`5mNtCg zh%c*-I^MUkFH7NVmEWh7KY#PTKa08C4({fh?aH2DiLuJdTnH})L`Q=6vX$-hX0vN! z{Y2~^(I_DGAU?ngX8)Z82?|x+K^7q8#@4&eh$x_W)-@UAzi)f+Y?VKH4Mvc0=KqXrZ67zpOD?8m)x)?&TKXTM>aX z3PL%X60~oSFA>=d`x{lR=mGv_N9Yt~OiUqH^+@;=c*e`#SI!?A992#`_O6DJ=$L$a z;iZP_(cox5$!>=mT5&wXYYzF>;GR?TX!v9n08sqoAv-c3`FcIYzVn*>+ST!NNFWrb zN+|0HjJ|ss{$xkDl>sJZ>x==`RQtFWC9W`yUpJs=gb*$7>65mBxvfL+X-qH6otLY< z$CZq(5l-KF1MQspsjap6G^YDqi(^)Uw8s*2cERIJQJEJx?L2OwjkFZp{5m#6^wQc;TGH0 zE-%yxXy`p%lE>q#Wch)?@49Of)Qx!MoQBtDioz9zu@N4Sf+?bBP;V23TA;GuOc0O! zLYM6`(;Y&$?XSgee|6jbbmukGtiFA&zPEY*7Pd9F_xZEE&yU0O`jLwh7bVGFRR)mG z78aaJZ6IE|Ixc{abtE6~LnqU`C8x-GY=xByl|@xzpwlxUUhDMQW?JA=l|hBc1YWz> z&oHR{%#Xt{-0#s{jP}De0_2=u)6x4pz@DnD3+@M+d9AhuMWKj8Hj#YEY42esAWrvM z0E!7sj|PQWs~P5*;Q@(x>VKda<@gDWqi6@-8LTgs=c}=27B4$ ztM&%5mt&Hgbo52Nk|B+*6r)O$N4Y7~xltwIi2-fL?Xaf}w$j&`rP*ZlOREsY|QEuKr=E&6wTCU&Zq_ouXWxF&brerM{?gW`Lx2fnbVheuclQaDDO zG!1V4w2!N3mKbf5wH1`98iwx{37j)}vZZ4ju{)-u^_wxVbkdg&4QoKTqhby`0wC8NU#YeIuw z)PQ?};6M79*8q<s@^ z1<(%H9P!a|qeunLhsnmW>mcG@9@`po1v4w}wJffM7zOGe_{z&I>TIq|!Uvyj)OOj? zGn6c^fgBX!4Ryrb51P(!&DFKB^b45qLY6Ctm@qnq=vwTK!v_FJWAqgZ0Gvrl=~(wB z*8M{2p7>tEwhi&yO1kdQ&hPtyq1nkMIoAu{Bq1A}fLY;l%L4TWET{x<+@G^Y)W!?! zi0PW91lc?ga%q6s4doa8kf&g0_$}R-<7%Yw9dT?A33|348wYcHmi@9NGu#t*pGo;FH*R7HEK35-I6qlL6>0#l$=&>MzdYyUf z)ouILa4A3KjwUZs?z+jzh7@g6*cWC6$k;Pn`x9xv&ShLwF1OXBt`7vj@$B3QU-XX_ zs0_bSwo8H2{~{;~v`A*_lw~-XbKPn35z#DhU2FzP@!MH6nMFH$abGHsgQKD^sdO`1 zeBrZE3%Ikhdu{msaPTf5Fqf}&Rn`Hv$R=GN$7iSIrnCB@e+qq@uJrBaw6mT!TVxp) z&h}sLuw`2KdRI1@^Xip9 zwAYIQr)&1m7Mv^m;e(_F!N}vei;eP>pm^% z=@EFiEaj{;J2|mFfFVP){@%Qc%YSfb$e2({Yzc9s?>_xtO5UGu@hg~ThR%vS6`&sI z_9qaJF>bf0E#OCW-Fh_DD6kdA$u-;8WY%BX;@xrz;RBlQcx0rXj*iNy!25qUJXmx{=+w6B>)mV{Y7^DO&pVYA0 zW*YhP=~;ZHx?Xol=0j#wY-?VxqmKB&a^G6ai;*iaIk+W#FF0J9ITnHA=lR+}LL49O zrAeVoQkVpEyi=v1vS=#Bb6%+$L$Ny>d3w+fc~cpta(fr_P1^b-B{|Vr`MW6>JHXf{ zO+@;7nH%tdk+5{#sSd7iZ4?Yzg_mWbapIu+x@~<(Js~bY!Wt0c0++(zM2~h3S$o@w zg~VkG!TJ$5PrvF-#6omyT*&-|S2hHGJx%*=K^T|#f|p@lRZNL2F=AkTiL_5)&uB71 zCgOx;%a_`^FSjb?&p`oLW^CvVa-$ts+V8ei3CV`CQY-u24fcfk(xqZ0t0X-^ z^^vP+oQSPrvs^Ju*WXZ{eTxGv^AnXnyF595n}a=I90|^%>Me390}Y_Qo3Z?Gyp9j& z!TEiA6!g=axIH`^xWIPrzMkcIN0!@jv0Jm6&W{sy9N+1cr|w#4rcQw{Cun8s3$%Tz zb0ZU`tn1(#y@jZSr4GjPDm>qII`lkdisN?TxRE*h?SJ*KbyDcDdWz%HoM=Qx8ky!= z=NnFfO{DS}$4%LW<5&aCKKec*HHi3Q%8pB~j7gVX#LOIHdVX%iFH?4W^0&_rN6wA7 zGR5)CD^G1r+V+^ahB?v_nCnl6UUE;_vGkUgUI_i%7?wLSy2q}+Nc$^{s9)a-O$gkG z^Wl~>^Wne${rW<5*Zez<74%b`xS7FJ!ZtQZVEZRmA^28~W|)6Eu14WkC?u|*W|B<3 zCwLOFzEyW2C=`h}Z_;TG#RT?NnF;%wLC)p1-#4(|wf8ha0)>V%n)-)^^G~`* zCF6cg14;f>?{ihpr1_|9tVYb$1kIgIsq{VYQWC181xtWzkXFTQO~(Lwwqhsq-{TcW znH`o_yh^FGAoQN_t$7&V*WTksSsz^gBzYR6@9U?e>nKW0K}z^ey+0aSFT@#^f;LzA z-INWBm%RGQFZU#F9lm80C9*^Q+Wo2O-zj%4G%&9lMUt@-RjX_=meVemAMPi8*u+;i zrXHb3c2m!UwHoN-qEV{vB_LX+_c_?;Gu80s>b5PW*wh9U0Fts(*88a`Wuq4okr z0244s^9JftR!>>~+k!%hgMzR#uUE%zUee__U8VQ*Y#^0i=)F$&ssjNs_;Tv&txV$( zP6s3<;$ldNSRa6qTHtj~?{|b`;d=}k?KR&qwGx8~NZBc>Xi^BC5FAH6U7c0 z)rG;ejChmQ5t)#%b#=zeF-@q!fvEgnw^aB?SV?Yw#GQy=3bYL{CayXpLh;?>M_m-1 zRkqNJx+ySxe&bEFa>;EPd(zfLJ!3M>qBS)p-Q5k(IDQn_5TJvgpJ^%#0aOSPIBgy2{b2do&3kdp<f0X@2!~pnlaJm(EJl?eu>(3;pr4-FOe^ zeUwcf619;V0G8pq9@-TUbsup(-u236{E1-4n3EQRMW_jme+1&F{EVj~FpNApp*^S6 zoyEw~&Sna+@b{Xsnzk6Q6}bTmhZ^JBAma@1m9+q zxpdH|D&z$qO?CBe6b2k`a}j zlUVnhaL`YDf>Xa47)MwAWkzxw)*}`H&58FEO|t$;pOekWNzeV%4!b<@2dicz0fMqz zK6cOPK5qtY07zBYX%C1I*uKGt9E-*eVkHoXxM5#)xnFw3qP1yG1`!DuT_`-#g!(wq zb((Ji*Z?6ZIVwtgfk!}$kza0pmXT>L$P}es7@4BLP?$^wI0mKF4C)z^1u`wGQ0}!f z*V4SJE=U9loeQus0LX~UUDW6!>e2lg0QG>n<^@n}hDgB!s)|0Z*%a|-ybHD(gH`y^M}*7s zCO@bGf~Y4ro2{IE!MB-hXlL+WxaS04kO&$~*5AJ#(v7gk1L_bsbz=a8Ndl~gEESyk zw^kBhIWS4eOPH-G^`63HM(clWBr^i9(a?d9;7~jKDDi{$5_}TV-R$d3AnMl!PmRY_ zcf(8XgGz}hV``j@pkg*A&x*$-t3 zos~*)HnJ)@AHd*GNd6d+?}Yt^FI#-mA7L$}H>8$^2?9&Rd&?UydvH{V)1S*EA4NW$ zH7>1t%$uVgDN19GYht9>Xc>?BjY@lEOsArBT0^P=)rPcWElWQyMpoyq8~n;s-HOuR ze12L{hIIH4xijCf$o1YMTtqQ{yUF@azV(Z+Fyy=cuW=BQl+udHs>pT@5#_-!{24}p zexfG6IW!PiRZx;*?hiL1v4HdSWc~d@qx>)Z-4$+pYkzs6{tB2>)HmFO^%umCgkN8S z)F|99xxxUxUg5^K_BZ%%{dEa9k>LA*!FMg(&%ce=5N>=q=Vl8Gn}+L?JwjhpgTO=X)uV;{#J8XXcwZ2LJ@s4OL!_mfnX*S~2o4EQjWUNDbxL|fD%1A{Bck!bWSJ$r0$$#ndqKx!)@)LU}u0FOh z_vXuN{9$WP?Gwx_#t9!wwxr02qO{O2yF$Nk;kNW5dxml@(zA%)!p|_CkX>M>WEY6I znpm+j)2QvXc{pJZ_LPr&PS{iUDBX_BeXd;F-o9fkWkoz~K5gx``5%4}{IEbc<=ME; z(#a;Ix4@;9v~%}GmxHtE%$ZkboYOa|=2-b^*(HT)m@vhx{=l#yx#fZfN{4oGX4Tcr zoB1iS7GoXO9m<2dc~ddxGctS07*_#U4J!2omO^9a`SL(_w4&2Pw1%c%qEbAoW~!Z9 z{=BJ5t5{@dRI_--wT&NH9bB%?L<=m!D7(*q67>_Gh! zOciU_2Nd=9kSeC}!m{iA^fb-w9CVy%lm%19b6hTZZI!>VLUu+Ud_ba6>E0 z(5PzFCSpN_WS5PgL>9&evbpEd)Es)X=%V!}i^#&jbu8v8Qv1m>`$YtMY$geKwh#NC zP_22tX(yPpNj1U;@eM_Ees@JKhH*{vS<{?mQV!1fA&y}uKIK_74~BJhJ#7{wO}Vj; z>I*c#xN)we&xt(c?hYoEE$nO|F*jG4-*g)^g)4$Z_=As{!ut{dy;Hf`r0!mLMw1$o zsv0p-^&6ksF~S>S>+f<(W;RXLB8F{GuAl+{Se_;jh{BSD$!(QL4H-{W&2E-GMXPC8{V6bdt&vCrZxV+_R9#zcTl z&oH%zXh)7;5McgfS_qOl`TiGQZvq!(z5S0rGsE)C%ri59h^#Uq;4EyKDYiM96(RQ3N(E|ZE{UwOqqdQm{NLv@gIDjp z|DUg3JfrF8hAz+ zO;_un`@=-gNZ9bs_mU z>4bOI?9BB02gfA@g?ahzC+r|^l4*`CA`&(>^F_1wERL)RT$191Ner05-;2l+8UH0> zllZ>$*~*C@Cm-ynolTy9BTam-2eV=>^NYnyqHlGc&*5H}m;_`B4N=>l@{<0cZ3lXQ zoEY;q7l@ziO&oU+Y!MU`#D|eaCu%c&d}hF5Sf!#+&0Kt$G6k9o}6Wbr5B!7VD z0xQmAnhfNcL6$}OtqV!A!X6N;=>$oGyf(s8*^XI%C`D z+3JjIL&vHR2BN6#Ll-3%rRq<7vu%pPnr<%V*#u)ykc%W)k}LzkTsYN97c%Q&*auzH zPKpYX�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%0Aa7hTnR_z^}zh8#E+9dq?mmmzDAD5527T0z4}E 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

6rMWgdOhm zmS1Zx?)Z$vA$U9ed+U-GnMXdSImowIF#+CVHc*>%$F^+_nAOV)RX^lc%~U6e_45X4 z$6eV%gCr7VglJ9vhSTZVPlUAE%ou~QpQmVx^G$P=>p&PYbT8t1v(QxgF^+n_J zcYSVu1@u%H=<*r&jx7xa!?lgh=M4Qw-NdTU=ha>bNE0i5xFuwlD8BbIJ4|#uFrxWI9Bui6C8LZ9& z6l$yR_r)5gJcJ|b)g=ifIT|8aBA#H*YJ4KXyn6%BB$yCyOwXTYPT4$Cw8go18TJ+# z-l;Fpx&XXl?dbc3(@k+h%)J6$!=++JeDlJa*%S6mCbiZkEnr?QiBUn)nb@uq%q z!Zhsv*pG#2q4z1+%Lr<-)|_ zPO1|rR0YIq@A7P<=&U1ENE6f|tydxCfn#GzjV`{4eWZzN+3c}N|NJ7a|2clXz%>$D z!srrvrz-Izt@8jsZ*Eu%0Oe2Q{qYM*-ijajF+UBywUs>j$yecgRqp@OYl`uIg?uM0 zWkl&$QC27=C9sXYZXEwC$2lAwWKvE#s_K9q$y=h6x5OlGi7g#muO-tMFj`V=8kcO$y1LCoT{aeMFIqV)qdJm2+#1RW`#gAn zNp4oQDLpE0cvIpvz34&X_`ClC-ZbKakG<=~|E~Zv!W$?}K%*ul_VvoD)5phUY%ijZ zp5aN$jBmxpZ-tK2R8C&i`7M==e(h=@TrRK40P1`a*nr;(c1A7=#@z4(b`o~=IkJ*~ zpC|3KEglGco+f=8?O9l*Hp2uZopp0R)^}G7yl=NjjG~KEw<56cHGb zl79`*{wi$$nf80a)zd^YEAx2G3j3bz7b*#+8kL*iI7{FN`3oE;0Y_&Zv}jH8Zgujf z`U!dx(I01YQgT;-woBOFL3{be)kb?c#rL8(>+by9UOpqeg#M+Mz38QMP=3`boaPla zKVzIOJ?rXDSi!+icInxS>zW{spwstO^t#@4za_UOB)7&Vx5g#6#wNGMB)3KuE!;)J=lUqZQTZ1cptoWhgV#W6r-&I_wIA3wDbWpu^rU^mKE11mj zvFpQ(zX}~d6;NdC{FUf#gsIwJ#SZA9AXTT>`iKS7 zsjAVBOVwpvtw7>85lkpDtTKy-}==Fq`a zTNkad+0#uvMGgFwKd_950FZyKhQ^@70WvgEvjc7_Q^|!()Zo6-2rf?U_5Se@hs-Sh zDM`+<(D0;w+q1z0khXQfuF<%k<3{SfAD>g@HSRF1kplTDX9zwEdf14XrIPd@wwqQc!uPZRzryaGTS;E5s)l8%HB~ zG#lWI0yqec4{(Ta$;J%y zEF$nk`{02$6NQJ=R?BN{z_WhX#Clih&_%-xp~1DsefYV{bprV5RTKvt7owqVM!gK%s5;5sZ{<#HrmHeYL z@dkSCCg_P^eCP@GA`(1;eyEI=snqbh7vNy$0yyUYPB;Ze`+r8y2LwGZhX)wd>3-3#tnoKRbt{{8TPi-NVo^*L1@yiN=ou*xo&ML^21!H!j< zVAvYd$N}z{X4uInwvccU5v(GgsBQpUJ%B5K$iOVP7PM2)j=4gQbG=K++$n9aessqm zt}r7~61d<3K;a7U!9^;n<- zRL-SG%%y~;#12Ne+HZkI?5D7QhHHD>V;Z^0(elRj6Do3bA8vmv6n;Ch)292IU3}Ii z$lFX`6HQC4?O_zom3KPQzUC0SeSXIM$Gm*fnOzq>skG2V*P|#@Am8NHlS0x%#{0i^ z@=3+pN*rsBl3lnYPWzoBhj4^&M|=e3r^-8R9~>p)WZXFj-diYdbUfmRIRzUnooUV`d;4ym35 zcMq7jxJRM-DtV(P*VjL5{n z^m4E~QnN`LDZTt&s3xH#NSt9Qzy+WSCaH;RkXUay=$*9B%9usA%_Ib>MvEdw%aqNV z$&W-PNStPQIp9lbhnkohBu=-yviVz@)f6N)Szg=xG5Mj%4iXzIlQ+Nre)tC=YeS8Z zjNdrbX`w>BGp@~{K(B18Y3dxZ!G#3NKP3CFLM`e_50&}?op1J)?oj-Lbz$4V;q$ZW zPFiubK2+KcuN%2VYPJ6t-rEJjYKc~$ja0B&)>E*rO3np|+b7{BhbWppf8N2&!g%Lh zIB!=mJ1^6^@;cXk8z(gfxUnLL5X~$Ya#`Awqso@dLJYX-a{J^ajnqa)c5u!YmQ2f} z_9?VUFYmL5&}wKC=)*r>%e!uCx%EcNn#=nx=cvkLQ(^e;co_^zulQp(4Bc?-A5|O| zeDHGhL4rG0A0%E9@0h#~V^Ve~Rrj~Qf{~NgJg@;{G)H}1Cw{Tv;Gx;`xbuEbYzJKhc0$YT13He{mI^@b=gE-h8;rSQsz6 zOMctf*84kV?6+dg(yS4-QBrCDH?{;OXtuAJ^~}P!{DylL#iFOgpIOoM#c}zkGMCVw zzqE-wNFLs+4*KWPxcn=@B{ccJRibkX;_{aXO6gBrQ;wpIx}O%s&N{Ic)mv;!VrP0E zLXDmuXbs4QM5`>!$s3csod;V{=jJE-KSWnSXPeo7E8OFohyOm65_LP+b|Cv}AKZg( zG`8b59K3J?2Q|00mES!4nuV^3_LoRof>>W$+4N4jD4sN=Dv%#?LFx#S+~$T<3bQ%p z;#hKDmYSL6H#KOOsID&e;s`~_4r1p9Wzb2N3AapGdJ{pXR4x7Xq{=W&n_u>oek!%- zzGN2lVs#T~4Ypzl6j&s;-pJ>+)rlNrz5}p|vE(`EA!BKQLaa$LJ#BkM`&}an* zLTobFTCksx`cUXKF${q`EJx8zsG`pn^iLj4)nW3x8^7~@Z>6}zyB_L<5m5uimn`a@ zgA2EwQO6B>p(jc0P3>x2Cm5V1Un|KB*L&-f9AG)*g)|VKr)+p)8lS%q#h8k`@I+K3 z)`0V1+KDW;PG0ZU5cx#Fw+lvoU4}=2)pQ{rrl~anzm~pUKatE-UyE$Z(l-!VrIU<+ z6{>i5dFIWGkq|d{pq@f6K5>I|PFiT3J~X!6TJlxqB27TQpdG5@P)69lzGVFZ?U7jR zkr?ffXzdZT_DGcWNTl{ig!V|d_DGoaNT~Kmi1tWu`HAvx%D*l@UVg0nXnAva)6zF6 z6ih(2<@-^54q)%CD7QFaKS8RjIwI(q0YLUJcP+4b@%^ z(_RhNUX9RRjnrO^(q2_-uSRRH#%Qm`W=<39UKS8UU1Mce4I|@>*Ng06v~kb+(D=SM z^L?RrIl2D@_O!oG?|;p%GJ2J|>cHFsbv|)};9|kfsI<_i3zl2u4T7_ic3ximpQEju zB|R&}@s>~C@XGD-2EoTm{!>43PTu*T7vy92Q$SZ|0M zZiiz(g+u)pI6ej(?f0VLCV8h?Q>DL8@4;;d@`jhRT>-i-VfU@_hE~3t8}f$RyV*dy ziT+DBYtYTo*YkT`<}5_ukflqXc6H~ge+nD|Jc9O{1Pr zk+FvBMK*A>^wR#0IP)E$cfN1l-l6l>GtYUu-H^@9R9M=+RdM(FMGNgVtGyj9{L`LKL+`Ge(S${#9!xcrgwN0&|m z;T7f8CWi*=M#cbq@Coe`aE&KohY4cucmjSbySc1>)7vp9{2@Sv{vjJzQX4eRg3TSOJi9#;yd-1wIeSBvLtSr1G0x~N{6 zC%4EC+;eagX+89z7uyEM1ipv z;fjC|diGs(ga4LXI#h_)myqbqXixMkd6$Eg@iG!$9_RSZ%us>uYLQMizhht-VficD zHOq69g~IdEi8gg&cTD1Cg~gVQ8n-u$!k@6n|M zbPR?L7-q5`Xp&Nd9Z6JXHopV5vvi#&Q-R-YwzJHEzmYdFpJL)e6ZdJghx0Y#!V>qQ zZI@JLEwSU+4X0*Lv+yS$#6>~5e?`Yuw#ywC}y5#s)3w8cyN_RGI^^4)C z6-FUzcj)9C?swYPliC)H(U28^OA8?lDlBx9ws}hmtq6N0D0#6WGL#Hfr1H*QxB7G%aB|nLsuBaJsgSd=22(M_^Cl z12{NsWRM?X5={aRi)`|PZ8{=xHjyPO7&C9%zkXd!^#_HjX`zWvls=55o?oRR=@oyb zKT`V0pXp2fOn+d-gWY4WYV`6;-49VrtTBuV@bCy|ylwROSsHf3h60>|43P*IK3+cv z&?ojqR z41s*2AHvdMP1{Jqzi%YmMaLm0iO=~HyR+#KPIeC^LlCVu3=VMrk8=q7l+m}$VeXQ# z^`poT`f_ERiLqbnu7>KahIL=ThEMOUfw8ghMUit@^an0~KshOkcNgWXmY-IE+$w`R zJiEzkj3$OPVZDl#bY`2_^QpMT8rx=|yI$3gZAW{sFxe*2c7a^}K>k5J(Io}f2t=Z$ zk%cp)aS7esJ=l8m@}sXFj2zg!iP*Y7A6c9ZvHrRtz>V-r>z8{X2r@pgC7X)c^mtn8k46hoGu z=$?I=mnQE%hM@-yb@kDTu$g{Vx=kYAFH8TlM|XzNoe}8H2z6&fx-(+knE>6HK;4-j z-5FMQMxr|-)t!;)&d7CV6uL7?-5Hgxk98 zg)I-OV`n=Gkz1nrKmwcGc|Q_^+%2(&d6y)U!VO#E^z%B{+;IJt`1rVMh7I?ppZdYR zei;UENv#)59?g+?B{> z#Ut%_83Ly&+xa>cibX;mYZo6E%Eb@ZK;u{iV!2D`dSNanXW0|3d%gi1A&|S8twdlA zp|ld#bN}9v8}^bMt&TTSl~tdL4*FM0k)6G>Swsz zJC6EE)z=b_Kb6Dx{&Ra#t2H`)k^OiVVfbfK9F=Gfk^t-7awU#!RSnr$q`?yHger$? zDxHyyWNl-(bv~k3r)h&wA-y>~DrS$9gI*|DUhZfnivFOr`DM$!)%1QQ%>Zi%Qts!KS|c}oCsMA z#$=Iw2X1%ded`U>?n)i-*{#EDUUzG|(*Nf5Z<^k`A+MjmtwPV7OO@C(AP3ZtbNNxq zUH%|LZko`?b@uXrsXf!@{qh6!nsysi?ozw;`9X2N* z$@hMtYLy?z1%n)|Cp3a=W=3L+#y=w88=su#2eMZMJml|2uhAyPyvq{KPYC&PT#P#H z;60f$TU5vOC0V2};rP;8_n1!Yk#-J*n>IoQl{#}|X6ZS96QCi$XEcl8(DUlnD1VQH zmeA9U;F9WiD_bKiv3_SJ`z-+fmS9(f+4loZ+gW6GNvz~j{xR`a0-k3SEPIihF0t7{ zLwwAO_9hbIi`kCofF)TA1}PQ^)4FFHy5H7!&z3vP3(Vf*HnK(nIc~;^7{vBlTCMm^ zXh4znw<|YhcF#sVwqL&MIM(|w1618E<= zTt=-EMtJ(kr|J(|egzYfE!;{sf;OfyUBf!Yeu{Hjk>xb*#RG7PR%b{HBOA@S6Jpot zEwgw2kkQu5vZFl8Vmy7x?!aROjC3zsm~MHSv>~;yO$r4$YZ+MqOOs@J_Um-Z9A9c+ zE}sgn=xd#&C@^r;^na6+j0vn$9^qQ*&q3*;2^=dNy(F9rNNH78wb|)m-qQ9^55~Y; zf>8@6Wdvrg7m|!@c|8e9rLf{Hl=xT&%*;W&Sqq~`Cb0OSZ-4MlHD|eCnOJp)YM6j; z9Y&1ca?o1*#HvJ&-p0Xh9_SoKE$%N7^LS)NPOK6dg9Q_-_8608{-zi}dl5r`S7#v4 zTxi(0Fp|XI+Snr)#qi&Hgy}?u1ellDLtsCnVV98K@Q+@{eNDfWiNE12i^JVx&ycAr z!20DU(L%rmN`bWLC#TIm`5KSF=_g;EeR7H)ZNk};))OWb_Jkk?y=4xj#eEVcDr4C~ z0>?FtvMI0sUlarW$BW2*1iRk^ut;Rw8YV6#?i=TEIVUR=b@EsPAg?ieyQ-bO&loh4 zbb~Zb5x;DCuxLolT{aL&6sOovbfl7RzoU-DakV5fB5DNgBKG!mP?(_bk(3zH4 zm0uHMTucvdM1$xdbg5W{_m+kV;)G7j9gudC_<7L@hntTS{`YCp@QJ$y`$^XhGjW`s zFowIO^?(-T*WAer3*MnpDhWP7BjP!;?SlG?8I~d>O}`|ZZ696#QH)msBJGGbd%&Au%xKdOv;TCt`@)EzN+ zs}Q^zLPIq5B~|i z`w!7~L`+tsdKbAyfB+~bP(P~R!StkYpU%EBQRFad$KSnCi+zvP%O}t6Kx_>E_p^wN z;a_}ydWJ28lRTor$md5#2e>~{u| ztPz%k#)RNeA(QU2m^hUq?F4v7)rHFha7I{)DdSJkvjl3XT6EJ>CYNz0VEk?2F@nfA zVVbtbWyXwd$0M{`lVnwt`Y_kFE>8E>XR+!-?nSf^=U59i*vdG34ixux&cT=q zgRYP%Mz~eSMD3_RRgO2fnUPnCu5!z4IJ!{2%0YBvx$ICIG(-@%tg=C)hV*+&6OC_u z7885Oxlc}hbGBooefc>%ZyMmRqkW|J5c_9Yp>QSNj|BZ}${(2A4Fd!SlfyZSYxqhI z2xqEK?&d6tK}ox&+U=ZNOQ`ez+%*c9n(F zqlRgpV~H{1HYR#uf^phsTlPEZTF6Q)kB_>Ze(G+_U_x|MMmx3gmoqYFOmtXS>@4T5 zV`O-oVTjF0Lj z@l?>qmZog(UV=01^eypGZQQ-SjKxd_g)6alv@k*2_en{DE0V&$$!6V4@V~bU`!ZOO z)7{vyVFz=C+MUuuW&4LbHKWPY&JpErbtknt(9Wh?4NVK9hR6CZU115=!rl4v!n z<&!tiAT{gcQ!ZW2AFd>N0D!Xw?}QM{B)WTriGYABGZ4DC+c}QMFF$Ycb3VG8Yvbwe ziIO;OBs)q@g5pGN|1&5KdP3i{Gycnz4ObV&p?!^n6Ut(u+MHSy!Oze|arMVtaZST* zEu!c0e!rJVA2+A|qWgto9CS_1iR#9TpXMNx-XG+*vJiWo>j1^e2HwI|JRmeS60Qo# zH{SV%MKwPTN3T$gakK+p1b?m`%nR^mhiM5uyNRI^@VJ548xZ^v-9GTAI68!DNyo@z z`kk-JFy-=dK8iiyq7=sTki7&eE}|sbKXUA$@lmhvIF?pQmFp1yhy8Qd_VqwnKj8~S-P3knkCL*dzlbcHX6}u7)dbudtx+Wvdl)m zyMA=EeM-2Ee)Qp0f&a_}{~6K5ux36mbx;p`jOPUi1dDk#U zyKphbWroNB`k~9lKRHp9c%3gH+2=dYmvjH|ecSfu$OBjTcM;>6ib>xY? zZOS7)zCp~j@Tj7ElSMph_9uZPUOvz1`uNh%{EbKLc9CEH~`pic=7fq2u(2`pL zCbdkwji)To#`OAEXV*_LS>C4K3ERX-bCkyje5lU{jbOMk2fq)TpV(qp80I1u5Dk>& zK0cMq8OAFmb41uX&tqhjsQMLsWBq=r@K4QOe14%h@Ap7|U$L|6)jZOt*VBH3NWY*L z^c%(1^L#yhbue38ID3Jhe!t#QL^*3A{q<_Y3rj+Ig1Tu6OgB$~qRW#`KoK0aQ_xiX zBv_Q9S2QLz`Wt>q@G8*89Gg8H)wtp$W9w^-DyARnL z8@XV;>}N#p&b%WaW8S^%2Bps%xpuH&-iXRO^z(974asb1T7PFo!&mFF(;JSg9cpO! z(msp^%o@rtQua~(ZtD1l)x6Q$u!mr;?6k^zCmy-n%M5iAzrSE%t$jH*QTYEEHmkrT z6KaFqMKjMqO4WiJ>z~XI#^<=fF}G1Z+`nDWQJq$~ixHWqj;S%gMk>23C!~fw&oYw) zPfThH?;*~fKdYFRaB8?*)b*kzci@ftKiA^x!F!{JF5oOOa)i?ej)xK7E2o<@ktvGM9WuGv~@X&Ouc53T36NfiWo)4|2=wNCX|iyY0jXMeFHI!rhX|1{{`9*^I(Yfc z!8L@JU(UUETGbg;3~@rhs?OqKa7?0=@loL!r)H&}nx6){tafVNP`pD+2m}EjhnKihJkaH2tYjpcg38!MEjifFR z990||v{h)(9Z1t1biN?rQJg_OZ$fbrMR7R2X_N#^<~BNzf(}B8L*+Y!>AC~lK9lZH zY{a*YM`+F4ksH9*WX5D@4`$pEba5(#L1GAlCi)49_iJW8_n$lZfdSachF{glM<2Ps z^K2^IqfUIaYjrS)uKNhR&ZRJjQCxJ^o`I0#j><5iK!tAZQ5y_1ft5{u?0AM?cBTqX zd$Cwm5PK~MbDF6+rca)0?7Kh^20E`n=<%YJBaGUF(pq96iffhQe{78`8njj%O7=}u z&cwGJ^qQ5z;45x!NF)*n{PCNLa=6Pz@w17iE5VMuKYpV5u9=kY^rwHA_s0ct-wlrn z+@wv?S=$FRqAzMgFOG;3Y)(mf%G&uj?BacC3(U?hq?}wMDRWGc1M0v}3YJZA43+1^ zT7`xMG$3b)nc1oU6_8t}THdj3m;S0XbAj3I6WuY)j1`e6v@~nm&dhFWM*G}# zgRng)D&<=tsqya)%#;3EVwk-CDhj{jLpedgsvD~qf?dGBAXQ%(emO+KL20?wSxH3D zfumhi{v2@3P{+6%08KXAJpJSdpV)P(YTnA~6`O9zoagyu&gEVPnCn$}|1Zkk1U||l z=^yVoGI?g^nIp;M4&)((WO5IO2wsdVE3BeM7TLJE8V#}|UhxFEG6ckMM?_2nHFAc4 zkN_&DJ}3f0)PNVFXc$5=R}OU5aL)f*{Y((t_x-%TKc77GJV$p|S65e8S65ZjdBO&ujdN!it&|86o7Q+ zvT9iS6M~HS_tOO{r~kJ;ywq|pX~Usi?zdLgiuy6s%6r>>>U=|xF#X^;R zt%~czt(LPruyJIuKkLII2L7-5a2IL&EqfGwcq9+=LY+=LGXAjy+Z>^<_4Hyv#*yN) zPCfaBjDR3^3eZULefwlR6ndfXPw{;}RF3rl&+-oByrLxDR@VZez<^oWs&l)|4s}8W zHV#SHaDWL~RYl_;oQT0F8EaKKo;Is>ffKvr1X+`jePkGG(BfNGN3l+s&8c4vMT`Wl zX*GSpM}1|)b#wVy3K6woeJyMa0%#X%TuIy??YpM+7*NNinN;vw;M?T(TIO0|zCaYy(PlsXJ3ad!o>-YwECbd7rCA4k> zZyn+hf|t#uSkI(F9mT4_YJYI{6wxJ|6I{TRbkY!=#t0p_<5x~T_( z*jK`sUfk0SUOuL;=!VPi_Ka!mBPF4Y2U^;GGNztCX7+>BuJl2iZ0c7MdXNyH=&MXC zhzB{oFKkx`d=-(KRc7natBVH~e8a%~%#C8dZ&}s=u)Zk#KnE>qdUF*zQC}g}Hj-on z`nx?MaO95Q-pnw) z*%BxOV<48zJO!7>A$Cb^l|-}+?Font-)-^Ew@#?JHtPnf&w9oQ1DOqm;g9MyE`$0} z0GB&dl@zmEs2X==CSnQgI1?qQNJywG%2QZ z(H)9wK0*>K54+}X-dY3K{Cvs`3?9NC&UO8uYs4lt0biF9iz?nIMySuXw)X$|D&hlPF1{wDNptK3v+`>(dV;Q z4$J{Gb+8@SP&a<_cMpH@O>T`?_GwdjEp_acAgnR4>iv<=#p#mip!0|&I=Uk+I(X_u z>RgS((~tc5)tZFpUuugG2_gNV{;Mi#6(@aYUMW_x79cMB0QW)A|4X29HS_{P*<1V>|;dN3Q4jY;kFQhwqNHjg1(n()3lI z8vO;Yg};lp)vn9z`@B2j>6!Tdz+yyz7bd85E_T)pl(RG)iA^$Sov8}A%R^@`0(y<&}diZ2z5l5oAMVx?ZAbY;Cj1yvo_O;xAz zs=Fe058zj2XfF=13Y?$B#V+^*&T0QU9(li-(XWI@a}Ds=b_Ja1SHh!d)Rl0e zUkR1ySD7}dSgr1A=c`z=vB)^#XU!g&% zev9MPs=5D9G>Az5J^j9b(;@mDf&mkY%`@7s;qdMY?yZzGH7XtSiAuj8?r2i_J*f2i z2Q#*2b6`hBeh{YrJ}I#`Ukzk=Pk+xiaOa`nRSpbl*$EcU^j-S7sG5lt#(6)uPs^{$ zVEXTmKlx(oK)yb7{t4u10J+Msa%5gO#8#1TE+_n ztMnd;7ucV%4lRag4bFrASoCBqqp3wXPaKt}b{^ByWSZJpWz0#-{dDDsrH+D973VN4 z^2w6Wx|CS+)$RFLPkZhmkgeU3^GLskkZL1Vz8^6{pFWt`OIZ-3EnbM6duU;{;c?$K z0#Uoi`yQ9e?UVbAexc8UQ~EqXt=A?9Thf#o5p%9wc6*Rjk&nXT%j3lxqSiF#?_W`{WoOH0pE)g+mafjvKXb+&6E|epSx8L1JDhMoA@XrGmW4QV6)v6_{UafOesqozcnVf^(w&o7PA;?SMZsu9{1XR zC~wTQ-#h3OJc|AxwqMu&kHct(v7x7hY_BtY>{r2+Jl|?BYCs3n^Ziq+$z(4)l4?sA z=ISlg#_T0K+Q;sZW9-@~L>|5DhGW@$(8RC8*!Y7vE$(T&e-kZ?!1q7n0Mu(GjsNT7`W#! zkswY?-L9Ty-?%Gh+4j7`rrtJfg7xo#d$vM?5%%PJX4HO&X`%fd!3i(VfcYkyIbXoe zK8tQLw)eJH)4T3YXL5pSfNvqKv`n>u#Yme?2e(&vt4X9X7`!{kBGb4+zh151p{{P4 z+hoR>eoela_^=WgW+8Q(4*t)d`;MTio$3?q87QoZZ64ECFZa&pDc*mxAXRI$lbETRF^B(8MEK}&<|gBEb+|2 zT8JcF+KH(#JF*^nK7Gu!3DzYa*Z6UIrnp@@!Z+bCVAsyhFKj|v@z?SY#7<`Jo&Ix0 zMOH=*NFJ4;!wHsgF*tT&Wys0-F{4tIcP z%h=8K-`h3u-p*oL=bM@S)|8mHzO>}-oi5Ls<{oXcmUR4Pbi%-Rw^1CHJ^UxbKW*8q z$yvj>fpKd}`tVcQv9|QqUa3*1@=o4T@bi!DKXC(NXA6QbiVU2?!wrm2vq= zqvh^(PjhD`T7FK5ncd6s6M|3J%S-Z_&hS&B{j;iIe5$&by^z}(cl=IqVX;%3pKNK( z+2VL-7lr9rP98VdAO9%Vc~@{Ydetg6wt&hllDM($^DmsDV0o*v@awm{+nGKw=JBk` zyY$t1ZxN1$ko4=lZ+$@oKcZ#q*Kk%5e?{MQ7VeQzTo)ft7&!R-fnTC|iq!`P8!>vs zktG*akIzrc#YsU3GX0{_Np*HMwosV+r&!k9VdgY3d1hE4kRw=tPW<{#VIDKpHtkr_xTLjx|uUBcl`EIF@;Ho<}D zN5oE0_?{S3a{eo7E(?0DdTuH?znkVYx$@h}(<3Q*c*N<~ihX4QWu8sS`NSb?$o#$s zz6ew{%J3R`rI=|LTd*p)6wdt3*hg9l8=+=(S}$uL|LC67C=DG!IYXWQ&7PDPTkr=M z>vZe3^eB~VF;@G{?gN_x^)v?xlf5Sd3PyQ-)*RU%wr@(ZewP>{!0u@y&$`M-;{+!y zQ#%0C5#M)+$WX;T)qg+a;Sa}p4l43OqV;grlGA0c*=M}gFZX75-tb}knA>j4Hs67E z$S2|t!D(K~_j+(gD^Q2$2p@)YqffDmS`A*GXu00M91ZWbd`JiM;Om**=q{>tsW$-! zUsSQ7b7y6(l>@7J(<`>sC0pOg-Lj{bbw7O7#awmndwY_izxD6tkUz)m@7${Fp2l!ylYUBVjWFS2^Qd>Jx$aXt7K1wr_8hAq-d3p_A5bW_W6C(q-iz zfH7DN89h_QQ)^o)97)l&of82Z%sM?&3{DY_G;P-k%(PvgSZg_F+~egR32H>yygoRY zw`M+e07rE?lO#5T_BpII+LCE$qVF`{W6|@5`{YItmnwZ)n!)$w<>v?9^6lfu>OE;jgAy-V}MrH=e|!YO?H zum%*&A8e}gV>cZ^1u80Hu8iVlEEcMQBRSsJU|)>#yaz`;!vAea(T{d6m98Eq|f5>E`G%Y(`g9?FhJcAsPzWG%q?`kNHwN&x06#d|a9T zLBW$yZ+~(<#5|W%a%lnYe-F0gz_RB0u|15DwT=1^C~fM%$b#uXGmR3HSND2cv|uy4 zTA$=tI1Z1;oQ$w)Q2XNp8i#kgi&e=Auj2wv^+Id z2t395j;E#ylLkjMBv=F-YYs9J5bvVTrxG1*esC!QFJ)&$6%D#G#e8q7MU|Hp)!UjK z=*NSbR=3xYuczr^dmlJ`*$sYwKJ0X>w9Dm%Q_Izl?#yuQirKql>JshVBhz;#?roXT zVB7m^*^bBr%Ldf(dVX-jX_B`RDYaJU4;`r1qiU34u^SJKuYX3fL2WeL7Qh2+RZq-8 z6bK7HUs1;Sic@6MA0d+u;e5p@O~%V1lXX22ld=879!m;JiccCxUTfx;VA||F-vq(Y zsZh%vFMZ947E>QwN-_UKRDb}bl=B?&(RQ9kmHbB@%rnPJv!s4N7fq;yt}4CWwbbZ( zMHpWhpb%KPO1DsOSK(xG6q1=E3^jFL$0Uv2Xz=xcsY-<~FTjq=Q8n7v_kK0~?d)gQXU%(J+B)5$aYmePJ#P9sVevS5 zwh&UkHEzZ_^W1SF*b(Xh&FPkp>pONx=GdW`W3S7^A*|z~+U{$Tfr+Dp5fDOX-V-mZ z(=QwsK6-oH)OEt#aq=+}#Po4f>h%@l%oS=&g}RC=!HaE1dNE_&`i0|g%yv5}0r|Ym zxeM&9l-nhYmsv3`D~ahT>(q7Pf^iB3ku%mfl8?_9S~e^k2Tv`_r2hk7K^J^X{+tHJoH^&@;AovJ zGV{$XCO6Ge9W7blpfLII@b!vm;XBnEtMivs`0t#9v1$GQE3mFragc+ zZ`s`3CG-5Im+(N`jrQa&n`d7#-#?Ka2-^)fUwk>%35u>j+uPinV%@u`-|3vr zbc#G+I@;mK)Pk@pdfANu{5= zenjmE`|$GPQr5XIaQL8icq0+`CwarmbpY;`@|@x22R_Fs5&^v6P;gy(oOx`5crxRm zS#67|sha9GoZ4m**qoL8fRlfxmG*lyEq{WPlUADhrN!0nQCA}YgW0u);t|HQD;q+P1UmT)V3vQ>#^nE=2&~bv^ z=NY1v$q>PFH+7&;QG55=yIX(x36hvj17qp*v>W@T-6#%>(hd|gThQSSLpJQC>0D3v zMQGE-i8s@^o@)3s_#Nwy;)u zkxR4=@wv7*+za9-B=f-4@m&h(1{0SxBn85YBCQoRgBGh{MC%G*L(qCo(%}S^TIcB^ z=!gXEw$tztfNWas8c^sObh~TFtsNo`kDhGM%;-Pzz!xMgBv!Iv*ud08B$xdorJ`mv z!gQ~#$SQZ|tyE>MREsAxrfQXbk~(vayTu9X68Qb|%_(%|DHZRh-KR7>-S(K(nh|I7 zIJVOed??xSeUKEiZuQ%wWi(jX==QT(bdP#JI$SbVsmTgTG8So-G(m{)0yblUf$o{% znDCoE`G%t65G~U{LAx$<6CKnbxa1%R)((N$Nm7Z%-# zPoqzXIR)28%4W=l6qw6k75<$$h_#t{eEFu1`@J$&BmFucmeSx~ELVKI0VfZ<6Y}h( zO?dV8te@Q#AL+AH03Godg{lH4lV>W`bi&C5b5S~tD}3ff>n%0vq~?k)+3M0S!Iyxg z06X;P5sW9>Y2IJvcTV&EGOxjW-r56VrUD`@;m~<4okbkf8^=F5H_`IgaVZ%~z<%Vl zvEg3(mYFFQiXkWBtmrDWx1kYC%GfvCz-U51=8ws)z_^|L>$4}4OwZS4XV-N54YPp> z)q!an49S*%8aEi`*Bk0t<4B?;dG)hz{}yem%$3eeJJ5$nLUgJW0n@Dro-pLo1Xl6A zV>I{Uo$Zq%z#}8mcjf z!BXsLH|Bz+G)4(HjiDMxbBYriqQkyWRbU@F@Du6_4g~oroc&2geb@j0sZYi0d*b@x z@BDLfUDissxmx9`3C}pL;p1H+p7Pg6)@Zsg)PX5&sWF_2N?LEyQtc2x?!<10DQ|OQ z&PQ%DW-a;htOdP_n}4yukKu_gXZsbpm`3^*+&}BPQzs)ek);#TrM^_UH(d-U`DQ1Y z+asnIwy$rar|@+TDES}rE#lvOooH^0m{HiFygvYZ)N;Mo9_S%F3nPg{mb5MhyQ*Sq zUymk5JG!Tom1-mO$z`t%Jzh%s5UiVKMfP^Kg$0VX+^|5=NZkX0qH%5G{DbOU>g5OL z9ZELdV60QWeyCy6Ba`0;TZYY2vf%<8SPa#A%Uj~aGqLC-Si^`b#EEm~lkgobo)w z^LcaL%--@AdrI5+;R3_8N&c&Z$Fh{iaGPEs7*>z4Zryak zcLHrfjKX&sgP-g~!%czCN&-aF>}%zK?OhmSKU%)8-dLfwe^YKhy6}K<3Yo)LBY;4^ zS(t2|U!O*MTi8E%DB3)iw$(9GjEpr*a!npd?J*~pwVnC+XvfW5PCC;DvKN{7R9iMp zrf@~C0}ME!D~O{k!C~ibs9RYVz;9!z;g0c}w->9Y0AECLQO(MtFIp1$7>z16X?mHT z2)617g$;9~qK$pj)luptLP6RbFAk}JIC!|@0}L)iAcWl4kpXs5C}>?qI(A}1EU45YPV2xe~e{?YXQH7{UF{b4%yE%8+-*T7T zMc4-q`XE^Ssf=ETW^Ca>BZ9Xcq|W#|(K+vo|AV^c9h8rlK-C8of=)EYWG%U|uA0;H zCeSm8oc~@4dY%^*X1$+a6-Ff7%okovHNu|e&dR3Mf*p3YfQt*5^H!MZRE9%p|B8dd zes_tQf+aRnNCmtVEVJb=Nijjo`MJ7d1z*rMRlI2epFfDm5BRuN)Z{FQLnI&LVRg>3 zxa=jp!zI1RKR!m>5B#9&;D^6Y#;3~)166c(mszpb33T!C6}E~uecQ`$F~xK`;28_i z!z7)vWsrXr=QJ%Vcll^?!z#&GCnO`pK~|KpTJTlYOX>t@bl5RTbxhRg7u&o;B48)1 z`eMOm0n4zpmcTw8He^&k&E1SuYSvoI5^L~V-Xp7N*@Ye%c*KHi7N5E^2u)0->btT7 z2G1!SLH0huh5oeGs6MrLRWn}Fd)|wX@#0OguU^Xa^Nv{KY;}6nnh~)kSHD~4_Pu4^ zsoQ#{E8z2^`oMLN!Yf&&cOBet+^qPt{jVEZk2o#RMp5(`!e}%1kmj){JOz!fLQe^9;-<)D=;66>I1armD;g zDWc7yqt-ehxCmTTU+A4cs}WY)s+%K2K)sGRwK^`KYLlHUe2y{(T9i3z=O1&_I+U2% z{I@>@)VtLY5hEK$WJs#RW1g5`&rORsoe7OGQ|C^4AZf-w;z@o>YSzWQk@H4&&l&fe zzVMvz@nR;$XTU0DfbRhgP-$mdtDNA_#T~lt)5);5awgR4;;M40vOSP^m9fP0hwpmI ze4(gm#se>xgbv{)aMX62(%#dMLD9+~usS9{tZX3K3F*GbaU1YTsN@qfN(oC*RX*}nl!aqjdt?o3d+wr_fuytszU9iEoD@(*XQCA>$|7_ zhG7n$A~H9?b63!d=SBJzmNdbKX(ee08_XP9gC)7__iIl90EqhiPZiMADR@00B0}99 zul+*>kkFb?>o40RRiV~s|9O_eJ?+2EY8aR#z85WS3!5}N;al5A(*x{fXDt3^%D;aq z2{kcPq9q~d_D7!5!y^IEAllH)nqJORBDLDoekzArE&kx)Vyd`cSER#cGUxBCW=#i61_PFB=*P1@moZd=I)^N_>j1n*u z$()vVx4O5}6BYnH|APQH_t0^PqM##BgYOXZf8EC48qyxIe^3&d#pw-jVx3^y^g68* zjyG>yS&-&7ZPy5x>^@X?O5CL4CWSu{m6n9~Qi>^Zt|dj0Yb`d=PMmnFI^s5rMEhw7 za*+?q#Xd!sTnb(CbET$;7ZujbRG&bX{9L7R+l149<;U;o8YV=<+8%!3_wnwVh}UC< z7RUL!$u-*Gx;?U|TP9~j_Kb@}v9DatpVKr`4zUKnJ#YW2=TpEFqkk_!O!Cg&>a-<@ z16P)lCF%eobja9kGx<2GX~8%`D3&p;Be=GG9=Tsai@L=#lS`G0BL6L%zQ5iXU8$W9 zZK$LvG#c9>9$E`^J8}(C({^6l0VNZ3qu_JK8Wm5{yEy2&!v&H6f{!!FYZ97i(8(-gTH-wNowYy4~ zU%$h5%a?=^J&u{fW+r~E!^${#jwU=rsfRWPb>7q4xG^}U0h=A-yQ%tP3-1ix0WA;2 zcFzggNHOMg?mCTTiNW?efi*l2IJsPg8HVH8h1!`R;^9qih5K8V3j$+&UEDFm$H6kY5Zc9=Zax;(JeRZSU!Y4V7<)rF&o00` zio?8(N(Ich;i~Gh&g}>n@maF|(G8En#673J^x*cK5rZH8;Fpq1&>uKC_uUs%P|<$i z>**&AJw%TN1ouY}FslQQ3!zRrsL(s;5*=nYt;{tr8er(dMS%}M*G<}a?L^l#Mnk7U z*YD&TqGr?$^AcS*YtM1IuGh{>){oAU(z!v$hVS7m?=ujQ8|#gShWc`M5|O{|S~~Rb zvK~+pjH7VU_}qN?q&LJ#yh$N()1~%ZoW!@}ZtJ1&b%2}VcT+D0e~AR#nzmV)L2RR7 z^TX2)VGvxm@YGFw$F?R28!EBh(j4ffJ!n-yS(C{)-{!9+GdfjZ>ajCZ3r*YV0=IF_ zg2|(y&X{a__`~1X+gdh?`zS?7!UCR~8Sf;u8O{d1_(u_kc@f6TMd*48aP7->9n5qc zPIoo-aedaC%DXKIR^5_nvexL@p6S|^?%Lhwkv#*8Su$Gm$7?&i?&aE* z(t{a0NXXpQp1DId2&Sw>`H8|AI+t4SQ|bQ(XG|-ZUO+#D@Tad(dO5}oW+J`<=jF%CZAy-EWDgJsxRNp)XIh}(4}7(U0`1^-E=I;QEyb|arUEqr^diftvY zOJhBpGl~^0-k)BmUTK){h$~D(;*XBb$(@o76C90an^RG**qEYTiIElcN{rj2m1kBZ zzzqch8IAm;6Y5zI+>s8bVL>o&#~40PXGX1hreMI#6vIC6XwHdO`>ac3A^^zRl}qPbc*=G~x4d2e{2|Y7k-x78_Xc4R#lFoxu{IEc603Dz{0{=8tanLFt3K z4w+XBp{HpzN|V!yl_sZ2N|XCED^2cGgC@UhKcVUvs&m>PqSo5&?w}7h@m=b(bk6+n z&Ns0>VZuS|Xkne0HNf55un=l1T67L}&rOg+(6dO=c9ov$>r*3YUAL#ZZtH_G?F-zz zH~@*iFhhBeO-Rz|M(Q4>od&5_vzjzoQm-17Ho-7vNy_W7EjX|zzQR;tGu+dLQ-RQ! z<82lk4Z#Grx0d8K?Y#T}FGd?4i~NVG&5qfVMdo^!kdUT*w(WPMf@PRz5(y<1sT0Bp zlm;1=Jwr_+)WQgLn+~!FKEx?n?IrZne1{slRfAuIRaaYY=;~eK&7PEcCb%>g75Egq zNyVa8ehW`nT&3la6vGX9AMI{=w3+u0l#%8WDq`#4$=~Pf-|Yu!f@k_Z@OMh4{hZcnPs@u762vR{E=VjZ$xFxW7^hmHtX?HjPa(WF;E1f)2i} zKGrbMHRN9qEOjJUp3$T@PZ>#;6oaQo_d}Bh>3+D*Cs}_^aU55*kgDBW!Q>5LHBdz3 z_|4mbn z)lJn;5ujgHNRP<%Z)#GsqIpYCf$<=Huy^E-n?B3>#=Yqxb43Y5pnP+0`XJBaPSAS< z?5;L9N-C#X>$+L8uXG<+flWjET6e1chs|aAKidwJ3mvMC|L_1xQ`v%e`D~!+7_(Fe z{FGD6C}Fo;ng5P*}|OgT{?;hqhw!4{7%`}ZJ?#TlSIn8 zsT-$lE?YkZ;LA(-IlFGw-#dzn>koQ?39Qj)AmfgC)*;){7loku7 zH#D#gQwUrCsSn0spw$fKlZf(+pXUvDvA5pc0oerDe7XG^Do`YO8+`mbyLx!BYP4%a zylc2E=;Q&X&WIO=c6RZ+&?L!cpa&ZEV~sfW3QiH`5hV(bIE`_HioRFKWBn9Gsx<$F zD1pt5Lp`a#6|x;+efPd3eMzFegtWf;ZiCF2YxLM;{Zl!E*DOe!ygw>$z*`CWCwl9j z6i%o})j0UA?`snEk7W&Bo1lNpK6qVk{iFGVYqJKtm7<^6u}15RDN-NFYhoQ(fLMx* zKR`9&8}=E2b0Jw@61e7b{It|9;6QZMvfaMP8X5SsEaXpq9>VsJ_<<)kvmj0e0YuMM zBqr(aPSoG+oeY7wihb_AKpJ*KT$28pMEx~Ej#Y!O5MSMqsJ|lsvsB>qqjvt49y<>` z_TN|^xY83{_BdBgj4Rjb$}{z>EI48q?Xyzyv_P&A>mzu~HtgQq z4bcqiq^VAlW`YN~G;lJHIcaRXqGu*YKhfQFMowidHX2(bUp*jxoyyLtQ(BAmfuNnASRa` z`16Z?Q6Te;J)})U(pBR95;B2G!&=nJlc^KzmvA6}GeP zQS`N)yTV)jp>|GR%Eq{Ug7{--$- zfr7wxPX9QK`bzqrISozP6-Ec>b(eyVTxndG^pnG+e-k=vL42w(gzWP`en&}_hXtXB zmb{RX{_~cV{B1zFjX^R;g~S>}t3bj1xuZ)3OHx2m|4LyROwTz;FQNcNdJ*4qXy>lW zdXZhqxLFtrE4$zxjclng>-Zjz)dxI7!fVWw`kls50tmzXRh>*-q`7eANFa5bB`_IU z4hfqEL-OqXmr}y67PAX5gYQ(8Nd~rsT4er?o?LT5Q*{yxw zHTB*}1Jq?x`ak=DK{rZ{zg5%UdXEK?ht5&sISx?9D492SUtLyJ~Y1a0Z-U3 zr+1{BlNQwzU8)154THphv1*9@tMeUq%mlBuyqAlgd?K=JV9Ajuf%y#-sEy*Z0;=CZ zRV;F{{(MU0_u_8D0-2^OmJs=7eB`l(@omp+gI-3g$o`70_@=HR*a+MSLRIagj#6%& z_m1y*Za??F?<;OM_j~7;+>Y)g@7GNP%HhCKGM+OxcYH;w7Sn_C<8$gY@|zyjF=lWJ z%Y%yT958;IQ1TV{Y>lSaXxvNs6&6u1%n!2TZlOuIp6-Q8fd)Zpx7B>_{29~U7w5&# zT?bbEdv8%!{vBixoxH+NrXUDuBO>1txQA|6Kkr|4aGdG8fK) z4qksk{RYakER0u1@w{);*n9kj;(w%`X}0Vp_{_W1oqq<==cakua-Yx1)3LOa!u@EU zil-wKxyN$D!uayI;5SOU7R4`V^@QmHJeEWKfIk2)#WczUTFn z2FJ99yy*?uGa53>8q!@m`}Dk_Wjd%2rkQsp>c(dwOKo_5AYxw9&-HSe>y=d3vJ}^= ziLxUp@`mh;cmmxZu$y|U`4L_Zr2rC?auYcO02SYXm+RU-Rmku8s-6GE5eN1x+*P ztw9oYTP!?7#3-SY9z_Vkhj~q92+KU<2$z~8D$RRjx#4rXlp-AJJCvbqu4#URFT0wW z@4X@pTbE%Lx6gK~ZcWye^0;d*(@VvyT9%GW6W&hK8b^j%!ykbGu^naXGCVioZLM4% zOyGqcIekTRYP@{HW8F@6?^B?p0xXRRfPg6Vyi;iBDHAAW;jr^ob#Ah5xk8FzwV0^z z0oDwAJGtN&RM@2DW;xL|^f&-K|k?1EU=@9=< zEgM}XXGv(fQVuq_6$X~kLp-4G7~RZr=~Nm-Vvr|j0h$u^NzK9yKqyP95vJu9FAP6TDN>%MBnZ>;ix(j>Gks%n2{-Z7 zF3iX;UW}*DoaD4)YBtY6e;ve23GvHEWgED(0HSRoWI%e0Zr*hz`RM=iT@8<><<=Ze zj`&F-An~{4i0^%H3lNxUAz!zP#aQIRtA+3qjH-ojW6lc}Dm+52JYG4WW=McH+rY(7 zs*mOeW0(Gi2{pZ_N6c=++daeN>TjaN$3Obpky>QA-tXoV)XYNC&*2DSOZR0Es8 zDAnZ~&SQ9|puMTT)bOrK{iT=(9Ub;dsXABgAWT4`5GYXaqpuLo+ZFui9m0IskrB<~4@znGx$XMc>R$SQ?4B8#pZPl8<;Pm$iM#}gnh&rtY;xJj0k0Z4r3OsUd; zXPo94I8BAuN3#?9r}3)#aGn7l)rc#51uaI{63|J|>z21x$vvq8;2>A#sB0*JcH8zt)?lmt5M&p;GL`z-Mm>mpABgc>|KP zErEP0&xlA;dz5yX#)bLfMkO^*1YgW`2wq3MgpK}`iF=JNEE?Fu3z+NU$e!PG9aES6 z%qQSn*UMS1S2A47`nq0~dM0g}Z*!!6?Ke;$CG#I{J>loUfwU_k+}p#A8A}cIFFL8w zfj@*o*Z{?S9E=Pe`e&#u6uOmp5R|n5-qTyPJltTUMm^fD)Az8 zQga=X)C&rko63>s5^!IS_w}K&P_q=d?^%>zAG*+8##l^6Gc&MeW~!8oUh7HLfA&fC z&(TOnoMicIHbMfR7h3^J7rwppkQ@2{yx?Svxy9&iEQOMs&#WFd@D-PhngVRUM!pbBjSSzN-if{N5o zs#7xhWyu&oI|CA9=RTK=L6o7wv!DatAfICd>N<#2(yEv+6LmOnX&D3lUU4E5Fok+A zcv={%1UN6_t`d)5wlZpz2A`^$>0(T^bSbW{a8;sj@gAjUBJ4qa-&Ud;E^$ui(bNW)Z1mlm4JS2LR(RO>IkM$?Q_aFP0u#v zr1QO#Bb{+4M-D3mMk^T`=0;k9tg5Kh=!Y8M$<0*OQHVFx~%k+KY z;tROfs3cqrR|=C*j)bOYfEW!S&&u4mLii4SaX}K(8DK3&y#f>Q8d~GjP#r-g%4TYN4MQ85T2fb`ZMnr-_}|^gfQHC1&*C0$ z1)}w0UDe~@TFVgsl9Oq)patYtb01)}}@c#39Nz7?N+Qr!7OH$;0qa`uB zG7cs6wZ}3E=`g(Mi&TRa;ayjJC8aqI8&W4o8^3ELF{{Q_&tcP|tev=T#TuQW5&oEp}9w%g)Hb7Gio z;45qfQZ-UDQqXNQ=rGy_-c!sh!<{EJW_A+KB;!v_Od||pn(P!@H{iMt*EC7ARi4xg zU`V?pF}e_!8&^H9E=j$t@TB?@-bLezk#H5B)a2v04KT+vu7HAJ>2fd_@z8q<$4ROsSW|Ud1T48NVg`M%s(vcQFmblWYo= z1z6gOC0&aPW34_lbbSIYCobF%25zrU!3CPW{xQfYrzBdlGiQ3bDm`7jG;L|$mh>Y| zTC@Nzyid3^)TX)CUOp&EQ_%94ZS-yPstU@*HBciuGT@%%7H7BL!ZlD!+taz`XE>pbpfJjq zu{p9wpqiHYtHzTZb%0OZBGjLMP z@{Aelwk*tm!{!^83z>HZ+&(KZNXw*@pkI)Ig^LFMnHeORUy$IRnE^E?{4@W^wfu7a zS1$h|eCsHbGLZ7oDQIMoKG@dGk86sr_T7^|wCX-!!SeVMc#i zA4~dX!{6ZwlRX9|9aLySjd4S-ixYFko$(jGFQdO?ItIlcvF4H$fa5M+O}bPUsOCnta$U7peN9fG6Skj5lj4j~ zth(6y;+^@;XZ#31Z9S&?Ja?>&KA zG{ChH5mO(oxeq=)Nf)p8zXNZ4L2NMA+3Tti9oqDUIPnPi0iu!I!H1j#Q!e(;I~U4J zzbjWJg9>VkzEIQ1Q>%hOXhTc#mBo}WSvXbD$12bEhOiq8d!Q-uuhOv2>2^a6{ed*uxHeu9}*I%4f{I#Wq57YY96@j(TA&~Mn zM5oMStK_F(R|6^U-}0^ILvOKn4Ig@;&Q+xRMKlA%sTJ!*Ifyv5#`;LlyqLTiO%I)Q zLItc7gy|jSFq{&MeDNG{PUtX*OHSooUGSQ z{Z^Q}R_<05yUj87mAb538MhyW@i)ek9s1;Ng+*)S|G<;v&9#6d^?b9cy<)BWGTwTX zVjpLn%8&8k@+;PcM<+v+T?Y1@ zr$=EzFV$RO--~r3-*=0pFR`C3o=q1PGp+7<+ZflPdXTaxDQA_h9pg_TGl#lU^6!dgu216WT@1 z&$MOaA9c^Dm!dB&Upc&73PNiMe0HgS9n#~tp>zxDSy7ut+2|;f*e3n_6A}gAK-s_h zot#5&57th{_OZUpA4B^}YFTk>u~cSxUT>)O`N=ZC5=*ooW;i0jT#_yn*_BYb*LaQd zV=oM|U7Q+!AwFkq8J$bT8R>K|(ge$*yfj;W8b8kk4L&~QJN49nO5QtOo|olNjj#L& zR4hewN9gk%EcN1}>W-+*9T0mHE>2w2(a{Xg55ZDU8_IF8l#3JAggU$Ei7{v6F1v#z zUMyL&D^O2Q1pE4mEC*Xt;dRrkK5KP#%EkNERQoCsrGc5g41l=+rqw>|`(YkZj9>-* zyPhmXrJ3tc#b3OOW+k|}ks4nTj;TaSjYVpn;_x?~W)wvzX_ZdwQG5V&z`eR7XyYWk zT7jJEX@~17u)4gbp6{AE-RO9`X%!Iwd;^BTxzZqzZ-748>4VcRS{LwMqMN#x(W2nk3XSV>52 z4!|7H>QI+(i^XoXS*eO00&wgq;O>#TI#D(b@P4}!Wg@Sq19f2jBk_#+Q681k4$wiG z`$=DkbSKq^=xEiv+)CrE*$(Cf)KV4s-0AVG;^h+m>oP%d~AMZ(E!74t{3Skaz>~H!cOh;AhQEwmICx{&#eaZb?eU2z0 zK~NhhjX$VW(h4D*8jQIH8LwEpLpa>=7y-Zz^3#LdY9-d6p!dToz*7rLwMu=Z7sswy z67)OZ`~s(ErtMOlvlx>7@PI+aCd0xZ^%fIIK4)j80#p2$MN2bZB$Y2qMyXNE;I5gX;DP9-(&7%rH9N30lpRCctNrK_@Ql5e{fQ5fQy)nF29UhYlw9^LC;713PuMU0 zzubQQ+b=yYTDa`>yZ#GeF&CC zz2xa2i$=@h%^mAH@;%{kZ$6C^w&AGTPz^@sA3!S>VsmoSn(FX?+#0+FFks`_H-PMN zG}mSg(84!bQp;+D<|!oFji?m#uI0D8R@~}(W27>!%>BpLjFi`A4^rhhaHJhagyI+{ z2#@znu|#&PmG2Xq(puqX49O_TKj;Yc@NPJ`DZjR`G;qSSsMTp513*nRrjOU8c_eV) zA^Oj!7mS?NnLaHuJ?K=bAcPTj=>Q1=VPlpI@I0U}<7t^U{Be_berCnM7iNwQS9T}h z2tH6os9fDs0!8yi2{)IV-N@k#c3k~FT*J^m3jL@iTpY_?IRl6OZ8|LLyY)9A_hZ&1 zk8uX^fGxK3C%k|WmI@E051&;#K|djC?T9%e=iQML7u)&-h0xOEwB1op-~Q8ga|40o zRTh2fihu;mDZ75MZ`w>aq_7u^IK*5WIr;hP5f}zPj>_bHf?*~Sf|0Ql6OcEzOk%Z$ zT;U+jgFf&sl*!?LJ$RY){C=EU9u(&QSc|N@Tr>oPeJ`~am^@j@SzgBwBEiUuz0TJs zo}XKBNA7TIU?5nk9Y<~UqDWN;xd+DzWck?(N{JG*=fNG@K|Er;QKpFl-YkzU8qk4{ z!7R6O@}jAPn5P$q`ze#@UW(}f*t@(g9>iv!Vh*PLm*4iObZd=j;(>PqHZDuoWDhoG z4>q6@&VTKuk9j<>ZuR2c=PR<~GJ^4kNc3OYnSj(G&hprhf_JyZ9wO{!cK*&gv^eGL z1@(!jjX&gk^kUNaX@*^@oc;JQrS3%T(ekA8FZkD$QR6ns4Zf^dPD_z`YAeO>Dbi)@ zC#ZFB1^uQRf=kxXS#f874Jk zJmYxQ**ROvjQ84dzNyGM>PB2Q*wxyP&dfdPjyr$9`pKc4r+M8M{Bc{*@#2G?ORzYD zvbHl}3(63K!KOxM)DUrR^4VY8|5}DQMYRr6jye?ePH00Y|7Ul?IV(4MbpuJs=Wplo zZ^BuBE!mwVpT8A$XIX3A$dP#dugJ7MR7;uc*-XjA(drhzA_jmSX{H`SdZyhpk0zY@ zARI7ZIJ4Y~mWickHE0Nveh`ta{-V&1BB(@`%G&~9i=a&Xfp>G_Y}t+ocpZ^#9DGWU zib>{=m?p z7*E3aSbW#(>|A9}lQnlFfIt!Nj%4O&uNdl#{}e)`cp;F$O@qGAijJ?__0AhFe2*jR za-(DO_QwYHk&$wwvh{!9liWBP_s{57{r%xhl|?a!dYye5f&XbypCASnUY9?>Nb}GY zqUf22&pclgBSVPmb@t!Nr*Qhu??~b`|G4Oe#W#{*h#dYYKK0b|D)~rGbW-BEwhsGr zv{ZjWKC=G9O%TxB;IOIQW13D9oCFr}D@+kE05~$QfGh9ece;yWR`)tP`Z8RfEV?e` z>=TQx|8qS_=e`JN!62CF4KRJgC8$Fns;nhc5i6*)>`*v3yO4PHfsXq)*CJs_x@|jq z6bywJ{$H3N&c7o_(|kAku~@iEVH;QCN&oOWuA&%sue0{c@Vrg%-1^_}_;=0#FxtP9@e%EwdyUg>_R0l$6B$`x!87tWsEZA&7tZ+|#O)wa?wA1*(tV9`lFmV^ zg?1&J&99}V`QpHInCY3sbCv2zQR^r51I?dXQah=wlmz>Te(UeX9Fuqs;gU`l(i3&s z`n1}#v^2LLv=0hRO*!{cM}IIX@Q)?YuST_zTA>~%kz(aTReOij)6iH&-h=>Q8)t5i zBx&dXMJfCqL#c;Tk$l`Ul&JWmv$y);oo2AI+dA&VBv&f(cu!zc=e!1twqnG*r1yeu zF1Z=yCItr_l>Sw(6*>0=7bR8<;8t-F)++u|74??Yr*P0NTApB9F~y#{(?hB}e8xYQ zz%e;|>R*7emH(`(&Z-O&*8l0%?0{AXvOHjq?tRX*@Q#%319a9osY?8heCsYcX8tU& zo&pUTp>{oRI=^Rpu=x*fC@qRn_v)^@-0ywS@7<06L%$zIzn4bbes#Y$5d_IamhbR5 z`CJCNaRbPcmRu%>crCrW=9mgmx?Ixa;hD?wi$fZ}Gy)`dC-!_twd8)!{P5efV+V=fldYJUTlB7&3eWz5DE zs_ypsTG9=^1ec39%C_tx`48~d29OnpK3=z>%I?O7hE{|y_>&f)dh{bRQyh`6=`){V zK%q3Ui2a*TIiN~I0oT}oBGr@G(TQXcFW|hkqlK9NFHA>~JxjodP{p7xEsvB(V>HrS zj>@(W@feup`5&d=ee~@WvJ(U~gAnm^`5;&NE&oNLs00`RiIQ>-B>vIWgsLu~DV^x~ z4+6cdd=Nb(Q33P(<5S~B#_CP`w6Ufm_^C!|UB;o>P{$wd>gH%1j86R0FG4iSsSM zP-SwfW7jw+_3W5q^_v$4YGF|9 zh*;RLAq(^4ve>{{))j(?}8w7C()_{?mz~Zz}oyx76;?|Hs^$z(-Xj|D(6J2v}#orH82 zAS@y%j4d(>IHM88LD8{=h!GSbpac+TB5Jb-bR^)`gvAiH1YDw^UeFoCqOv%O5FqJn zy>~#Ch>m&RI=4H3GtT?{-sgS(@8!dX+xMQms!p9cb*k#@+PCva-T}uKF3g>tmk?B% z^hQ5v5UOIUGxaC+PNp!z^!(Pd)ggdqenPIth9b#$Q-?|gFPb~`r^~!wzd)b-X&o7w zdTHLBdTf-GXHKP zrrx?ylHsQH0d`M}k9(v0m61`sS+d z>Gui&!?gZ()Uowq6#-+So9(tGB<+tUv%E~?t-2fm5%(7U=_H`h0iotI=D{ABq(FMOHecZk_Y zz(EgB29X`vo?SnX)})R_Y)vv7yyyrVf>K5G# zLR|o$f?x=}*Quk(MPH|Rd(>cKzty#ayYkXN^r` zP`gO^tm7n8=`50XMsWWNG}6fshVx0iDw#98TJNu$C+Hk}S@1rVIC|l`djGn);wK6F zG`Rbf7li`yI?-^t4OAJt)Plh>mY9MQGnFG~$3kAtWfGUxJ7Tw^%Ue%YR>HrRNLVSz zYL^UZi$7#bvGLhCBjR$Cd-))tfpF7l`w2~zi92iZ$L%&F%%Tpu5@cwL-))X{X&=h7 z|MY~g1X`Oo>_qF7GayN!bMS(}I|d_4(R40^_9rm$t6jUh=jEqzRlibJLot8Jznw*Q zPKVO&%6+-2p9ANBB?tdfK>V&IB&fGb@(O>7`qvZHpuV<%xY%9@glL_UtL@xl*{HV; zG*m75CF%0L-b1Wv$aCz^OEtSBfut)pM^ci-?}!U!7$T`x9+C(JnaRDa{qXcouU7XBs(HX=J==QOOp zjB;=ygb)%%-wQ^EHf!ym*9MRkCqO=A*-hk;VyxEW`UinU8#OPM5AY%%($b!){T8?q zKYtz=P-o_b@Uhv29VAphQ$~^qO?q_aG)*9NyVf%4^51)0_FuzGFu;UlPQ=SrNp|5+ z?tA7yg{Zs`MinT!+=HU{jVuU_T@)fNdzIvs2oYMjmoGTTa~lz?pb@| z-nccuWD%t$fE&PR4S(a-^|wS10&r%PbU8WsN;XdOn$1khG%kJO)ADh=a$KBZAm4H` z)?Qv)nyp%cASbXwRE@Wq$)lW8m+8vs1bgBe^p<2s1i7hSLCK_<(fv|wD3|SSgivxF z9X)Lk_r1zKJ+3?!qzy&BX8#WF*3sEz?ZzwWFer-X4ZBWGT`N0C%NKUJbLY-syWIVS z2MpQyxfJ?f;acs2wW|4R=?IxZ%L!n-|}cWBZ9xG(#j;5p=9& z?i?(os->w{Y&j!;TJndS0fvB_twJrqLGVCB+!7YY#IAhE`v-u=u6o#)&-78XBKMKq zn{eqRAD{y5)9zp;=?Z^Eza{R@SJmmE?ymufyLY3}e1lO?S>A;?lDCUxYtEy^jcWc7#vljxx%!hFRq)eCxF{&Cl;fQQL*t7-xyOaniM<{o7DX{_^R=iehN0tG2o40+=0 z^r)BYf_Kwe?jUBW|AgQSljJ#X zX5#vqD&G`3Le%~x4=+ao>_sOq8<9MV4tG@G97I|yd-H`aZ$>PBmFn(8JB8|y7^6sx zci-z;yn7Wn2worKzTQ++r#q&f+u#>t;6p#!`chV43IPFo9XQQVPbpdudir7N<@L+^ zrdtf&hY|4#!MX#8u&=ku_B5GAZKdy_@5$9;^uo1D@4Y2N12BO!UOK1jZUd~fONaj8 zQV*2)NlR##y-KCP`QCi9Z@3q;TyUpc&Lhu6@}TtqTygNA6+IA@Z>}>mAw)_yLHkmK zbmL7I58dE1JE93bvyyh%RSSS=mdkH+m$gEEsFdU)L3X3NEKA^4(vd?Qoz7l7-=|{X z{5|(|zqsf6BUz>f0wRgc@z5mg};4{*to<|Pbh{kgt9PW$!@X zh3oe^s5g#b1?Za^WA?Bg1=0A)2OVwWUm$F~;mnvbdKAd96Z~di&>-?qc*ZE7$ zVM5{2hTQ8MUOd{H;qZbL2tEl*Q!g$S-8Z;fyoPF8X4Z1>W!aGNdtOr>t#$H-nEHZX z5v#h|eZAL|N6Q@4;5D`W-@T>`qSw^bqoUW;)dqM?UHsFwdASru=th63x`@A&ll-Ng z63Tj9e5kE~`87Pr*2#$9)FbrrKk%Dc8?obe-{3c8X29%uwVnK?9$@v79HqjQpon0L zl@`BpOc#gy_ml`~yZ!=h-V^KT@|((_^H`#p=rQ=y237K&X@~=Y%IP>ZZg( zddW0UyEGM3E>(~Pjg;HE6`rv3-cc0p_Z1F|7iu*7hRP0VlphU6cpGz0KH|NUi{r~t zbp}?=wPb2?B z%B7dH%a&Z9nraYJO-CtpL3Y{F8&a*2R1c-j&MsRPO)Xh1oxd(YIQmw+Grq=I9={?U zZJE1wNc&KmJ>eh2o-Y1pf&BEio&~%gzNx~uMBXvXS8LM}62*0n>wL9Y>!UJYm@lsl1q~7_Y0h!#Sbw4~fJdf7}ZG7%7a#*3d? z9ZPRW^+ZxDDfL6EV_7tH&LR>*dwN{Dlftne^yTQ*)oa}%`(v?Zx<(LPe9Fa2XFTQ> z&6I01NI8F<#?HwogE)y&F1~%;6r%=OjBEn-Y~gi3O#0>3w2QBUD7%Pu5s0>DyPXkj zPZ$f;r(IlmBU$!rFJ^?-vpt_uU%rNSBI%y(1(8&ju71+LuKv5rVd4#LnjZC1tXc@B zq-~Jrq+a-*ty*^7inI&Iy+(>Mtg!$Ozz8CM?8AWo(2idpn=X9i-#6E$w(Cj*FU&0b|Z<$O0P zB|?Kbs|1=u-L0Z(hKYB3)N5bAky(e9;`@l zcC9;@LJW#)_wT2gB)dE-5pAzQzBAB>Rm3I#^o7Ph3H#xxR-R02R(yecYSG?_^TtYN ze>}`fq4(hXvjd^gS)Q}xp#GF-NvG3+u`7wUEw4-+E+nxs)1m;r0+|~ zLCEB2-X;d!lUFv2aV6j9mL&_T!(s%!$^iB**sX0y`|)Z3Csl}o`rN^dLc!#*%3u;8 z2dzi+_S}`peH$dg&#l?#9I-?AUza84r5Sv+G;?FWZmERfpi@(|GI?clVdE?io>^HJ z2`}l4gqJjGbp6bK$u>WTBX19R`XkV}QWc}ZiSy!N;T0^tQ1 z*r4qQEW#%bF1my?g#m36?E$bO2+XsoIQ^L~$1P3HafuNoi(*vEk`H`NV?pP)`DK3ig9s18-a^EJKawBNxv5X=Tovh0|4F|tb|%w40+z{Zyvtdf$qNJ=6l+89McwH* zKZ}weO%*o6{we3ZVZKjT>Ou6ej`i_9Dvv&{jZ~W2!mdfvoi+XVK-HL>9g-YZaoyIO zjKNRrQcU_4TMluD#l7bjM;;(L(idr`1pnSDfb(AYvSq=2s_QnBft%+Ma4T4RNr*;K zGf>#yMq^A0!VMuNOXOmR$x)FIlcQpG>~CC9brXv)Sr&;fX-9;~AID*kzaLz3(BajP zc#RkK{`a_&`>w^6tRXlTu=!UTC}i|<-~XAok}4K&@c-kuk{tgk;!2*c{r9+%m6|>* zu4JXU;h4VY3v6t=6&+42Iucj(l`axd@-U-P?)TzKMsfZBJf7%lUqdWM*-x7w#ds4EnG>r(LS63FC+4^v>dr>6e)O#U!I@BD=Ed>+QwrT@$Id z!VlwI)N6^<+slV{8Xfwc*uF)cp-R6~Ksb6fVth-uFi>ZS+X&kMaDM^<%l9VoSw;v_ z+3ipDkM({7N1S}g0mT2u-3fOJo=9nuIpp0gWVDW$YtuUvR^J1#BjXiMygP2oh{O5P z15*^or$|euDAr7oj+mktJ4Gs;qKKdJd*6@g6$hqBk55sQPLZyeq8KqnI(CXeIz<{k z<@dfH)1!TNNeLR4Syclu2umM{+x&XhI1G$L83y2JKFr@^&&YGLDxF&2e0+aqifm%T5Hu#eZ}a||!%>8Z#_~l@X51)} zA9^Qzo|mCWKL2gopXZo$HeH{Xlj@}Q{t4}Q&E4nNKw%p;FM;`wk{`n_i<9q_dJitO zY1-A*=$il5Z*0ag$rXFx(|Vf}2#OBbZJXL`9GAe!oOU`EKx?`kge+Y-tp zr}0z%fK)kBO4?Jb-S3f(McttNEE1si5VK`#(9})pbaJeFC90B?c4c0^#`pXO0!-8S ztq0NB%JRxer8ADNF_x{kP!4sjp2V;OY^rokyKebsj~%#X5Nt$q)Pv4O8As@ zKr*5lJ0;e^$-?HG3SD2qrM=|#r#cUTuKnD@#S z1h}B4a4HitGjKwCwHk3*APq$DGuca=63(WzyulfeLYy(co2LA0Lpg zsbLPd!0B*plpm%^2tYeOxIyH6T|J|@zcg#E{~0@bL1&hRH!?DfM&33BBj(l4~q$^JXn$S#jygm30Je)?an#`Z7x@#@rY58v&xsTbyL%jk9q{95CE`gW2V`95V)QzgdsO4cmroBsUoHM?ne=B8mGN3{SCkKOeJzL!NXh4vDdG(s1c=G*`# zXB14oB^Yk0)7-uN<U#bt;xUhwo~lFY-^XKgy{Z1!jvd+wiMqXU>RUDb z536k&o0eVb`+_Nes{(+aW9rjGeIDAc>22s5vt9~|L-P^huJXEHqcGzZ$+>wZe=aMy z+W!Vcr`7)h`w;XLzg~x)p<8=uLga`FUB3b4%acP|jM%DwEIi~Zv!p?$#j5MW=CH?jS@zss zpQnY&O`(_b4&>)l{Av5s$|G^xtNISu*~euGV;BiTBsx1cnkF9fIS9(0Y?dGB*`Ctx z!f<1#P}mrFmii>ArkgVW)bD8PjoBkx)~!eAk-qLhG1HX@l%mt6gmexXol{pgqT~mC zkMO@zLQh3GlrBscO~U@6dqXEqMmqGX_)eKVEa^9RXWoFFjNEaizCO`eK|M$+)=X-p zlTci0_!e#pW-EhpzDRP!1W|wK7csslzvCmOU!w(`C!S;jcymWG;!&>H?Tpw{@dk=J;Fzq3*EzC z2SL&Zv0CFf!UWP|Ax7G8We`cbm}H*B37xA<;jdD|U*}caoVVrXoQj)$@i?9<=Wa;} zA5wEu)xwj0E+oKgw3pQJq>_8eD-Q}V4qfEs0`#o$$O8gs>1H<^q;R9q{VNi`I=wRK ztF~3iU;XIpc4XBOO(rW|>9nd!)$<*9|AUxmrv1mZ1{>L8YI6{mLLOKRi`o#a|I zjbUIPU0)<(OT893svcUgaZt24H0Ql3K|0oH^a9=nv()M7$%J*db>rP8 z4TaDT2yaIMad_vYXM#xwIbDHrU*YNlZmOb4b1W}D{)B!EF0=NSEL+W9FW zz1s}sn*FrYVk#UD^)CacRG0e2CvNHN*B%T5wcr(Z`JG`1D>|ch)$=aSrO);5Wy|4* z1Vp6EO`#usdr1`2ZxZ>F_?h+VsweR2^8)HQvLa2(6$$p(N%o}Rn8w0@OH!?qS;zLzummO+(n8DY26#HqHvUq(gMF#L%~> zrS}cBOx`pV;<>N)heA9jn;e-8vO`sp{!`P3k+c{)a1#D+oD~*&n04vVbp?8GKmvTx zHL3Gu1f3LL-kQ|;kLh8RAM*sl>0QLnd$6CwqBmn{Uz_yHT6|}+TlN4hsKIWuQvGp@ z=4Ikg4||=91(>A%a|fK9%LG%IG_TN6nq8shm&a{?GqAth)~!RjDX_EAp)e}1^-vBZv$7V&wt|ik$^vTJOeQLvb_{Rg_ z2rHiP5!3_vvhaC2#o>f-&mcXI?FxkuLPc%V?}!Sl$yg!tyR9^PE5QO>szcswY--Q; zh;EBt?m80Kv>#$eY}?w^tz|4$LV@)@g$LKqfp#9&?A548C)U2L+d23dZ=|2HT3> zCfvCeke9yYajdo(3naJkvZs_IrcUY{VhWtjC^I#Jwxa9uAw=4TSB&TqOU^3}#_v1S+ zJ-{fWNZ&8~fPj2-8Ub8GQ_7xAlb#3hO4p!#<*XdxC>WXTuq32>yxfyqeb=0*^c=;6?(0PSya)Y9An~;*@`jT27<|KMnmE zneEzd$zKUsDw-l$TXE=ytV`XU;+`xm_+B5IhP=YCscVk#(+UDLaxIEhNZ{w9?Ne*i zYGCej0y52Z?}%2lDSZ3KtRBjWA#Yl5$Szn&@hm962XLUS(77MVJr%7yFo&%y6~F0n zbt}pt-(%5y|JHsbYyU59oO_7$t4a*cljo{^?|mwC%hw+6TirsEDca0OG)rP{RRJ89 zfsj}F9&reoV%+KQ!FO1`V@CDaJ%o;dAj$OMP^{)isLmsFvugePBSZX$n4V}L`7E-s zC==&Uyr?~>T2iLsN5b1isZ1$+=ioDZ;=*?lYpO_g>8iX$J#~obPfxxtG+&a9WhSnGFTOBGR#F!)zaa!PV@M$)WT8Y?U@Z*ZoGrP%-<3A4| zE-@CC6@jy}1kg@J=$Tp@p4A=_E$rIwC?C#Jncp&)%WCqn0~2~bfGLG?eOa3)zNIX=(+zwomGOoBDyj;3KRbEz$M^!)FP|u`z)8gnG1TfurHa*?elHE@M7z z!F)1bn@@l<^-r8n{NEs|vU&rce8#h3W(>4 zFM*dP1gfu(V=YhcKXt?VlKfKz!Lr$el0AVT7*;vAb=p6M6C^RERMd(fgnxP7W{=J9J!-=N!E4zc$gRhFmcKtf=3mzsUf#E*k)!T|#LwGAlusn3A?}>~ zwrwD0nOR{&MdH8aBIui4lAGMU%4`NsTk5eLrMW&5sknb(=v_@_bd1-IZKCf6?SPis z@igLn1fFKR-+`wU?<4Wd$NL}g9D?^d@x(bn%U$d_(v5Z^>m{qY)rxlQl0g*q4eeR3 zOZUYP`-wf|y};Pe{ff*ygq?o%q^-v&$xU!gobg87j6J$G^WO+eJqS$rYs-F3Fq9~A zW_%vomi;>MB;3s`IawTVf)BYA*)#TNA|=v(KfkoH}}fFpR3yDFjx_>Wxa54 z#D_7*fd1=x4%!kNei2ir+({&+N_Pc-q*S|zq-~lR zpDQB(fvZRaKe;nbT#uhktC|Kd-n%yNHp3H*=Re`;`f@uLgxVR=IIodC(Yka%Vxjqo zC^SXtk$uGS7bm^&G^B~|myT`kib11aOYA>s3_{&%Sb=_*Qv5mp)Q6||*PN(R0=DV<_+s9GOq zZ4H^ZF}5k6k#Dz|Z)j%jQ8o=_XaLC5haHqzl*hXE2UI_5LH%oJ3ZV9P0<4u77mX*S zRx)7Y42zlLohmjGCyhiI842J%gW(}E77?X56fCzz2OxHpEAwK2k@@*w+pCVW7lqva zpuI}#wdR-|Kag;JdkNmP8!fcfV5}M`m+UP~@lVWNW6PWvwE8%Hyo9$(t&@Y@yeriKp@dX6WmXKl1VWr*``4?#=Ec*Q|@ne$xqFkIb0H9P`VF1Z_YGJe=XY33ypo@A~9BFQ+e0lOlvVJ-9u+N zDy!zpNu4X$(U)14kl?kcE1{t}v_s>|&mHj6vg+!M+xJqc$|!j}$5PJrelBSOx7Vbu zlKQM)Q9|IDUU-*M)OJ;B-hhRHfnC=(1J?<@Bk`UK?i;@K@ZHtZ=k4xkP4W5SeQzfC znv;CZX};FH!7DQdFR%=LDSL2n_TXpx4SqQ^{D=+v)U7##9X?!viM{$q{vn5jIFIIx zf9PQWkY41uiJmbdn};735K?zt_F!lB;3d-IR{6Kq*9z9OC;Cn#`Htz%SmS-iEQ43Q zC1eg>*nG3tMf5M;v%jg&2LiNsmM;2C@O)w!uqe^9Pi~R8qnA-rjLjiov%XR;BY6?m z28vIsnmu(Mjrgq8%7kZ)o}J}}WY4x!W_LQ1VgJ5mu;+0W1@)M?B$KG5cInCxnytb@y!Q>Djn4Zm9vW$3l;zr*_pT+*9k)7$mWMR1Vyb1IdX)MAXB9 z_rNTilGA?R60lfjo%m7@&+DP5W?>u4dnoz_B>UO1zYfv8BF&ooQs0UDdV0$AA&G9M zwD077I#}m=UdpK$zOxGP_Vl|nQ_jad1B2tpZw2C6V#Tmd{H%v(F>a7XL%49zI{CA{ z69uEE)bmb*pyyPl!&NZ#;`J|tzelTf)l~$f@{rXRejYlc^? zmh+D>xd)ai z$HUcnV2D^8RszgV`h}a7#3x#0?>6zt_@>cg$|!v&$&=Ll;vxa9u5EsDky&Dnm1U@6 zVqY67?H#9>%x6t3&AHmHnk|VPDQ%v3#Fp5h85KA-%cimNcl%>u*l&yFy;#!WkMo7* zqoLBAxXo3$6{UGs^_smBx|^^km!)f_^d|%&-h?t+ zGi5a)5ScMXmiIj9`+ty~@;9xTiD76*$}_CSwx&%3ef`UA1WbR$2^wBm_NLIr4SP}nUtt4VOQ!S*_tr6YW+5Z0%d95@MjJPeVUQYg;-(7YcBci*v|3VPXi6dF%;gm>Fu_O zq_*JqTAJN?10Kk2XbcQtY2)4FCq=s zA9IEI_%OeQIXCh)ouBv?Dj9j)KG{t7Cov=X66tY5CG7x zE)`I}ww36mBlb{g+XT@LTNdXoV17VPaoqIXpQW}9+m?HS|IpVj)F}7wf1yS$oSFX- za{^Ft`XQ0~J~;hgQ`>0&teJw^F8!4t0vPWGIN*yl|Gad;PZnA(@r^<$UH3VQ;DOJ# z;WLL}U?#y&YyN&_hyQbfE)Xf!4{6sW7?B_rByVKUdtzIzJX4kaU^9fK=08JmPgIZZ z32nXq%}%Rln*z=ByKq~-3-J*#u`zrbqs%hjc}9LIzV0}2Dv?~}+$Ogac5CI_+l5D$ zG$3Lib_+uZnAqGMY&eL`pIyDXA z;3S&&)`e{;cF8StX)CI#^OTm6ny9+Liz0UQdcOv((sh_Y_Fk`6-=*9u#sA>qYUy3U z4)6j8w>j|Z3;|Cu&>bf)XXJu$Lw|*MZ#qk2t4EuTsJJcpq8QAjw6^H1h)>bt5I-QV zv9&Rn!F130l_Q(3$;(Nt^(n3Oa%&t#7k;oj{lRq^W6P6UzleeD-}tX=B4a`Mq}Jmp zttXHV*8q!IEn~&3AKj3Z;iL7CWk6

%nF_@nh)-xkc)}2~OV;e4+X+y)!2|zFZi4 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 diff --git a/sys/dev/cxgbe/firmware/t6fw-1.24.12.0.bin b/sys/dev/cxgbe/firmware/t6fw-1.24.12.0.bin new file mode 100644 index 0000000000000000000000000000000000000000..67869335b63ba6aa0b264fc435f68ee62014a482 GIT binary patch literal 727552 zcmeFad3aPs`Y&F6I-Q*EKE0$9Lc-REfY8}U0F{7S%b-LC$BfIEahRD%5)7M0bRceH z6BIjyKod|CLBA^~nF$ih^N5iHGAxZBYmaj&HocnoCcNleM?tPx$y?^}v zAdf}WsZ*!wt+(F2s#?ZrDpiRBW2*if`_F%>|6Kk5u2%D~=2^`P|L^+y|5H!DDK47x z*vv=7+wT|ezVCN;-gc)r>9&dYO};5hv`zfm%sG#XcRup4IOV~I#WCZ=Fi`MuYdmWo-UM~%)Nl~ph*E9>XDIoR)i3iDYL zvtDY;X=6`yGc#jts#W$jcE8xhvUZlrvW$0j2dD$@OBfnhAdTE87{5CvF_{yGXE@BT^P;I zjJC)hab2Ui1Primp;@K+t2C60RUL?pl|Qt|AJPZmJfE3jS_CYL2!UoYMOo@a@%-4>c)4-oSZe$F%H({;V?HRaUx}}_x8Kz?y zYaHE-;B#^Kd!DJydv%N!?Wj9UL_sHEG5Q58n_UGdVsc>NoR8 zcj5(V9=Rdh|I_{CCjb#QlEd4mo9Pu=K5|31n&4V+VALY+P|RkG)VJce0{eP8a?4JBvJ18lxViQQA)@XzjLfIX|1*Lm4BP6sx*pG|L&S;y_FB zazWIQ(f#CtRk`u<^r)jKP7fEqLh(T=J{a{+6!TZ*n&o^oQR3A<@P0f}BGMovGm`Cp zhZSyaR=j+^%FaEE{2cN}ke@|93wby4*~mjxc6K34_rL4s>bw7M7_eS~JVk0}+MfSf zmPzJDOG+E$;j(!r<-aWR-R+F(`EJPS$J?33O)}dm-{5Lz14}6nmv3{Dytc|0XSK82 zoFYIMnF{3(FCZ^Pdb*wM&8Hmcd6Wy0S0k-KxrB10*HL~P`A(!gC_5-e`UK_Ykhf4m z8M;Pw66tiL+=Frt%GBQ_O5rk>2tAV+DGx$&g zX#IPUupYDyeSgrvbCITtEN4R`H-_`uhKX$QYe>Ksy}w;T!kXOn6Q1ux9%)bSDBU)N z`jnMF(!fn~3 zDF0PuPE^4Px$-Bfdbc3GCvx14NLrCo^&*`|awDBWI)d~m(jKI3NVP~Vq++CrNMn#< zM2`K4)Q)r%sR?O25@73n5qT-nETm~jzel3XCQNd1s>qDq#L&Y}E!RBG1py}oqfX%k>+Al-9}OMJ=SVPp{V-eaZ%M>EvmfTqH5)h; z@uFt!9FfWB`zkI+5vHM7431$XU>bai_?=y{8W@QT;@*$fmW5>IG3E`(wV+ z4=X(+viXoFk4K(YM2V^=VHf|O|3vlsd02x%BAW+UF|$@wKhQ0z^N{XcDypYJ9y)3O3uoWC6x&OeT{ zZ;8~ONetIt2)AEr4%e?0%}V{+tZ;v8Cq?S>BK5_w;rCC6`&;V@!?$)#q@TL@@cW&S z_syp8^U3IN?vLabBKf6oUKhqq+;PmSf%zWHFbD>nIZ^`k2{J@K1mcf8FH z{eH+b(3`-s0h@O#fcKCS;c)BI;{Qv5wF>pB;99sQ|kXxrzVAB~Io`ocdAFWmM( zd|-3CM{_B(q35ATxMP*6QqcJuDwOqnlyk7=*jLTtJ5SVfSl2(@^YPX{6kSM3p7fhk`QoAd;t69G!xOl zDi4DFF{GO0|3c;YI%%QOobe*JDxYY*%)wMv`ML&K{t$YIv2LiSHq=*uK&^7NWJ0a= z(zi^F@2v8e+P!!;2#Lu(cplukFiOQ1qJI_DDc@x7QPDH%S&U53!IcGwDh4^JlC1K^ zHK}+8TXFMGS6m@cfh}0^}|1`_;k>S=} z-y|_+|4CW?$c*wHB*^nIJyv=S2AKa181sfi>!nuU;D$j+IY@S- zNl5g*7-@Tb$zDNH^cGzVLU84T1h-61u67^+flv_ppIfmyF_{ad8=5b&K@Or(JU5H_MF=iTq<3foJ*Z#gLdp_jmTwg~7uqb6XtV)HqJ!Yg zIwW%ATSe~19Fdy{dWxrlHy*lem@4%7mh$RdCwt9f?wt=h78$$6CUVs~zmy5S zavF-=f->=o9f{~e?xntSC8BepSyBC>i%tElT~xo?D(aU4rfVMuT(Bd?Tx!D?qIzMI zs9x=--ci>|6Oey`721ow1OqS-1Zr;GZR8R=IC#Lv?uN^V9u8VO6QLwy4}yLL5jVsfxX!1j{M zDqEK__IEqV&49m~$r97hM~v_?syYq1$Tqr3X2t+ts9SR#>eP06FUvgWfELh!=Y6PW zOky|T-#$4SgR+XM*@SA6AsC~DYzy#bHvIN6Lu_uua z6S3Cu828YZ_>N>X`l!WxMSRoD)G-cG|AQU#=wWueWTe@%n0%?{SqY^L@@}ME6t-lo zl+;Ay{~+>}O_2FS?k2fcg+9>FYOKNPd{N(H2D1S-;k^~Q@DsbJf3rcL zDR_mx;ziYOU{Aa5WoA3*b(K?8r|G@oWsg6il}p=;KvgcDfQPq% zhqs%Ny5;ZCx0dmk$HpwQeHN)(`DV0D)bBK7QsB3D@y)xnNa&{(>-hutc4w`~o%@O? zL5w-HQ;hk%p21*sc2 z#Pju~qIxa8%LP6J(0(`O(%lM15>*#Af=;mZQ4H@Pqk8g1_CJYMIWZCaJCJ~z_t1}3 z67{>KHfCg`t1&0^l{^W2w+A@I`^2e?#qK0sFX}%iK@zRZx=K;ohF)#E#3M`t`%26D5B>0LmMCPn#F#J8*BAdlDn&wE zAa{_ceg<@zA%Q31Csx-omf!auzMT$zR_zkGBKV%wC8972eMf_SAG&~YH;GeG$SlDy z|HnVFKk#Q({=NFoRSf(J16S$eR|vWK_zMjD-_l3qdop={@n@BTQzHp_Cit`Dc3NdG zWUkxQm&9oAs$T$w2QfNOOX=V1y{o9bRra0yPl?)#TmqRbzxdIVw#x^l^kA8FN z^zmr}nAg%|H?Wuie!0bNF4a_|i3x6V6Vvj>gB^y&5;|Go&RSs~C~_GctOeH`R8b96 z=5E&T>S8T7J5!8bmbFn14L{7Hi@9xOamh2rpUw-}O|>dBJ1+XNQLJVk2T-NU)ebvd z7k-uYbfVW5vKt+2Zy>h8uFF%+E0Dje9O)6hlgxGc_x;UPc5{wU+4a>ryUC_qv-utW zls3ui;GFJbO?Fdp%p2|ne!GQn_jP@>m&Md+^NP3F>$arr={_Cb&7$o3cS07r3Jh59 zoO_I5HF2}k_Nh!9({JIsKCZR*cW}F@ZM4Y$$+s7MRu$ff1>kdEAIYtZ4a_{K%3rY zlc2vX{-_DC*b{SA*YWC^rirti7R_yf-pPktu3F|$X)>nC0MVqL#h1+v0y0xEzl*Qt zZA-J;RAZ7K)67Wx2>^LQxtDad)jgZu>@Y8YEVJ% ze9+?@b5zq!W!IcOy;xG#hDh`@TF}EBvyjx5G(17*8rwjKc*8rGXhL0-)D~wOqZzJK zd7K?Ic!T@5orIDNXU6Qb>w8RoQ+;geR-H~a+2eYYWi;uh3~tjUw#E3bYoO+h!Q4kF zuk|K@8jFRqoYZyD8Uj(0dEo<;T3?O~iL*-r*jAeiIEl+`T0P?@b}jFM%lb`{TN49^Tc7 zzGa<~#m;>nipLW3!pB?p1g9UcgOCoT&xrG8fy(lQ^Ir2gs@gA<&DN=B3KQ{fvB1p^ zvg39kTXzoYEcNf^>b?F>$tcCVrMsvS>N#&QU?|b$dJ}*v-gr3_ui$QnA0#f680^7Z zAQ#jV>T%IB$i6{%&+9(kROfN5km4BU^b90Yj{2u0LeF8?rJB1xXpo9dgjWi+D`9`urjM0 z>91WuYrn&PBS@&4<$1xQx_te$?z)ip3z#+B>?I>B2YG9&Xz?Up3wWRB->w*JZ7p{v zflG3Q72XCSZSJW7txu;9jTzYbRPcuqWr{RAQ=)dW??Z(|Y61mBBD%i^UchXa?xJ@j za+`KD&6Z~G(}QF%dtY6bWM;wBhzhlFB-7Eb)l^rx>0(KlAjh0-i6Fe`vu#oJcRySFwkFB4O&ju|S zX<8HO7Zi-`AdKkpbzOs7Z+2d1s8lUWaJvJ9BUhjr&?g#JyPu~XxMgnrVu^6)84v*U z`h#0;s9znZZ<8R}j~PD8-cp~>#x5D@>8IeJ=U4rI>F)<5XA4J8)Y2N69LBwVe~?B# zkd|e2)-GS?f3Hmvvh{nmI5+?J>?^89=b+Xhwi%X`8F4{NiCyRh_2wVIz=qEQ4<4{v z9NbHOa25b^G&()tEo-yNwtSFnPQDu?9EaD?5Jb18)JtKyovqzB+j-rYYa4+h&PKCT zaO9{+2+vTZ=da+X9|Mw>{u)WIWz?!iU1WjpUY1NYfHmr>rAoed=EdOkWxz3?k=x`^vOb^Dus%Scm*ob>+K#QkUWUo1)TG`dCT|+ zurW-!0xkRLU(m+?Ctx45)vAjZ8hFF4GY`kOp)A6)4FPDZ!#ej;zujyX8r={9=4^e{ z;O{;TfPBHxty`TzBJf(R%U=Tp$Ar^F+es%SC^T9gvyC+f(TrnazcQ?P;kcfh=gADc3KZmZw=nKo%JVP)s=n@}^ zW}D$oHxD_Lt3T15xfbxO*r3m%}yF-uP<#e<&NNxrC4giU4f>~TJui+{>91dgD@@LIRCXFD+jru z>4cJ)Ue6v6tRLYwXZmA^65(hd5joGz>WoF6FC6v9DZoG2H3-i+!bkpo$esGfx-3e) z)cG8(ny|R*8ceo_w|5OxzCU#4REIs*EZmx&FgPP2K9E3b8TIj|NtJ`0_j&H$3C*D! z%)2MQv&38DR+cx-GB|bOge?_YUU_#nzk7@?_A{o-(eFy1I6lKN&>#O9zEJN8Fu# zP1;u>=djVK<8`TpZy7Qz!wS!>>a%mwEXl{kKYK!2jC zT4j)2skt%I!p)mKue>a2dyENbmN=hTVTYT2pbb>rKjhneot8#I*xAZ^qUCgd+;-sK z5XeX{hahc*Zc}#%L})N`QwM&#b;*71@H(yVkuhh}?Q&bePPzKcw2r{?qR>{zl~UpG zu0w(_S&>M&F()%Du^IPri&LC;R}9)PBWT7D#eBB=?r{H|STGRx?%*HEw28W_r8~va zf21WIgthrcUn15wKc=*68X9G5eoWh=@`RbDEnrrbe!UOO6Uz&G{a9!sg#Z>lRuuLI zFpe(Q)G^YM5bD=xH}3>Z^hYm}(CC8|WtO;w?$~aCVtO_N{)&~jqG-#kwSOE1FD1O{ zH)GY)!>cY-8xKltL5KvR)&PWxwnx}nF=%;SsNZLVzIDFF%@AAK)oGS^PrvQJoKWlE z?W0$FwT8QV1b?aKbi6gx|1$z*L8fJ-mtQ8KvT?~s z;uJFE6mrScJWPUBm(Tl#e0zQ6HRN(YdX7<+wVF){LXZ%91r91~XfVAMyGu5ihy$%2 zroY8zNou^Ezdd`zaITNsp;s#grCWwX`u{^mxc{TqB#f|rJ2-fsVxu1>+Z>QL5WQf) zPyDc{|HbdZ`OqfNPp1B8L6%(4DT5+AQDYkBge&8QQ?)htQ)()61 zF^@+*!)KiA#Wb0Y*MFNneS8PMSb`9oLrkSliNCY=fevw-XzVbO9i7%Y=aHon^PJD3){X}P-x1^}-;u=#-EZ}k`#x~q?X#7#eh zRw$@B8yW}Ul4lI9T^oXCG-nBmLa%~&5{2{b*MKbEcynmSBD;{tU-mj%(WiP?$g~7K zs28;dsc*He-7r@|kGCYA+V6XLFLi!Ps2ZO#b$w_ny+TtLn8d+VxL<4{$M%MmD?=6Z z#@M^ID!57kr1iBmHZgvqlUz`t1n$r9!y;cN*!mpqU;Epd$$kDdX?ezcbt`D8_Y%?S zat$vQ$cL1Aa%4f0PviT&ElP_3s1GeF3*`FcBST~x-H%trVnz&b#TPv-ueu#xZ6Q~IHwsk zt#_^mp@LbuGQ3*S&-9wG%^BQSOA~dv*I|O$hV=>!muj~;G1

v%c#{i_;*8*=NrCK>{SQ<90_5vWPLDJp?02g_rm#caEsv5iP2fy z1OFk+i2f}MV_57TpMcW#(^B-j7M zK|5Ilzh;W4vMWsSOMVaz7s!W?=XZvg;f-H2gYa2_y!~GifA23PzOb)AUPZ$eu)I;byVR zrL2A_w`KVJD}lMn>y}?TExD@;X{&TaT+5g!Jz^wNf-cL6ivTfa6aJiY{d=$jv)sqV@w;vbDoxsDq3bS*x zur+q;?)JLSE$53_DbW=Mlmg)fzumCm=L>~jPxwsGO^u&>08BVjGjX;%4q~_1@NxZ| z^h0KaOG{OThHt}6idc;^E(8RaiiOQvofIv@?2V;tZDpL~aK9~)#5wh9W1xXJ&v;%3 zo&>s4e4PjT-;%g6CvqS65sx#Dm=_)6yEln%-S93*4vZMB@!U!p zS~vocz)ao7>U42F7KYGma;Wztot#v3IG`}(sCg4Iby|91F4gy@%^Oc1kHO3iYIKvm z5TFCHxYPkBr>3s25~jv(y-}x|Qa`15+o(*0D=o8Ijc2hGdU0qM%g{M=rv(28AfDQ& z6WhKRby{`QWVFoY3^xz`hGkYwAthUQwkoaa4n@BfHogE3=5q>3PZ(_r#=lw0GA zr7xl+3I-7CrhOgl|3*;>uX@k=X^@THSsjGr1MpF<{1-@W`I&xB8JY(15;QA=Z}6-@ z=)d`qm?34sCo(OWV{BKtSU^bWDXK?*m z)Tkfo6E#Tf?6)Ic-`fq*N?NG2i3s*TCYk^u-xNN2Cq4(X50X{{2H+Q^a`f9fgXz67?x5 zS*pfeUfVt7$4=uhWH2!GXYUbOrW8+>Xj(Ao}29fks6rl z`sFF3#OzJvj5FS$4r+LE9mHrGm)A$W|F&Plz1v4(pkGKvU2arKUkx#mCrrO*()Rpo zH>ZRQN1a?CH(sH6_eFu7>j@lSnmHC7noej-;8!b?a-K%XBp=?O)@4 z8C#%oOv?io8tj5y>!N@fv{4ds4&YC5feXMR!rN)r+~gU(lLYhV|G*rHKZlbvFUfl! zwrF&`>Q!PESnqp%wtC{fGhwddZZ7C`SHuD)s6!$t zr}?O;y$oDqGaT_6&ry@=4zQ|VHg&hF%Nzr{jekx}=3t|BIY6L^QMwTh70DiRu4=z+ zsI6#`cjoqqiN`;zh_#hf33tZ6xtr&w)a4W}%NV&`6$7;qO=?3Y4tjG83=)vhF_513So3 zT~{#}a=|ySi5W`un^W!{A5`Rmab|j1SoQ3CE2Zp?*0{5h!K|x^2!$gQ^?@Y59873p z`X2pFBL=Xpa1iSHNDxZjWPEDy@tQ%$U#>{-^lu>6JnbdbBni{KI~DHe4!s8m6NM)_ zcOe&rn&8c3yF}%8y^G%Sgn;6;=9xM}NqFBXoDS}8V!CYo>Ose!9eDg%4+X??ga@t1 z7cLv%NyO6RN57PK{Fwl)PQLNs5ZpAQS#xZ8|MCPZ^pftti|8gtm=}DB*gJZy+EJBnEfjavi30c5K22i$LC zJ`|-$C$(#OB!b}H5V>Qy>PHig^(wHY{$afO5Kr)OwQAq8{v(EtTXu%RC6KA-JfKFf z*3kg5ZI1C_Q&$l@N8;2c5j24kH1mBy6P4(t01_75vyoyDrhJl1VSZLkao;?b>Ndh8 zjeHe=NvX?KE$ovHzm`$jX41>3Robbq>uXnGLEsS4d*b+T;8452K;DFgib!GQ1-(W8 zE`?M-^nITx-cZ;*3C%&?guzb2V3u&U6BqKz6#2`1SAk++zNhB5YX2xvp z6PV-ivugdpgq^@A=~b3?+5<5 z8RO`EL06SssEsM{F97LRv)A-3aQ$5v0>L{tfEH1+EPx0LX1P~59$UZKFS(@HoiTMJ zUp>WK6!yHe$~J4kJT z{Z|2o`LMHx6H*WLDuIJp+OpXNmk!c?ceDq#5Fp#=3-1U#>W|n$L2|saG}Tf`;Fj+k z2|JAk=|qI3S`%14(x1Ksvo)*_^(u>fD{+TlkCyy@!A4vym(Y1;E_9QzmrhM!AwTdF zR%=aBo9gvHs zg-dF34h_7JWE*;uuLxZi^DVY(Zt`Q73(LDVt?}>V1cB8L`R~D7oBp6L{UaK{;~O>? zJgIp zHZX32t(K{sI_Fa9EB_m?)v6gRKG<@#EV1aV)8!*SdnvUhzOeSUOKJ{m?Q5E$Q~!J0 zHpzbA>6GbY;kt6urr%N6FeO!t-vJ0Gd*Me#*XmPGLz-?xym@aHiKcC67p$5h`3zH*KP#&vrR;&n`) zLVZ&75N(f!-4eE|Z@i_+k9{$GKucNL`Y8wAOIv@(fwy6g+lQ3slOp5YP#}MR(VO=7 z^$wW#hOrQ~82PzYLV-r-5v$NFdMt5y7rSK`ksfSJ*tFI$$GA!^){6r1d0<5a~jif=Z4UXgsw z#q;D&Sn@RQcv9g@nT4*5c|27mR2w~sEmI4RSlhraVGAjEW)AVjqU!!BcTYegF}5fA zj?}xyw+<#_NIiv4TEIgp6PyBd5tXBDAx|kb(NG1a$bH=$yCG3`fHo$e-64)*8iU%4TB+Y}hT0MmFq5xt)kG zUw?x;yNf36a_=UuNxMj>u^lz(Yj}_1H)%0a0~_GdAN$viU<-^fZ&DLWXf?hvsKuTl zW)Ez+$unNDvda7-y3NzCA%h>*R<-9109q=PxnD;v3NL#$Bex0AG03xomlIpEJX;hs zQ{_H42M}q?J?rs|AF}0P{BJ}n7)ePjDZDe*L(YA+p{jaaVoSU>#jdL{yWu*KtK_Lg z!yJ6WPdQTuGG~0#nGIxEpt}v|uE|hF5WzHAmDtiBA3`&_pComsEw^pz=c&aWtQ}CT zN1h|RoU$oC$OR;e#I4reJu78i3@ruk(637T=92Is$ID#irs&LMEv+|@*BOMB6`P|k zGsrvzC&(=Iq#m%tQFYp`Ng+o{C{+iG9<1u4QuJs2X{X8=-uE#*vUEY==f{0m5=0)J zWlb~s+JV2wymfF9{xTjRO2Uw$7x5I5ENPeiH2Xv;PM4o+Y&V4nu-t^V&94>-!LTir43uc5}MjT-df?zCM7KF7QFv zL)9K*!cMMwlk}1Yb4O@-(~>947f4e5lrywFog+NtSwJhSnbJ7J`L~MstDmgL`~P5YIn z7?WLa`N9=Ig!NcS(7Mn_;3&4WB5{p(lBEivbC$-0(0h_#LB7ie3c*;j(Zy?tVZ7;b zj4lP#NOQbiL1e%>Mgy7T_ku}is)Sr!j`mN0f4RkLZn3sB8K)IoF8X)#E5=xG`FD`H zQ3>CS7%{ynI(o{c>-}TfYE@2S^oC(eM(f~VYRSXo#Gx-Uo6ZsK6iSE23bxp~Z0ADq zE~9Q9I+-0d9mdZgqaS1Y5M_ER&tP|&1n(J$I-`Ss)JLR>_2_^Zk5hBG9U4Wp7j*VR zJ7y?=w@JsgYUz|6)ZrxWH9J{yEkECfEl2p-=SC%)L%S96-DKROi0|Q9#wp8^7Y}h) zqgqt=DrW>sh4rli&q`+AFyoaZ-E&252RH++bP8PQRdV9j$5P9t1k7-zM2&ZN*&P)L zg_Hic*m?$QL#MCmcKdKl#GK2`cqxAA;L7;)eG|?MZeU`f{^an9<0&d;NHjgyNp1^} zemu)(ZLs5XWTOW`0NOf@NdNT#9Dc((Ec9Vb!9*`h4nw6)s29K~Fb?Bf`duKu$f1Tf z9BLT&^|xNzZX%0V869|>)pC877m08Z<| zn)|qG+AIl{LAm1GChDH|P-p@_86VWaXUGxGb!GvIQenIAHq5OQ=Lv5|e@wR|bSH8+ z23<3-Z^4B1UEW!ez_eBFN%UU3*}aSUjee=Z z=UokmON2*h-x}(yH}EOF7f#ZatP(tU1;l68p9_-KHVX@a6Kf*lU+eb5KH94olU3-=xv8qcd|tM|?3)w9%Pv%SNyS62$xz#<6se7ePuwkO(m zfcAsIB(P6SJ^IuT9kPVvti=EOG5f9Hwo?HJVpFx+U-bL$`$Rs;2Sp9=s=pS#xj0{i zA6@@hJV2!@Tp#$QJY>5HF3+in#o=&hT;1#G7ae}`|DnZv=5B&_qu0_+^xjxLZt1no z>o>pW%fWn#g+2ajfsZWBdyUTJX3sdnB`qiX_*|R`$yDUq4)^smcVllT2XV$6(~Q+P z&PS0NP-@u-F+24i<2O6q6fekEcLu;$5F)4jkY~WfIX{F4@b~*596VEwAz=EpD1cK8 z5Y_kL2*i-3*051+=!cCc)S7Z=^7vEcpJT8W$XnC0Mv|z};#hoTe`WUsMmh=k?;YHq zmyGlc0VKeBq$7177Aq1etxq5=>O3%h=tDM47w4=KXIxXkmq zvME|0gw;p&5#cefbLLEmq77~c4Zv6#+}5E)7djDF2MbLPk?>$KpKeZTwAzJwTw z%hp`ZSZaRed?A6w9fZ)_S#Y@<`0%tSafllJM?rg6{M;Y$4V@3S`RyBP zJg%x+F6F39raeM<<5D|uc7gmi1&^L4<-2EiSuouZuZ%@d2B99n*2^~H7>qV3c$!@w zwm3LrroUI|n$FG^T)c!Hpf`snnA@QWL0vn8@aLc^_bInBc*8wG{v4@>^C75KaKn1P zfKUaC{zE5JtT|itV&V4_%ZG$u8{uO+EMu?29oo$=WR4IuF{_LAJ`OCfWE_NCl3cXm zI6VyE)t{`1CAEh*+`8Ay)d`(LXG(|+Kk(vU?=}Q;MDBsq1Z_AnjOZu$4*t)f==*r? zd-F>Jy25edg-a+-jF1-7Wb0oTb@zC;8~aCz#t#O5CF4cf_9^}^izP#%{)Y5@cNn5> z_Cs;P{h6kS+g#y@@s!}kvC24C%$=D7SZ6p`d>2%sQrpbW4v1-|H#kpC2Tq)Wp8!(sK}A%%t4y>KnfP^i;BfkVjX9!H37$Y*!aLIoAR zG)?p1uqVD-?;{z+vm~3v;)!jv8%kq#<#Tkpi5dW#VVg0>v^UbgSQ?|tk5(&do_f)t zghd_PV_jjfSRBpGt{g`f5J-^+$+2j}zD{j((|=q+^NZ)wS`;JH&cAq3L0F zo?RB-31&7yXLiy#B0v@j6odGUy?&CG5DNiFQ{)Fo#{(lrLQayN#{MI5Vvb_O#hS^$ zn@uN|zW2nE6d2{e|HgVR*^_(N^o>_D)7wjbO7JX^kt{A4}g8~MRE#QRg zKH+4cAG%%JqEBzSQ`yMFl`C?tcB+Gm6N(qz+I<=K%=&|A> ziOYs8zg8M*95p@^^b!e+K~NoenotWg2v#$!+w@bRFgHqv^(V&r5j>!#KKSd@l;Yxh ze;%KS(iF(Aq7v+lU9nkx`lKTE*THi2PX+ShjEzV(2Vhcx#CrT-Vf5{e4i#-w%#(ht zYQIz+!aAe6j>4ZVf+`QF$izUsixp}j$qcG9JkvFGHtL0?oo^z~ zH_YvFP%s1b9#J0-P<7?DklnejQ=vM;+yJPJ4p0Ry(RccT?im!q*X{Cx>VTbh$YMcW z>!l;VM0E=F!L9`Lp}r-skoc2Z>46aeDlF}S5rO*r&I*ht3Hx3uf7R(W+!XMs4wUs8sS`>G+lEUG%sdmWOtN4xiD3~juw;PT!0-*6nQ_bH}AOshxP zFfdH_5H{d=c?lcUYz^@sBG^BLurVQEPc2wZvx?s2rVWIA{p>JLnV#($PuS7>LSde4 z^8pLM?m5NZ$QHH}Zvk8LI?2z#`AtRk)#-l(w9)U^_{?5 zT&rg5h&AT<8=lgtXBo<7XEtiKT?%AXQG-LCmJriaYd>G!f3qBLxEva%{?Z7G8D|h~ zIql-2Ur6$R?0_w20A$zS#g`Ub%DzG`x@`rQZzS4}2(8FYhWf^WOQnjKW1$0zJ@6d( za;qRri6^vT`)-N{iUPgL0oc#|Yx%e8zVx(WvxIRni1e0=-6~y%PKBdCw2rh^A*>_X zoh*>;O2?sNO22oaU*!ZfVAHP|TuY;}esG?4?A`J&lomgY9Yiz#bkqJ(3F@kB3<$>YX4|$iN&`YN|Li@u&u& z0teTkzF0RlWz2+!SN<+-%=p5FoKQ$%ZYlJZa+$C>*sHibuHeukw7~0Wrx@hf?TJ-# zj|V~k;R^ro>&N%Ww=f?2o)DjiKRPJki2qD-yA;E=p-HV0s4Sms zZj+6h*m*B(f_!e+nPi`xgc)qB0Y| znHg^zaO9}1>{*`#`c2fm+1}x>_iGXA{Vv7NemQg>jl?@TcESO*=^k)*&`9bH9b6dlT zn!`@;uk3{2GfoQA9~~#aPTe2fAW#zyw9>&096Qg}sAt0ZcVq7amfnizE!dpILh;YN z{=DPquRuG>Xg(WF3gJeRCh)Jk+b3<~an@dga=3@;z-p9ng@ zl}b#so$kTq2@CySM()A2;T7(|34+}-mZr>q#*bCP!@$$WN=T)ewTDWnXCbCfMV7}o z6SVgU9p#E`IFUUc?;LW?G&_L}B-K&e5H2(JVW^X^S)sk2J_eZEee0X;3e}N+qw`13 zQ?`>UL3=xDh%B>k8rGu7N^pndC@r2P&v??^I}>L#*zYJ3XcloqQz5SC&-fX<2Ui6^ zI_sz@GzVR5_pxKJ@Qnlf^MJw@{oT$~I%!GzJA{1~Q;ud@a2WDp!!)mQ<~8Po@Co;~ zikYUM;KM*Tow+PUjL~Xu)z@fkE50`_yWZ#&Y%hMFDJGjjg_$_Fw*3X{!GzDPeaB7> zcyqUO7+J$9+PVS|Cqmzaw_rlyEtt!?8rzl{UA2HM7-s0v=cNu{0dj5fH4nh@J8F97 zJsrWXk+h%Wvm|I(9L=EnCpp3!h3mdqI*(pPwP-)F9^SR=G0;1S@E|siS=2`)gn_(w z-4Gne|JeaO1B>pghZr48@H$0Ku!8!R>AwF=n46`VKVeYZq&aGO`n|EVYlMZ{vt;CJ zNy#p! zc)iAh(IMg%Qs@Xb`_`w4@!k@p@q~@L(}u@`R1nwU>U{uB@#DgHnHIrIVc-25h5HJ# z>iXnAdF%o3ILIn;DnpfDAfI9t{roq=QUWZItNS@zmv5|#;I1vY=^bG5mViq&EppK- zkWCl8>VG~VoZLBv-$4 z?T}9BiP$D#ZCXM?XEnL~!XIs?rxY%FGV}Buh36knv6zFyz+X)DUaI(vnwt@f_Dk@z zrlfv7!pMqM_Y|jRiD^0`Ci2u?olO@cvQKmymli(OPbs?ePc=T#0mB!u-XGiJ53odL zTs7eE5NCFZ_)G^5^bs+5>8`zvuM3gl;k8=NeK62-g|TkrMsw6>HcPy1sc1`x0}diS z*Pwjk=9Hl^1De0}Ni(57wJxD17AF;J8k}M#Oh6pmLeDF;PL7U)8xpl4RoqOY{h>_p znbaf0+1V&>`3sV%mKP#Fl^~aPXVNeZGl4y%Tiv76PDD|(B&xLOYkIN$LZG(#w{=Qz z)CLl5drb}+r^+A(WW9-8&H? zs>X$5^EolDoBJyrPQ=-W7ozEh4T^Q@*`2U3K}Ih{@0;BL6+zZQdlg-(;h!mNQzbQj z*%c3Guvl0~7$Xq6{=O3!I0S zHNR!E#CpSa?kNg-_IL7?>6U&=td)CH4n!I1c{-kmOF;FALq+1l3kkymN^$aJFW{+W zb(Q@KkH)7aSm=BPrvL8X=GDM}L0xS4PZ+3=VBpE3;N@#9@hNw!I__4O_Vx~3D>1fm zNwmdaaGGX12XAtg4@tII+%*U7Bp&i6gP`MwH2-~Y^8*M362|s=a8uY&tXmC_6S&lg zF?qOus3@&!L`op3QDyT|9D~JwFK%Lk>b zFef(8j;e{(j^*4?(eTNBH=ud6)au0w;o&sKfu_|twEc%PPfN3y3-|PIjaU3UF&Gt) z2uw8jh2PHlhd(00r2H~VPRyPw0tIwP5k*YJMZAn4dN!nN0?0z*_7IS|TozLx@A+?% zE60Sxzpqt}q@Qpx6dQi0df}nWg#JNX2}PIN$wG39XxlG!Glx%m@gI?E}&b3w~ZD!|^=fQyP>$_rXxqvFNplU{hXE&2?ITMD97AR zfx~cKN|nfI-LJh&C@HRvD~}79yNQMCiL2p_t{!0-=&``wDHRqj=@x9x`0cQ=txt_^=|-PTe39)23J|8@z;B2e*t@e&NV;S0R4jNaXW{ zOrQ^o2@`q+d8vS8VbYfiBg%Pw$h?B+ZAXUzC%Wk*9PAw(WA~Mhrt?(TU{=_~jjF zC;FuiLpQHYlN6EBBdT5*wbxuZ(E8>5WOTjG%J2v88AR=MZKAPuG_|_>? zNGr@;kq!kRO&(=2pUesj210QC92c`;j3?EpZdTc6LLRHKW~+u4>$usveY0^DRyT3> z>JkAPUh3JjzYA1&@#2-%S5L172Donp<85TX6Cl@d%Ds~f0nJ3g*R9;DSAW>JzmP`GWLS4TxDrOQAzM+vO;PWy8F-kLjBbZ;Fm~JS&Y59x<=#aGF2vQV+Q1PP*^xhz!4lu2Z}EX`VdTD| z2rjesy>tk!eR&XE{�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�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

av*cNbGvD{gdHtT8e@5Y;#3i&p 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 z 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 diff --git a/sys/modules/cxgbe/t5_firmware/Makefile b/sys/modules/cxgbe/t5_firmware/Makefile index 3b857707940..0575e6da42c 100644 --- a/sys/modules/cxgbe/t5_firmware/Makefile +++ b/sys/modules/cxgbe/t5_firmware/Makefile @@ -17,7 +17,7 @@ FIRMWS+= ${F}:${F:C/.txt//}:1.0.0.0 .endif .endfor -T5FW_VER= 1.24.11.0 +T5FW_VER= 1.24.12.0 FIRMWS+= t5fw-${T5FW_VER}.bin:t5fw:${T5FW_VER} .include diff --git a/sys/modules/cxgbe/t6_firmware/Makefile b/sys/modules/cxgbe/t6_firmware/Makefile index 4891cbed245..6d175d54c7f 100644 --- a/sys/modules/cxgbe/t6_firmware/Makefile +++ b/sys/modules/cxgbe/t6_firmware/Makefile @@ -17,7 +17,7 @@ FIRMWS+= ${F}:${F:C/.txt//}:1.0.0.0 .endif .endfor -T6FW_VER= 1.24.11.0 +T6FW_VER= 1.24.12.0 FIRMWS+= t6fw-${T6FW_VER}.bin:t6fw:${T6FW_VER} .include From 702547720ca01437081fb1b6f9eb281c9541021b Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Wed, 12 Feb 2020 06:52:22 +0000 Subject: [PATCH 091/144] Remove sparc64 specific bits of the man pages. --- share/man/man4/cas.4 | 23 -- share/man/man4/dc.4 | 22 -- share/man/man4/ddb.4 | 6 - share/man/man4/gem.4 | 23 -- share/man/man4/hme.4 | 23 -- share/man/man4/le.4 | 53 ---- share/man/man4/man4.sparc64/Makefile | 22 -- share/man/man4/man4.sparc64/Makefile.depend | 11 - share/man/man4/man4.sparc64/auxio.4 | 80 ------ share/man/man4/man4.sparc64/central.4 | 60 ---- share/man/man4/man4.sparc64/clkbrd.4 | 88 ------ share/man/man4/man4.sparc64/creator.4 | 88 ------ share/man/man4/man4.sparc64/ebus.4 | 122 -------- share/man/man4/man4.sparc64/eeprom.4 | 130 --------- share/man/man4/man4.sparc64/fhc.4 | 82 ------ share/man/man4/man4.sparc64/machfb.4 | 180 ------------ share/man/man4/man4.sparc64/ofw_console.4 | 126 -------- share/man/man4/man4.sparc64/openfirm.4 | 300 -------------------- share/man/man4/man4.sparc64/openprom.4 | 240 ---------------- share/man/man4/man4.sparc64/rtc.4 | 88 ------ share/man/man4/man4.sparc64/sbus.4 | 79 ------ share/man/man4/man4.sparc64/snd_audiocs.4 | 87 ------ share/man/man4/pcm.4 | 8 +- share/man/man4/smp.4 | 2 +- share/man/man9/bus_dma.9 | 12 +- 25 files changed, 4 insertions(+), 1951 deletions(-) delete mode 100644 share/man/man4/man4.sparc64/Makefile delete mode 100644 share/man/man4/man4.sparc64/Makefile.depend delete mode 100644 share/man/man4/man4.sparc64/auxio.4 delete mode 100644 share/man/man4/man4.sparc64/central.4 delete mode 100644 share/man/man4/man4.sparc64/clkbrd.4 delete mode 100644 share/man/man4/man4.sparc64/creator.4 delete mode 100644 share/man/man4/man4.sparc64/ebus.4 delete mode 100644 share/man/man4/man4.sparc64/eeprom.4 delete mode 100644 share/man/man4/man4.sparc64/fhc.4 delete mode 100644 share/man/man4/man4.sparc64/machfb.4 delete mode 100644 share/man/man4/man4.sparc64/ofw_console.4 delete mode 100644 share/man/man4/man4.sparc64/openfirm.4 delete mode 100644 share/man/man4/man4.sparc64/openprom.4 delete mode 100644 share/man/man4/man4.sparc64/rtc.4 delete mode 100644 share/man/man4/man4.sparc64/sbus.4 delete mode 100644 share/man/man4/man4.sparc64/snd_audiocs.4 diff --git a/share/man/man4/cas.4 b/share/man/man4/cas.4 index 6fbbfcfcf29..c205c6fbe4b 100644 --- a/share/man/man4/cas.4 +++ b/share/man/man4/cas.4 @@ -105,29 +105,6 @@ Sun Quad GigaSwift Ethernet UTP (QGE) Sun Quad GigaSwift Ethernet PCI-X (QGE-X) (part no.\& 501-6738) .El -.Sh NOTES -On sparc64 the -.Nm -driver respects the -.Va local-mac-address? -system configuration variable which can be set in the Open Firmware boot -monitor using the -.Ic setenv -command or by -.Xr eeprom 8 . -If set to -.Dq Li false -(the default), the -.Nm -driver will use the system's default MAC address for all of its devices. -If set to -.Dq Li true , -the unique MAC address of each interface is used if present rather than -the system's default MAC address. -.Pp -Supported interfaces having their own MAC address include on-board -versions on boards equipped with more than one Ethernet interface and -all add-on cards. .Sh SEE ALSO .Xr altq 4 , .Xr miibus 4 , diff --git a/share/man/man4/dc.4 b/share/man/man4/dc.4 index ba033cf2e25..a1634b84ead 100644 --- a/share/man/man4/dc.4 +++ b/share/man/man4/dc.4 @@ -262,28 +262,6 @@ Xircom Cardbus Ethernet 10/100 .It Xircom Cardbus Ethernet II 10/100 .El -.Sh NOTES -On sparc64 the -.Nm -driver respects the -.Va local-mac-address? -system configuration variable for the built in Sun DMFE 10/100 Mbps Ethernet -interfaces on Sun Netra X1 and Sun Fire V100. -This system configuration variable can be set in the Open Firmware boot -monitor using the -.Ic setenv -command or by -.Xr eeprom 8 . -If set to -.Dq Li false -(the default), the -.Nm -driver will use the system's default MAC address for both of the built in -devices. -If set to -.Dq Li true , -the unique MAC address of each interface is used rather than the system's -default MAC address. .Sh DIAGNOSTICS .Bl -diag .It "dc%d: couldn't map ports/memory" diff --git a/share/man/man4/ddb.4 b/share/man/man4/ddb.4 index 70d61f1343e..d976cc5b1c4 100644 --- a/share/man/man4/ddb.4 +++ b/share/man/man4/ddb.4 @@ -1477,9 +1477,6 @@ event. .It Va kdb.enter.panic .Xr panic 9 was called. -.It Va kdb.enter.powerfail -The kernel debugger was entered as a result of a powerfail NMI on the sparc64 -platform. .It Va kdb.enter.powerpc The kernel debugger was entered as a result of an unimplemented interrupt type on the powerpc platform. @@ -1487,9 +1484,6 @@ type on the powerpc platform. The kernel debugger was entered as a result of the .Va debug.kdb.enter sysctl being set. -.It Va kdb.enter.trapsig -The kernel debugger was entered as a result of a trapsig event on the sparc64 -platform. .It Va kdb.enter.unionfs The kernel debugger was entered as a result of an assertion failure in the union file system. diff --git a/share/man/man4/gem.4 b/share/man/man4/gem.4 index 44e06251ea6..c8a396d9f95 100644 --- a/share/man/man4/gem.4 +++ b/share/man/man4/gem.4 @@ -87,29 +87,6 @@ Sun Gigabit Ethernet PCI 2.0/3.0 (GBE/P) Sun Gigabit Ethernet SBus 2.0/3.0 (GBE/S) (part no.\& 501-4375) .El -.Sh NOTES -On sparc64 the -.Nm -driver respects the -.Va local-mac-address? -system configuration variable which can be set in the Open Firmware boot -monitor using the -.Ic setenv -command or by -.Xr eeprom 8 . -If set to -.Dq Li false -(the default), the -.Nm -driver will use the system's default MAC address for all of its devices. -If set to -.Dq Li true , -the unique MAC address of each interface is used if present rather than -the system's default MAC address. -.Pp -Supported interfaces having their own MAC address include the on-board -Sun ERI 10/100 Mbps on boards equipped with more than one Ethernet interface -and the Sun Gigabit Ethernet 2.0/3.0 GBE add-on cards. .Sh SEE ALSO .Xr altq 4 , .Xr miibus 4 , diff --git a/share/man/man4/hme.4 b/share/man/man4/hme.4 index 0cc2aea1ff0..33f8f6819ea 100644 --- a/share/man/man4/hme.4 +++ b/share/man/man4/hme.4 @@ -105,29 +105,6 @@ Sun PCI Quad FastEthernet Controller Sun SBus Quad FastEthernet Controller .Pq Dq SUNW,qfe .El -.Sh NOTES -On sparc64 the -.Nm -driver respects the -.Va local-mac-address? -system configuration variable which can be set in the Open Firmware boot -monitor using the -.Ic setenv -command or by -.Xr eeprom 8 . -If set to -.Dq Li false -(the default), the -.Nm -driver will use the system's default MAC address for all of its devices. -If set to -.Dq Li true , -the unique MAC address of each interface is used if present rather than -the system's default MAC address. -.Pp -Supported interfaces having their own MAC address include on-board versions -on boards equipped with more than one Ethernet interface and all add-on cards -except the single-port SBus versions. .Sh SEE ALSO .Xr altq 4 , .Xr intro 4 , diff --git a/share/man/man4/le.4 b/share/man/man4/le.4 index 4444a8148cd..fd8e12e55cf 100644 --- a/share/man/man4/le.4 +++ b/share/man/man4/le.4 @@ -244,59 +244,6 @@ Note that unlike the driver, the .Nm driver does not support selecting 100Mbps (Fast Ethernet) media types. -.Ss sparc64 -The -.Nm -driver supports the on-board -.Tn LANCE -interfaces found in -.Tn Sun Ultra 1 -machines. -The -.Nm -driver allows the selection of the following media types via -.Xr ifconfig 8 -with these on-board interfaces: -.Bl -tag -width ".Cm 10base5/AUI" -.It Cm autoselect -Enable autoselection of the media type. -.It Cm 10baseT/UTP -Select UTP media. -.It Cm 10base5/AUI -Select AUI media. -.El -.Pp -When using autoselection, a default media type is selected for use by -examining all ports for carrier. -The first media type with which a carrier is detected will be selected. -Additionally, if carrier is dropped on a port, the driver will switch -between the possible ports until one with carrier is found. -.Pp -The -.Nm -driver also supports the following -.Tn Sun SBus -Ethernet add-on adapters: -.Pp -.Bl -bullet -compact -.It -.Tn SCSI HBA and Buffered Ethernet -.Pq SBE/S, P/N 501-1869 -.It -.Tn Fast SCSI and Buffered Ethernet -.Pq FSBE/S, P/N 501-2015 and 501-2981 -.El -.Pp -The -.Nm -driver does not support the selection of media types and options via -.Xr ifconfig 8 -with -.Tn SBus -Ethernet add-on adapters. -.Pp -For further information on configuring media types and options, see -.Xr ifconfig 8 . .Sh DIAGNOSTICS .Bl -diag .It "le%d: overflow" diff --git a/share/man/man4/man4.sparc64/Makefile b/share/man/man4/man4.sparc64/Makefile deleted file mode 100644 index 06d99c00a29..00000000000 --- a/share/man/man4/man4.sparc64/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -# $FreeBSD$ - -MAN= auxio.4 \ - central.4 \ - clkbrd.4 \ - creator.4 \ - ebus.4 \ - eeprom.4 \ - fhc.4 \ - machfb.4 \ - ofw_console.4 \ - openfirm.4 \ - openprom.4 \ - rtc.4 \ - sbus.4 \ - snd_audiocs.4 - -MLINKS= openfirm.4 openfirmware.4 - -MANSUBDIR=/sparc64 - -.include diff --git a/share/man/man4/man4.sparc64/Makefile.depend b/share/man/man4/man4.sparc64/Makefile.depend deleted file mode 100644 index f80275d86ab..00000000000 --- a/share/man/man4/man4.sparc64/Makefile.depend +++ /dev/null @@ -1,11 +0,0 @@ -# $FreeBSD$ -# Autogenerated - do NOT edit! - -DIRDEPS = \ - - -.include - -.if ${DEP_RELDIR} == ${_DEP_RELDIR} -# local dependencies - needed for -jN in clean tree -.endif diff --git a/share/man/man4/man4.sparc64/auxio.4 b/share/man/man4/man4.sparc64/auxio.4 deleted file mode 100644 index 9c5bbe154d5..00000000000 --- a/share/man/man4/man4.sparc64/auxio.4 +++ /dev/null @@ -1,80 +0,0 @@ -.\"- -.\" Copyright (c) 2004 Pyun YongHyeon -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $FreeBSD$ -.\" -.Dd June 18, 2005 -.Dt AUXIO 4 sparc64 -.Os -.Sh NAME -.Nm auxio -.Nd "Sun Auxiliary I/O" -.Sh SYNOPSIS -.Cd "device auxio" -.Sh DESCRIPTION -The -.Nm -driver provides support for the auxiliary I/O device found on the -.Tn EBus -and -.Tn SBus -busses of -.Tn Sun UltraSPARC -workstation and small server class systems. -This device contains miscellaneous system controls, -including the front panel LED. -This LED can be made to blink by writing -.Tn ASCII -strings to the -.Pa /dev/led/auxioled -device. -.Sh FILES -.Bl -tag -width ".Pa /dev/led/auxioled" -.It Pa /dev/led/auxioled -Auxiliary I/O device node -.El -.Sh SEE ALSO -.Xr ebus 4 , -.Xr led 4 , -.Xr sbus 4 -.Sh HISTORY -The -.Nm -driver first appeared in -.Nx 1.5 . -The first -.Fx -version to include it was -.Fx 5.3 . -.Sh AUTHORS -.An -nosplit -The -.Nm -driver was written by -.An Matthew R. Green -and ported to -.Fx -by -.An Pyun YongHyeon Aq Mt yongari@FreeBSD.org . diff --git a/share/man/man4/man4.sparc64/central.4 b/share/man/man4/man4.sparc64/central.4 deleted file mode 100644 index fcde31da131..00000000000 --- a/share/man/man4/man4.sparc64/central.4 +++ /dev/null @@ -1,60 +0,0 @@ -.\"- -.\" Copyright (c) 2004 Jason L. Wright (jason@thought.net) -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -.\" DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, -.\" INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -.\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -.\" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -.\" ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -.\" POSSIBILITY OF SUCH DAMAGE. -.\" -.\" from: OpenBSD: central.4,v 1.3 2004/09/24 07:03:47 miod Exp -.\" $FreeBSD$ -.\" -.Dd June 18, 2005 -.Dt CENTRAL 4 sparc64 -.Os -.Sh NAME -.Nm central -.Nd "Central host controller and bus" -.Sh SYNOPSIS -.Cd "device central" -.Sh DESCRIPTION -The -.Nm -driver provides support for the -.Tn Central -host controller and bus found in -.Tn Sun Enterprise xx00 -systems. -It provides an attachment point for the main -.Xr fhc 4 -.Tn FireHose -controller used to control board level functions on the host. -.Sh SEE ALSO -.Xr fhc 4 -.Sh HISTORY -The -.Nm -driver first appeared in -.Fx 5.1 . -.Sh AUTHORS -The -.Nm -driver was written by -.An Jake Burkholder Aq Mt jake@FreeBSD.org . diff --git a/share/man/man4/man4.sparc64/clkbrd.4 b/share/man/man4/man4.sparc64/clkbrd.4 deleted file mode 100644 index 677648ff49e..00000000000 --- a/share/man/man4/man4.sparc64/clkbrd.4 +++ /dev/null @@ -1,88 +0,0 @@ -.\"- -.\" Copyright (c) 2004 Jason L. Wright (jason@thought.net) -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -.\" DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, -.\" INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -.\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -.\" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -.\" ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -.\" POSSIBILITY OF SUCH DAMAGE. -.\" -.\" from: OpenBSD: clkbrd.4,v 1.2 2005/02/21 11:29:36 jmc Exp -.\" $FreeBSD$ -.\" -.Dd June 18, 2005 -.Dt CLKBRD 4 sparc64 -.Os -.Sh NAME -.Nm clkbrd -.Nd "clock board" -.Sh SYNOPSIS -.Cd "device clkbrd" -.Sh DESCRIPTION -The -.Nm -driver provides support for the clock board found in -.Tn Sun Enterprise xx00 -systems. -The clock board has three status LEDs labeled -.Dq Li Power , -.Dq Li Failure -and -.Dq Li Cycling . -These LEDs are also mirrored on the main front panel. -The -.Dq Li Cycling -LED can be made to blink by writing -.Tn ASCII -strings to the -.Pa /dev/led/clockboard -device. -.Pp -On attach the -.Nm -driver also prints out the number of board slots the chassis provides. -.Sh FILES -.Bl -tag -width ".Pa /dev/led/clockboard" -.It Pa /dev/led/clockboard -clock board LED device node -.El -.Sh SEE ALSO -.Xr fhc 4 , -.Xr led 4 -.Sh HISTORY -The -.Nm -driver first appeared in -.Ox 3.7 . -The first -.Fx -version to include it was -.Fx 6.0 . -.Sh AUTHORS -.An -nosplit -The -.Nm -driver was written by -.An Jason L. Wright -and ported to -.Fx -by -.An Marius Strobl Aq Mt marius@FreeBSD.org . -.Sh CAVEATS -Hardware management functionality is not implemented. diff --git a/share/man/man4/man4.sparc64/creator.4 b/share/man/man4/man4.sparc64/creator.4 deleted file mode 100644 index 64035a7daf3..00000000000 --- a/share/man/man4/man4.sparc64/creator.4 +++ /dev/null @@ -1,88 +0,0 @@ -.\"- -.\" Copyright (c) 2002 Jason L. Wright (jason@thought.net) -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -.\" DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, -.\" INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -.\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -.\" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -.\" ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -.\" POSSIBILITY OF SUCH DAMAGE. -.\" -.\" from: OpenBSD: creator.4,v 1.20 2005/03/05 01:48:59 miod Exp -.\" $FreeBSD$ -.\" -.Dd June 18, 2005 -.Dt CREATOR 4 sparc64 -.Os -.Sh NAME -.Nm creator -.Nd "accelerated color frame buffer" -.Sh SYNOPSIS -.Cd "device creator" -.Sh DESCRIPTION -The -.Tn Sun Creator , -.Tn Sun Creator3D -and -.Tn Sun Elite3D -cards are color frame buffers with graphics acceleration available for -.Tn UltraSPARC -workstations with -.Tn UPA -slots. -The -.Nm -driver interfaces those frame buffers with the -.Xr syscons 4 -console driver. -It also provides separate character devices -.Pa /dev/fb* -allowing to -.Xr mmap 2 -these frame buffers -(used by X11). -.Sh FILES -.Bl -tag -width ".Pa /dev/fb*" -.It Pa /dev/fb* -.Nm -device nodes -.El -.Sh SEE ALSO -.Xr machfb 4 , -.Xr syscons 4 -.Sh HISTORY -The -.Nm -driver first appeared in -.Ox 3.2 . -The first -.Fx -version to include it was -.Fx 5.2 . -.Sh AUTHORS -.An -nosplit -The -.Nm -driver was written by -.An Jake Burkholder Aq Mt jake@FreeBSD.org -roughly based on the -.Ox -driver written by -.An "Jason L. Wright" . -.Sh CAVEATS -Font loading and mode switching are not implemented. diff --git a/share/man/man4/man4.sparc64/ebus.4 b/share/man/man4/man4.sparc64/ebus.4 deleted file mode 100644 index 26b67447a60..00000000000 --- a/share/man/man4/man4.sparc64/ebus.4 +++ /dev/null @@ -1,122 +0,0 @@ -.\"- -.\" Copyright (c) 1999 Matthew R. Green -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" 3. The name of the author may not be used to endorse or promote products -.\" derived from this software without specific prior written permission. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -.\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED -.\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" from: OpenBSD: ebus.4,v 1.6 2004/09/23 18:28:51 jason Exp -.\" from: NetBSD: ebus.4,v 1.3 2002/03/13 21:42:20 wiz Exp -.\" $FreeBSD$ -.\" -.Dd September 1, 2006 -.Dt EBUS 4 sparc64 -.Os -.Sh NAME -.Nm ebus -.Nd "EBus controller and bus" -.Sh SYNOPSIS -.Cd "device ebus" -.Sh DESCRIPTION -The -.Nm -driver provides support for the EBus controller and bus found in most -.Tn PCI -based -.Tn UltraSPARC -systems. -The -.Tn EBus -bus is designed to provide the ability to put -.Tn ISA -and traditional -.Tn Intel -style peripherals in a -.Tn SPARC -based system with a minimal amount of glue logic. -In -.Tn UltraSPARC -systems it is implemented with either a PCIO or a PCIO-2 chip from -.Tn Sun Microelectronics . -The PCIO chip also implements a -.Xr hme 4 -compatible -.Tn PCI -network device. -The PCIO-2 chip also implements a -.Xr fwohci 4 -compatible -.Tn IEEE -.Tn 1394 -.Tn OHCI -interface, a -.Xr gem 4 -compatible -.Tn PCI -network device and an -.Xr ohci 4 -compatible -.Tn OHCI -.Tn USB -controller. -The -.Tn EBus -has four DMA channels, -similar to the DMA seen in the -.Xr esp 4 -.Tn SCSI -DMA. -.Sh SEE ALSO -.Xr atkbdc 4 , -.Xr auxio 4 , -.Xr eeprom 4 , -.Xr rtc 4 , -.Xr scc 4 , -.Xr snd_audiocs 4 , -.Xr uart 4 -.Rs -.%Q "Sun Microelectronics" -.%T "Peripheral Component Interconnect Input Output Controller" -.%V "Part No.: 802-7837-01" -.%D "March 1997" -.%U "http://www.sun.com/oem/products/manuals/802-7837.pdf" -.Re -.Sh HISTORY -The -.Nm -driver first appeared in -.Nx 1.5 . -The first -.Fx -version to include it was -.Fx 5.0 . -.Sh AUTHORS -.An -nosplit -The -.Nm -driver was written by -.An Matthew R. Green -and ported to -.Fx -by -.An Thomas Moestl Aq Mt tmm@FreeBSD.org . diff --git a/share/man/man4/man4.sparc64/eeprom.4 b/share/man/man4/man4.sparc64/eeprom.4 deleted file mode 100644 index 8d7c3a57df5..00000000000 --- a/share/man/man4/man4.sparc64/eeprom.4 +++ /dev/null @@ -1,130 +0,0 @@ -.\"- -.\" Copyright (c) 2004 Jason L. Wright (jason@thought.net) -.\" Copyright (c) 2005 Marius Strobl -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -.\" DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, -.\" INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -.\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -.\" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -.\" ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -.\" POSSIBILITY OF SUCH DAMAGE. -.\" -.\" from: OpenBSD: clock.4,v 1.3 2004/09/24 07:04:15 miod Exp -.\" $FreeBSD$ -.\" -.Dd February 15, 2006 -.Dt EEPROM 4 sparc64 -.Os -.Sh NAME -.Nm eeprom -.Nd "non-volatile RAM / real time clock" -.Sh SYNOPSIS -.Cd "device genclock" -.Cd "device mk48txx" -.Cd "device eeprom" -.Sh DESCRIPTION -The -.Nm -driver is a front-end for the machine-independent -.Tn Mostek -MK48Txx driver. -The -.Tn Mostek -MK48Txx driver provides access to the real time clock and the watchdog part -of the supported chips to -.Fx -by interfacing them with the generic clock code and -.Xr watchdog 4 -respectively. -.Pp -.Tn Mostek -MK48Txx chips providing real time clock functionality are found on the -.Tn EBus , -.Tn FireHose -and -.Tn SBus -busses of -.Tn UltraSPARC -systems. -On systems where the hostid is stored in the NVRAM part of the -.Tn Mostek -MK48Txx chip the -.Nm -driver prints out the hostid on attach. -.Pp -On -.Tn Sun Enterprise -250 and 450 systems additionally the watchdog functionality of the -.Tn Mostek -MK48Txx chips is available. -The -.Nm -driver automatically registers the watchdog part with -.Xr watchdog 4 -on these systems. -Thus it can be used with -.Xr watchdog 8 -and -.Xr watchdogd 8 . -The timeout interval supported by the -.Tn Mostek -MK48Txx watchdog is 1/16 second to 128 seconds. -In the -.Tn Sun Enterprise -machines a system reset is triggered when the -.Tn Mostek -MK48Txx watchdog times out regardless of what the -.Tn Open Firmware -environment variable -.Va watchdog-reboot? -is set to. -.Sh DIAGNOSTICS -The following driver specific error message may be reported: -.Bl -diag -.It "mk48txx_attach: battery low" -The device signals that its battery is low and should be replaced. -The -.Nm -driver refused to attach the device in this case as the time in the real time -clock is probably invalid. -This gives the generic clock code the chance to use another device as the -system real time clock that otherwise would not have been chosen. -.El -.Sh SEE ALSO -.Xr ebus 4 , -.Xr fhc 4 , -.Xr rtc 4 , -.Xr sbus 4 , -.Xr watchdog 4 , -.Xr watchdog 8 , -.Xr watchdogd 8 -.Sh HISTORY -The -.Nm -driver first appeared in -.Fx 5.0 . -.Sh AUTHORS -.An -nosplit -The -.Nm -driver was written by -.An Thomas Moestl Aq Mt tmm@FreeBSD.org -based on the -.Nx -sparc64 clock code written by -.An Paul Kranenburg . diff --git a/share/man/man4/man4.sparc64/fhc.4 b/share/man/man4/man4.sparc64/fhc.4 deleted file mode 100644 index 1cd12e982f1..00000000000 --- a/share/man/man4/man4.sparc64/fhc.4 +++ /dev/null @@ -1,82 +0,0 @@ -.\"- -.\" Copyright (c) 2004 Jason L. Wright (jason@thought.net) -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -.\" DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, -.\" INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -.\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -.\" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -.\" ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -.\" POSSIBILITY OF SUCH DAMAGE. -.\" -.\" from: OpenBSD: fhc.4,v 1.5 2004/09/28 21:42:59 jmc Exp -.\" $FreeBSD$ -.\" -.Dd June 18, 2005 -.Dt FHC 4 sparc64 -.Os -.Sh NAME -.Nm fhc -.Nd "FireHose controller and bus" -.Sh SYNOPSIS -.Cd "device fhc" -.Sh DESCRIPTION -The -.Nm -driver provides support for the -.Tn FireHose -controllers and busses found in -.Tn Sun Enterprise xx00 -systems. -These controllers are also used for board level functions on these systems. -Each board has three status LEDs labeled -.Dq Li Power , -.Dq Li Failure -and -.Dq Li Cycling . -The -.Dq Li Cycling -LEDs can be made to blink by writing -.Tn ASCII -strings to the -.Pa /dev/led/board Ns Ar N -devices where -.Ar N -represents the physical slot number of the board. -.Sh FILES -.Bl -tag -width ".Pa /dev/led/board Ns Ar N" -.It Pa /dev/led/board Ns Ar N -board -.Ar N -LED device node -.El -.Sh SEE ALSO -.Xr central 4 , -.Xr clkbrd 4 , -.Xr eeprom 4 , -.Xr led 4 , -.Xr uart 4 -.Sh HISTORY -The -.Nm -driver first appeared in -.Fx 5.1 . -.Sh AUTHORS -The -.Nm -driver was written by -.An Jake Burkholder Aq Mt jake@FreeBSD.org . diff --git a/share/man/man4/man4.sparc64/machfb.4 b/share/man/man4/man4.sparc64/machfb.4 deleted file mode 100644 index 9e65222b194..00000000000 --- a/share/man/man4/man4.sparc64/machfb.4 +++ /dev/null @@ -1,180 +0,0 @@ -.\"- -.\" Copyright (c) 2002 Jason L. Wright (jason@thought.net) -.\" Copyright (c) 2005, 2006 Marius Strobl -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -.\" DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, -.\" INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -.\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -.\" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -.\" ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -.\" POSSIBILITY OF SUCH DAMAGE. -.\" -.\" from: OpenBSD: creator.4,v 1.20 2005/03/05 01:48:59 miod Exp -.\" $FreeBSD$ -.\" -.Dd September 2, 2006 -.Dt MACHFB 4 sparc64 -.Os -.Sh NAME -.Nm machfb -.Nd "accelerated color frame buffer" -.Sh SYNOPSIS -.Cd "device machfb" -.Sh DESCRIPTION -The -.Tn ATI Mach64 -family of chips are color frame buffers with graphics acceleration. -The -.Nm -driver interfaces those frame buffers with the -.Xr syscons 4 -console driver. -.Pp -.Tn ATI Mach64 -chips are very common as low-end graphics chips in -.Tn PCI -based -.Tn UltraSPARC -systems. -They are found on-board in -.Tn Sun Blade 100 , -.Tn Sun Blade 150 , -.Tn Sun Ultra 5 -and -.Tn Sun Ultra 10 -as well as on -.Tn Sun -OEM mainboards like the -.Tn Sun AXe . -They are also used on add-on cards like the -.Tn Sun PGX -and -.Tn Sun PGX64 . -.Pp -The -.Nm -driver requires the chip which it is supposed to drive to be also -supported by the -.Tn Open Firmware , -either by a built-in FCode driver package of the on-board firmware -or by additional FCode on the add-on card. -As a matter of course -.Tn UltraSPARC -systems with an on-board -.Tn ATI Mach64 chip -also have a built-in FCode driver package for this chip. -There are also mainboards like the -.Tn Sun AX1105 -and -.Tn Sun AXi -boards however, -which have built-in FCode for certain -.Tn ATI Mach64 -chips although they are not equipped with an on-board one. -Mainboards with built-in FCode for certain -.Tn ATI Mach64 -chips can be used with any add-on card which is based on one of those -chips, -including cards which are equipped with x86 firmware and intended for -use in PCs. -Otherwise an add-on card which comes with its own FCode like the -.Tn Sun PGX -or -.Tn Sun PGX64 -has to be used. -.Sh HARDWARE -The -.Nm -driver provides support for the following chips: -.Pp -.Bl -bullet -compact -.It -.Tn ATI 3D Rage II+ -.It -.Tn ATI 3D Rage IIC -.It -.Tn ATI 3D Rage I/II -.It -.Tn ATI 3D Rage LT -.It -.Tn ATI 3D Rage LT Pro -.It -.Tn ATI 3D Rage Pro -.It -.Tn ATI 3D Rage Pro Turbo -.It -.Tn ATI Mach64 CT -.It -.Tn ATI Mach64 VT -.It -.Tn ATI Mach64 VT4 -.It -.Tn ATI Mach64 VTB -.It -.Tn ATI Rage L Mobility -.It -.Tn ATI Rage Mobility -.It -.Tn ATI Rage Mobility M1 -.It -.Tn ATI Rage Mobility M3 -.It -.Tn ATI Rage XC -.It -.Tn ATI Rage XL -.El -.Pp -The -following add-on cards are known to work with the -.Nm -driver at this time: -.Pp -.Bl -bullet -compact -.It -.Tn ATI 3D Charger PCI -.It -.Tn Sun PGX 8-Bit Color Frame Buffer -(part no.\& 370-2256) -.It -.Tn Sun PGX64 8/24-Bit Color Frame Buffer -(part no.\& 370-4362) -.El -.Sh SEE ALSO -.Xr creator 4 , -.Xr syscons 4 -.Sh HISTORY -The -.Nm -driver first appeared in -.Nx 2.0 . -The first -.Fx -version to include it was -.Fx 6.0 . -.Sh AUTHORS -.An -nosplit -The -.Nm -driver was written by -.An Marius Strobl Aq Mt marius@FreeBSD.org -based on the -.Nx -driver written by -.An Bang Jun-Young . -.Sh CAVEATS -Font loading and mode switching are not implemented. diff --git a/share/man/man4/man4.sparc64/ofw_console.4 b/share/man/man4/man4.sparc64/ofw_console.4 deleted file mode 100644 index f21b977b4d2..00000000000 --- a/share/man/man4/man4.sparc64/ofw_console.4 +++ /dev/null @@ -1,126 +0,0 @@ -.\"- -.\" Copyright (c) 2001 Miodrag Vallat. -.\" Copyright (c) 2005 Marius Strobl -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistribution of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -.\" -.\" from: OpenBSD: pcons.4,v 1.4 2003/06/02 16:16:26 miod Exp -.\" $FreeBSD$ -.\" -.Dd June 18, 2005 -.Dt OFW_CONSOLE 4 sparc64 -.Os -.Sh NAME -.Nm ofw_console -.Nd "Open Firmware console" -.Sh SYNOPSIS -.Cd "device ofw_console" -.Cd "options OFWCONS_POLL_HZ=N" -.Pp -.Cd "options KDB" -.Cd "options DDB" -.Cd "options ALT_BREAK_TO_DEBUGGER" -.Sh DESCRIPTION -The -.Nm -driver provides a simple text console, -using the Open Firmware services for input and output. -It will use the Open Firmware console devices set via the -.Va input-device -and -.Va output-device -variables. -.Pp -This driver is deprecated and only provided as a fallback console mechanism -if the real console hardware can not be driven by -.Fx . -.Pp -In case the -.Nm -console appears to work too slowly, its responsiveness probably can be improved -by including -.Cd "options OFWCONS_POLL_HZ=N" . -When omitted, -.Dv OFWCONS_POLL_HZ -defaults to 4. -For example, on -.Tn Sun Ultra 2 -a value of 20 or higher works best. -Too high values, on the other hand, can cause -.Nm -to unnecessarily consume CPU. -.Sh FILES -.Bl -tag -width ".Pa /dev/keyboard" -compact -.It Pa /dev/console -.It Pa /dev/keyboard -terminal input device in case the console input device is the keyboard -.It Pa /dev/screen -terminal output device in case the console output device is the screen -.It Pa /dev/tty[a-z] -terminal device in case both the console input and output device is tty[a-z] -.El -.Sh SEE ALSO -.Xr creator 4 , -.Xr machfb 4 , -.Xr syscons 4 , -.Xr uart 4 , -.Xr eeprom 8 -.Sh HISTORY -The -.Nm -driver first appeared in -.Fx 5.0 . -.Sh AUTHORS -The -.Nm -driver was written by -.An Benno Rice Aq Mt benno@FreeBSD.org . -.Sh CAVEATS -Since the Open Firmware will handle BREAK -(or Stop-A) -sequences before -.Nm , -the preferred way to enter -.Xr ddb 4 -when using -.Nm -is to include -.Cd "options ALT_BREAK_TO_DEBUGGER" -in a ddb-enabled kernel, and enter the alternate BREAK sequence -(RETURN TILDE CTRL-b). -.Sh BUGS -The -.Nm -driver -is not a real -.Xr tty 4 -driver and is not MPSAFE. -The -.Nm -driver also does not attach to the hardware resources it actually talks to. -Therefore it cannot be included in the kernel together with real console -hardware drivers -like -.Xr creator 4 , -.Xr machfb 4 -and -.Xr uart 4 . diff --git a/share/man/man4/man4.sparc64/openfirm.4 b/share/man/man4/man4.sparc64/openfirm.4 deleted file mode 100644 index bee4915b5f1..00000000000 --- a/share/man/man4/man4.sparc64/openfirm.4 +++ /dev/null @@ -1,300 +0,0 @@ -.\"- -.\" Copyright (c) 1992, 1993 -.\" The Regents of the University of California. All rights reserved. -.\" -.\" This software was developed by the Computer Systems Engineering group -.\" at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and -.\" contributed to Berkeley. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" 3. Neither the name of the University nor the names of its contributors -.\" may be used to endorse or promote products derived from this software -.\" without specific prior written permission. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" from: @(#)openprom.4 8.1 (Berkeley) 6/5/93 -.\" from: OpenBSD: openprom.4,v 1.9 2004/03/22 22:07:21 miod Exp -.\" -.\"- -.\" Copyright (c) 2005 Marius Strobl -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -.\" -.\" $FreeBSD$ -.\" -.Dd September 1, 2006 -.Dt OPENFIRM 4 sparc64 -.Os -.Sh NAME -.Nm openfirm -.Nd "Open Firmware interface" -.Sh SYNOPSIS -.In sys/types.h -.In sys/ioctl.h -.In dev/ofw/openfirmio.h -.Sh DESCRIPTION -The -.Pa /dev/openfirm -device is an interface to the -.Tn Open Firmware -device tree. -This interface is similar to the -.Tn SunOS / -.Tn Solaris -compatible -.Xr openprom 4 -interface and highly stylized. -It uses -.Xr ioctl 2 -calls for all operations. -These calls refer to the nodes in the -.Tn Open Firmware -device tree. -The nodes are represented by package handles, -which are simply integer values describing data areas. -Occasionally a package handle of 0 may be used or returned instead, -as described below. -.Pp -The calls that only take and/or return the package handle of a node -use a pointer to a -.Vt phandle_t -for this purpose. -The others use a pointer to a -.Vt "struct ofiocdesc" -descriptor, -which has the following definition: -.Bd -literal -struct ofiocdesc { - phandle_t of_nodeid; - int of_namelen; - const char *of_name; - int of_buflen; - char *of_buf; -}; -.Ed -.Pp -The -.Va of_nodeid -member is the package handle of the node that is passed in or returned. -Strings are passed in via the -.Va of_name -member of -.Va of_namelen -length. -The maximum accepted length of -.Va of_name -is -.Dv OFIOCMAXNAME . -The -.Va of_buf -member is used to return strings except for the -.Dv OFIOCSET -call where it is also used to pass in a string. -In the latter case the maximum accepted length of -.Va of_buf -is -.Dv OFIOCMAXVALUE . -Generally, -.Va of_buf -works in a value-result fashion. -At entry to the -.Xr ioctl 2 -call, -.Va of_buflen -is expected to reflect the buffer size. -On return, -.Va of_buflen -is updated to reflect the buffer contents. -.Pp -The following -.Xr ioctl 2 -calls are supported: -.Bl -tag -width ".Dv OFIOCGETOPTNODE" -.It Dv OFIOCGETOPTNODE -Uses a -.Vt phandle_t . -Takes nothing and returns the package handle of the -.Pa /options -node. -.It Dv OFIOCGETNEXT -Uses a -.Vt phandle_t . -Takes the package handle of a node and returns the package handle of the next -node in the -.Tn Open Firmware -device tree. -The node following the last node has a package handle of 0. -The node following the node with the package handle of 0 is the first node. -.It Dv OFIOCGETCHILD -Uses a -.Vt phandle_t . -Takes the package handle of a node and returns the package handle of the first -child of that node. -This child may have siblings. -These can be determined by using -.Dv OFIOCGETNEXT . -If the node does not have a child, -a package handle of 0 is returned. -.It Dv OFIOCGET -Uses a -.Vt "struct ofiocdesc" . -Takes the package handle of a node and the name of a property. -Returns the property value and its length. -If no such property is associated with that node, -the length of the value is set to \-1. -If the named property exists but has no value, -the length of the value is set to 0. -.It Dv OFIOCGETPROPLEN -Uses a -.Vt "struct ofiocdesc" . -Takes the package handle of a node and the name of a property. -Returns the length of the property value. -This call is the same as -.Dv OFIOCGET -except that only the length of the property value is returned. -It can be used to determine whether a node has a particular property or whether -a property has a value without the need to provide memory for storing the value. -.It Dv OFIOCSET -Uses a -.Vt "struct ofiocdesc" . -Takes the package handle of a node, -the name of a property and a property value. -Returns the property value and the length that actually have been written. -The -.Tn Open Firmware -may choose to truncate the value if it is too long or write a valid value -instead if the given value is invalid for the particular property. -Therefore the returned value should be checked. -The -.Tn Open Firmware -may also completely refuse to write the given value to the property. -In this case -.Er EINVAL -is returned. -.It Dv OFIOCNEXTPROP -Uses a -.Vt "struct ofiocdesc" . -Takes the package handle of a node and the name of a property. -Returns the name and the length of the next property of the node. -If the property referenced by the given name is the last property of the node, -.Er ENOENT -is returned. -.It Dv OFIOCFINDDEVICE -Uses a -.Vt "struct ofiocdesc" . -Takes the name or alias name of a device node. -Returns package handle of the node. -If no matching node is found, -.Er ENOENT -is returned. -.El -.Sh FILES -.Bl -tag -width ".Pa /dev/openfirm" -.It Pa /dev/openfirm -Open Firmware interface node -.El -.Sh DIAGNOSTICS -The following may result in rejection of an operation: -.Bl -tag -width Er -.It Bq Er EBADF -The requested operation requires permissions not specified at the call to -.Fn open . -.It Bq Er EINVAL -The given package handle is not 0 and does not correspond to any valid node, -or the given package handle is 0 where 0 is not allowed. -.It Bq Er ENAMETOOLONG -The given name or value exceeds the maximum allowed length of -.Dv OFIOCMAXNAME -and -.Dv OFIOCMAXVALUE -bytes respectively. -.It Bq Er ENOMEM -The kernel could not allocate memory to copy in data from user-space or to -retrieve data from the -.Tn Open Firmware . -.El -.Sh SEE ALSO -.Xr ioctl 2 , -.Xr openprom 4 , -.Xr eeprom 8 , -.Xr ofwdump 8 -.Rs -.%Q "IEEE Standards Organization" -.%B "IEEE Std 1275-1994:" -.%B "IEEE Standard for Boot Firmware (Initialization Configuration) Firmware:" -.%B Core Requirements and Practices" -.%O ISBN 1-55937-426-8 -.Re -.Sh HISTORY -The -.Nm -interface first appeared in -.Nx 1.6 . -The first -.Fx -version to include it was -.Fx 5.0 . -.Sh AUTHORS -The -.Nm -interface was ported to -.Fx -by -.An Thomas Moestl Aq Mt tmm@FreeBSD.org . -.Sh CAVEATS -Due to limitations within -.Tn Open Firmware -itself, -these functions run at elevated priority and may adversely affect system -performance. -.Pp -For at least the -.Pa /options -node the property value passed in to the -.Dv OFIOCSET -call has to be null-terminated and the value length passed in has to include -the terminating -.Ql \e0 . -However, as with the -.Dv OFIOCGET -call, -the returned value length does not include the terminating -.Ql \e0 . diff --git a/share/man/man4/man4.sparc64/openprom.4 b/share/man/man4/man4.sparc64/openprom.4 deleted file mode 100644 index 8acdb14995d..00000000000 --- a/share/man/man4/man4.sparc64/openprom.4 +++ /dev/null @@ -1,240 +0,0 @@ -.\"- -.\" Copyright (c) 1992, 1993 -.\" The Regents of the University of California. All rights reserved. -.\" -.\" This software was developed by the Computer Systems Engineering group -.\" at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and -.\" contributed to Berkeley. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" 3. Neither the name of the University nor the names of its contributors -.\" may be used to endorse or promote products derived from this software -.\" without specific prior written permission. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" from: @(#)openprom.4 8.1 (Berkeley) 6/5/93 -.\" from: OpenBSD: openprom.4,v 1.9 2004/03/22 22:07:21 miod Exp -.\" -.\"- -.\" Copyright (c) 2005 Marius Strobl -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -.\" -.\" $FreeBSD$ -.\" -.Dd June 18, 2005 -.Dt OPENPROM 4 sparc64 -.Os -.Sh NAME -.Nm openprom -.Nd "OPENPROM interface" -.Sh SYNOPSIS -.In sys/types.h -.In sys/ioctl.h -.In dev/ofw/openpromio.h -.Sh DESCRIPTION -The -.Pa /dev/openfirm -device is a -.Tn SunOS / -.Tn Solaris -compatible interface to the -.Tn Open Firmware -device tree. -This interface is similar to the -.Xr openprom 4 -interface. -It uses -.Xr ioctl 2 -calls for all operations. -These calls refer to the nodes in the -.Tn Open Firmware -device tree. -However, -.Fx -only implements a subset of the -.Xr ioctl 2 -calls -.Tn SunOS / -.Tn Solaris -does. -The nodes are represented by integer values, -which are simply describing data areas. -Occasionally the number 0 may be used or returned instead, -as described below. -.Pp -All calls use a pointer to a -.Vt "struct openpromio" -descriptor, -which has the following definition: -.Bd -literal -struct openpromio { - uint32_t oprom_size; - char oprom_array[]; -}; -.Ed -.Pp -The -.Va oprom_size -member refers to the size of -.Va oprom_array . -The -.Va oprom_array -member actually works like a union. -Depending on the -.Xr ioctl 2 -call and whether the -.Vt "struct openpromio" -is used to pass in or return data, -.Va oprom_array -either contains an integer referring to a node or a string referring to a -property name or property value. -The maximum size of -.Va oprom_array -is -.Dv OPROMMAXPARAM . -.Pp -The following -.Xr ioctl 2 -calls are currently implemented: -.Bl -tag -width ".Dv OPROMGETPROP" -.It Dv OPROMNEXT -Takes the number of a node and returns the number of the next node in the -.Tn Open Firmware -device tree. -The node following the last node is number 0. -The node following number 0 is the first node. -.It Dv OPROMCHILD -Takes the number of a node and returns the number of the first child of that -node. -This child may have siblings. -These can be determined by using -.Dv OPROMNEXT . -If the node does not have a child, -0 is returned. -.It Dv OPROMGETPROP -Takes the name of a property. -Returns the property value. -The -.Dv OPROMGETPROP -call refers to the node previously returned by either the -.Dv OPROMNEXT -or the -.Dv OPROMCHILD -call, -depending on which one was invoked last. -If the property referenced by the given name is not associated with that node, -.Er EINVAL -is returned. -If the named property exists but has no value, -an empty string is returned. -.It Dv OPROMNXTPROP -Takes the name of a property. -Returns the name of the next property of the node. -As with the -.Dv OPROMGETPROP -call, -the -.Dv OPROMNXTPROP -call refers to the node previously returned by either the -.Dv OPROMNEXT -or the -.Dv OPROMCHILD -call. -If the property referenced by the given name is the last property of the node, -an empty string is returned. -.El -.Sh FILES -.Bl -tag -width ".Pa /dev/openprom" -.It Pa /dev/openprom -OPENPROM interface node -.El -.Sh DIAGNOSTICS -The following may result in rejection of an operation: -.Bl -tag -width Er -.It Bq Er EBUSY -The -.Pa /dev/openprom -node is already opened. -.It Bq Er EINVAL -The given node number is not 0 and does not correspond to any valid node, -or the given node number is 0 where 0 is not allowed, -or the given size value is invalid, -or the given property name exceeds the maximum allowed length of -.Dv OPROMMAXPARAM -bytes. -.It Bq Er ENOMEM -The kernel could not allocate memory to copy in data from user-space or to -retrieve data from the -.Tn Open Firmware . -.El -.Sh SEE ALSO -.Xr ioctl 2 , -.Xr openfirm 4 , -.Xr eeprom 8 , -.Xr ofwdump 8 -.Sh HISTORY -The first -.Fx -version to include the -.Nm -interface was -.Fx 5.0 . -.Sh AUTHORS -The -.Nm -interface was written by -.An Jake Burkholder Aq Mt jake@FreeBSD.org . -.Sh CAVEATS -Due to limitations within -.Tn Open Firmware -itself, -these functions run at elevated priority and may adversely affect system -performance. -.Pp -The -.Nm -interface exists entirely for compatibility with software like X11, -and only the features that are actually needed for that are implemented. -The interface sucks too much to actually use, -new code should use the -.Xr openfirm 4 -interface instead. diff --git a/share/man/man4/man4.sparc64/rtc.4 b/share/man/man4/man4.sparc64/rtc.4 deleted file mode 100644 index 34bd865bbc5..00000000000 --- a/share/man/man4/man4.sparc64/rtc.4 +++ /dev/null @@ -1,88 +0,0 @@ -.\"- -.\" Copyright (c) 2004 Jason L. Wright (jason@thought.net) -.\" Copyright (c) 2005 Marius Strobl -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -.\" DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, -.\" INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -.\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -.\" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -.\" ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -.\" POSSIBILITY OF SUCH DAMAGE. -.\" -.\" from: OpenBSD: clock.4,v 1.3 2004/09/24 07:04:15 miod Exp -.\" $FreeBSD$ -.\" -.Dd June 18, 2005 -.Dt RTC 4 sparc64 -.Os -.Sh NAME -.Nm rtc -.Nd "non-volatile RAM / real time clock" -.Sh SYNOPSIS -.Cd "device genclock" -.Cd "device mc146818" -.Cd "device rtc" -.Sh DESCRIPTION -The -.Nm -driver is a front-end for the machine-independent -.Tn Motorola -MC146818 and compatible clocks driver. -The -.Tn Motorola -MC146818 and compatible clocks driver provides access to the real time clock -part of the chips it supports to -.Fx -by interfacing with the generic clock code. -.Pp -.Tn Dallas / -.Tn Maxim Semiconductor -DS1287 chips -(those are compatible to the -.Tn Motorola -MC146818 clocks) -are found on the ISA bus of -.Tn UltraSPARC II -systems and the EBus bus of -.Tn UltraSPARC III -systems. -.Sh DIAGNOSTICS -The following driver specific error message may be reported: -.Bl -diag -.It "mc146818_attach_attach: battery low" -The device signals that its battery is low and should be replaced. -The -.Nm -driver refused to attach the device in this case as the time in the real time -clock is probably invalid. -This gives the generic clock code the chance to use another device as the -system real time clock that otherwise would not have been chosen. -.El -.Sh SEE ALSO -.Xr ebus 4 , -.Xr eeprom 4 -.Sh HISTORY -The -.Nm -driver first appeared in -.Fx 5.4 . -.Sh AUTHORS -The -.Nm -driver was written by -.An Marius Strobl Aq Mt marius@FreeBSD.org . diff --git a/share/man/man4/man4.sparc64/sbus.4 b/share/man/man4/man4.sparc64/sbus.4 deleted file mode 100644 index 17ab18da487..00000000000 --- a/share/man/man4/man4.sparc64/sbus.4 +++ /dev/null @@ -1,79 +0,0 @@ -.\"- -.\" Copyright (c) 2001 The NetBSD Foundation, Inc. -.\" All rights reserved. -.\" -.\" This code is derived from software contributed to The NetBSD Foundation -.\" by Paul Kranenburg. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS -.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS -.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -.\" POSSIBILITY OF SUCH DAMAGE. -.\" -.\" from: OpenBSD: sbus.4,v 1.27 2005/03/05 01:44:48 miod Exp -.\" from: NetBSD: sbus.4,v 1.5 2002/01/21 17:54:10 wiz Exp -.\" $FreeBSD$ -.\" -.Dd September 1, 2006 -.Dt SBUS 4 sparc64 -.Os -.Sh NAME -.Nm sbus -.Nd SBus controller and bus -.Sh SYNOPSIS -.Cd "device sbus" -.Sh DESCRIPTION -The -.Nm -driver provides support for the SBus controllers and busses found in older -.Tn UltraSPARC -workstations and small to medium server class systems. -The SBus is an I/O interconnect bus supporting both on-board peripherals and -extension boards. -The SBus specifications define the bus protocol as well as the electrical and -mechanical properties of the extension slots. -.Sh SEE ALSO -.Xr auxio 4 , -.Xr eeprom 4 , -.Xr esp 4 , -.Xr hme 4 , -.Xr isp 4 , -.Xr le 4 , -.Xr scc 4 , -.Xr snd_audiocs 4 , -.Xr uart 4 -.Sh HISTORY -The -.Nm -driver first appeared in -.Nx 1.3 . -The first -.Fx -version to include it was -.Fx 5.0 . -.Sh AUTHORS -.An -nosplit -The -.Nm -driver was written by -.An Paul Kranenburg -and ported to -.Fx -by -.An Thomas Moestl Aq Mt tmm@FreeBSD.org . diff --git a/share/man/man4/man4.sparc64/snd_audiocs.4 b/share/man/man4/man4.sparc64/snd_audiocs.4 deleted file mode 100644 index 13b4c22c332..00000000000 --- a/share/man/man4/man4.sparc64/snd_audiocs.4 +++ /dev/null @@ -1,87 +0,0 @@ -.\"- -.\" Copyright (c) 2004 Pyun YongHyeon -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $FreeBSD$ -.\" -.Dd December 15, 2005 -.Dt SND_AUDIOCS 4 sparc64 -.Os -.Sh NAME -.Nm snd_audiocs -.Nd "Crystal Semiconductor CS4231 audio device driver" -.Sh SYNOPSIS -To compile this driver into the kernel, place the following lines in your -kernel configuration file: -.Bd -ragged -offset indent -.Cd "device sound" -.Cd "device snd_audiocs" -.Ed -.Pp -Alternatively, to load the driver as a module at boot time, place the -following line in -.Xr loader.conf 5 : -.Bd -literal -offset indent -snd_audiocs_load="YES" -.Ed -.Sh DESCRIPTION -The -.Nm -bridge driver allows the generic audio driver -.Xr sound 4 -to attach to the CS4231 audio device. -Speaker output is enabled by default. -SBus based -.Tn UltraSPARC -workstations have no internal CD-ROM audio input capability. -.Sh HARDWARE -The -.Nm -driver supports the following audio devices: -.Pp -.Bl -bullet -compact -.It -CS4231 on SBus based UltraSPARC -.It -CS4231 on PCI/EBus based UltraSPARC -.El -.Sh SEE ALSO -.Xr ebus 4 , -.Xr sbus 4 , -.Xr sound 4 -.Sh HISTORY -The -.Nm -device driver first appeared in -.Fx 5.3 . -.Sh AUTHORS -.An -nosplit -The -.Nm -driver was ported by -.An Pyun YongHyeon Aq Mt yongari@FreeBSD.org -from the -.Ox -driver written by -.An Jason L. Wright . diff --git a/share/man/man4/pcm.4 b/share/man/man4/pcm.4 index aca6eddf676..01e47a9bc72 100644 --- a/share/man/man4/pcm.4 +++ b/share/man/man4/pcm.4 @@ -83,8 +83,6 @@ The following bridge device drivers are available: .It .Xr snd_atiixp 4 .It -.Xr snd_audiocs 4 (enabled by default on sparc64) -.It .Xr snd_cmi 4 (enabled by default on amd64, i386) .It .Xr snd_cs4281 4 @@ -103,7 +101,7 @@ The following bridge device drivers are available: .It .Xr snd_envy24ht 4 .It -.Xr snd_es137x 4 (enabled by default on amd64, i386, sparc64) +.Xr snd_es137x 4 (enabled by default on amd64, i386) .It .Xr snd_ess 4 .It @@ -135,9 +133,7 @@ snd_sb8 .It .Xr snd_spicds 4 .It -.Xr snd_t4dwave 4 (enabled by default on sparc64) -.It -.Xr snd_uaudio 4 (enabled by default on amd64, i386, powerpc, sparc64) +.Xr snd_uaudio 4 (enabled by default on amd64, i386, powerpc) .It .Xr snd_via8233 4 (enabled by default on amd64, i386) .It diff --git a/share/man/man4/smp.4 b/share/man/man4/smp.4 index 9027d2a6996..408f417ace7 100644 --- a/share/man/man4/smp.4 +++ b/share/man/man4/smp.4 @@ -118,7 +118,7 @@ tasks on CPUs that are closely grouped together. Support for multi-processor systems is present for all Tier-1 and Tier-2 architectures on .Fx . -Currently, this includes x86, powerpc, arm, and sparc64. +Currently, this includes x86, powerpc, mips, arm and arm64. Support is enabled using .Cd options SMP . It is permissible to use the SMP kernel configuration on non-SMP hardware. diff --git a/share/man/man9/bus_dma.9 b/share/man/man9/bus_dma.9 index e72c57dc735..b47cb13e168 100644 --- a/share/man/man9/bus_dma.9 +++ b/share/man/man9/bus_dma.9 @@ -716,11 +716,6 @@ and as opposed to streamable data such as receive and transmit buffers. Use of this flag does not remove the requirement of using .Fn bus_dmamap_sync , but it may reduce the cost of performing these operations. -For -.Fn bus_dmamap_create , -the -.Dv BUS_DMA_COHERENT -flag is currently implemented on sparc64. .El .It Fa mapp Pointer to a @@ -785,11 +780,6 @@ The load should not be deferred in case of insufficient mapping resources, and instead should return immediately with an appropriate error. .It Dv BUS_DMA_NOCACHE The generated transactions to and from the virtual page are non-cacheable. -For -.Fn bus_dmamap_load , -the -.Dv BUS_DMA_NOCACHE -flag is currently implemented on sparc64. .El .El .Pp @@ -1050,7 +1040,7 @@ For .Fn bus_dmamem_alloc , the .Dv BUS_DMA_COHERENT -flag is currently implemented on arm, arm64 and sparc64. +flag is currently implemented on arm and arm64. .It Dv BUS_DMA_ZERO Causes the allocated memory to be set to all zeros. .It Dv BUS_DMA_NOCACHE From 08d74565020ef930eada7d0a73cd5e8d1eb2f67e Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Wed, 12 Feb 2020 06:53:29 +0000 Subject: [PATCH 092/144] Remove sparc64 files These were disconnected from the build when the kernel was removed. Since they depend on removed parts of the kernel, remove them completely. --- lib/libkvm/kvm_sparc64.c | 239 --------------------------------------- lib/libkvm/kvm_sparc64.h | 117 ------------------- 2 files changed, 356 deletions(-) delete mode 100644 lib/libkvm/kvm_sparc64.c delete mode 100644 lib/libkvm/kvm_sparc64.h diff --git a/lib/libkvm/kvm_sparc64.c b/lib/libkvm/kvm_sparc64.c deleted file mode 100644 index 0b74f9b06b9..00000000000 --- a/lib/libkvm/kvm_sparc64.c +++ /dev/null @@ -1,239 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-3-Clause - * - * Copyright (c) 1989, 1992, 1993 - * The Regents of the University of California. All rights reserved. - * - * This code is derived from software developed by the Computer Systems - * Engineering group at Lawrence Berkeley Laboratory under DARPA contract - * BG 91-66 and contributed to Berkeley. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * from: FreeBSD: src/lib/libkvm/kvm_i386.c,v 1.15 2001/10/10 17:48:43 - */ - -#include -__FBSDID("$FreeBSD$"); -__SCCSID("@(#)kvm_hp300.c 8.1 (Berkeley) 6/4/93"); - -/* - * sparc64 machine dependent routines for kvm. - */ - -#include -#include -#include -#include -#include -#include - -#include "../../sys/sparc64/include/kerneldump.h" - -#include "kvm_private.h" -#include "kvm_sparc64.h" - -struct vmstate { - off_t vm_tsb_off; - uint64_t vm_tsb_mask; - int vm_nregions; - struct sparc64_dump_reg *vm_regions; -}; - -static int -_sparc64_probe(kvm_t *kd) -{ - - return (_kvm_probe_elf_kernel(kd, ELFCLASS64, EM_SPARCV9)); -} - -static void -_sparc64_freevtop(kvm_t *kd) -{ - - free(kd->vmst->vm_regions); - free(kd->vmst); - kd->vmst = NULL; -} - -static int -_sparc64_read_phys(kvm_t *kd, off_t pos, void *buf, size_t size) -{ - - /* XXX This has to be a raw file read, kvm_read is virtual. */ - if (pread(kd->pmfd, buf, size, pos) != (ssize_t)size) { - _kvm_syserr(kd, kd->program, "_sparc64_read_phys: pread"); - return (0); - } - return (1); -} - -static int -_sparc64_reg_cmp(const void *a, const void *b) -{ - const struct sparc64_dump_reg *ra, *rb; - - ra = a; - rb = b; - if (ra->dr_pa < rb->dr_pa) - return (-1); - else if (ra->dr_pa >= rb->dr_pa + rb->dr_size) - return (1); - else - return (0); -} - -#define KVM_OFF_NOTFOUND 0 - -static off_t -_sparc64_find_off(struct vmstate *vm, uint64_t pa, uint64_t size) -{ - struct sparc64_dump_reg *reg, key; - vm_offset_t o; - - key.dr_pa = pa; - reg = bsearch(&key, vm->vm_regions, vm->vm_nregions, - sizeof(*vm->vm_regions), _sparc64_reg_cmp); - if (reg == NULL) - return (KVM_OFF_NOTFOUND); - o = pa - reg->dr_pa; - if (o + size > reg->dr_size) - return (KVM_OFF_NOTFOUND); - return (reg->dr_offs + o); -} - -static int -_sparc64_initvtop(kvm_t *kd) -{ - struct sparc64_dump_hdr hdr; - struct sparc64_dump_reg *regs; - struct vmstate *vm; - size_t regsz; - int i; - - vm = (struct vmstate *)_kvm_malloc(kd, sizeof(*vm)); - if (vm == NULL) { - _kvm_err(kd, kd->program, "cannot allocate vm"); - return (-1); - } - kd->vmst = vm; - - if (!_sparc64_read_phys(kd, 0, &hdr, sizeof(hdr))) - goto fail_vm; - hdr.dh_hdr_size = be64toh(hdr.dh_hdr_size); - hdr.dh_tsb_pa = be64toh(hdr.dh_tsb_pa); - hdr.dh_tsb_size = be64toh(hdr.dh_tsb_size); - hdr.dh_tsb_mask = be64toh(hdr.dh_tsb_mask); - hdr.dh_nregions = be32toh(hdr.dh_nregions); - - regsz = hdr.dh_nregions * sizeof(*regs); - regs = _kvm_malloc(kd, regsz); - if (regs == NULL) { - _kvm_err(kd, kd->program, "cannot allocate regions"); - goto fail_vm; - } - if (!_sparc64_read_phys(kd, sizeof(hdr), regs, regsz)) - goto fail_regs; - for (i = 0; i < hdr.dh_nregions; i++) { - regs[i].dr_pa = be64toh(regs[i].dr_pa); - regs[i].dr_size = be64toh(regs[i].dr_size); - regs[i].dr_offs = be64toh(regs[i].dr_offs); - } - qsort(regs, hdr.dh_nregions, sizeof(*regs), _sparc64_reg_cmp); - - vm->vm_tsb_mask = hdr.dh_tsb_mask; - vm->vm_regions = regs; - vm->vm_nregions = hdr.dh_nregions; - vm->vm_tsb_off = _sparc64_find_off(vm, hdr.dh_tsb_pa, hdr.dh_tsb_size); - if (vm->vm_tsb_off == KVM_OFF_NOTFOUND) { - _kvm_err(kd, kd->program, "tsb not found in dump"); - goto fail_regs; - } - return (0); - -fail_regs: - free(regs); -fail_vm: - free(vm); - return (-1); -} - -static int -_sparc64_kvatop(kvm_t *kd, kvaddr_t va, off_t *pa) -{ - struct sparc64_tte tte; - off_t tte_off; - kvaddr_t vpn; - off_t pa_off; - kvaddr_t pg_off; - int rest; - - pg_off = va & SPARC64_PAGE_MASK; - if (va >= SPARC64_MIN_DIRECT_ADDRESS) - pa_off = SPARC64_DIRECT_TO_PHYS(va) & ~SPARC64_PAGE_MASK; - else { - vpn = va >> SPARC64_PAGE_SHIFT; - tte_off = kd->vmst->vm_tsb_off + - ((vpn & kd->vmst->vm_tsb_mask) << SPARC64_TTE_SHIFT); - if (!_sparc64_read_phys(kd, tte_off, &tte, sizeof(tte))) - goto invalid; - tte.tte_vpn = be64toh(tte.tte_vpn); - tte.tte_data = be64toh(tte.tte_data); - if (!sparc64_tte_match(&tte, va)) - goto invalid; - pa_off = SPARC64_TTE_GET_PA(&tte); - } - rest = SPARC64_PAGE_SIZE - pg_off; - pa_off = _sparc64_find_off(kd->vmst, pa_off, rest); - if (pa_off == KVM_OFF_NOTFOUND) - goto invalid; - *pa = pa_off + pg_off; - return (rest); - -invalid: - _kvm_err(kd, 0, "invalid address (%jx)", (uintmax_t)va); - return (0); -} - -static int -_sparc64_native(kvm_t *kd __unused) -{ - -#ifdef __sparc64__ - return (1); -#else - return (0); -#endif -} - -static struct kvm_arch kvm_sparc64 = { - .ka_probe = _sparc64_probe, - .ka_initvtop = _sparc64_initvtop, - .ka_freevtop = _sparc64_freevtop, - .ka_kvatop = _sparc64_kvatop, - .ka_native = _sparc64_native, -}; - -KVM_ARCH(kvm_sparc64); diff --git a/lib/libkvm/kvm_sparc64.h b/lib/libkvm/kvm_sparc64.h deleted file mode 100644 index d46bcddc8d5..00000000000 --- a/lib/libkvm/kvm_sparc64.h +++ /dev/null @@ -1,117 +0,0 @@ -/*- - * Copyright (c) 2015 John H. Baldwin - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#ifndef __KVM_SPARC64_H__ -#define __KVM_SPARC64_H__ - -#ifdef __sparc64__ -#include -#include -#include -#include -#include -#endif - -#define SPARC64_PAGE_SHIFT 13 -#define SPARC64_PAGE_SIZE (1 << SPARC64_PAGE_SHIFT) -#define SPARC64_PAGE_MASK (SPARC64_PAGE_SIZE - 1) - -#define SPARC64_MIN_DIRECT_ADDRESS (0xfffff80000000000) - -#define SPARC64_DIRECT_ADDRESS_BITS (43) -#define SPARC64_DIRECT_ADDRESS_MASK \ - (((uint64_t)1 << SPARC64_DIRECT_ADDRESS_BITS) - 1) - -#define SPARC64_DIRECT_TO_PHYS(va) ((va) & SPARC64_DIRECT_ADDRESS_MASK) - -#define SPARC64_TTE_SHIFT (5) - -#define SPARC64_TD_SIZE_SHIFT (61) -#define SPARC64_TD_PA_SHIFT (13) - -#define SPARC64_TD_SIZE_BITS (2) -#define SPARC64_TD_PA_CH_BITS (30) /* US-III{,i,+}, US-IV{,+}, SPARC64 V */ -#define SPARC64_TD_PA_BITS SPARC64_TD_PA_CH_BITS - -#define SPARC64_TD_SIZE_MASK (((uint64_t)1 << SPARC64_TD_SIZE_BITS) - 1) -#define SPARC64_TD_PA_MASK (((uint64_t)1 << SPARC64_TD_PA_BITS) - 1) - -#define SPARC64_TD_V ((uint64_t)1 << 63) - -#define SPARC64_TV_SIZE_BITS (SPARC64_TD_SIZE_BITS) -#define SPARC64_TV_VPN(va, sz) \ - ((((va) >> SPARC64_TTE_PAGE_SHIFT(sz)) << SPARC64_TV_SIZE_BITS) | sz) - -#define SPARC64_TTE_SIZE_SPREAD (3) -#define SPARC64_TTE_PAGE_SHIFT(sz) \ - (SPARC64_PAGE_SHIFT + ((sz) * SPARC64_TTE_SIZE_SPREAD)) - -#define SPARC64_TTE_GET_SIZE(tp) \ - (((tp)->tte_data >> SPARC64_TD_SIZE_SHIFT) & SPARC64_TD_SIZE_MASK) - -#define SPARC64_TTE_GET_PA(tp) \ - ((tp)->tte_data & (SPARC64_TD_PA_MASK << SPARC64_TD_PA_SHIFT)) - -struct sparc64_tte { - uint64_t tte_vpn; - uint64_t tte_data; -}; - -static __inline int -sparc64_tte_match(struct sparc64_tte *tp, kvaddr_t va) -{ - - return (((tp->tte_data & SPARC64_TD_V) != 0) && - (tp->tte_vpn == SPARC64_TV_VPN(va, SPARC64_TTE_GET_SIZE(tp)))); -} - -#ifdef __sparc64__ -_Static_assert(PAGE_SHIFT == SPARC64_PAGE_SHIFT, "PAGE_SHIFT mismatch"); -_Static_assert(PAGE_SIZE == SPARC64_PAGE_SIZE, "PAGE_SIZE mismatch"); -_Static_assert(PAGE_MASK == SPARC64_PAGE_MASK, "PAGE_MASK mismatch"); -_Static_assert(VM_MIN_DIRECT_ADDRESS == SPARC64_MIN_DIRECT_ADDRESS, - "VM_MIN_DIRECT_ADDRESS mismatch"); -_Static_assert(TLB_DIRECT_ADDRESS_BITS == SPARC64_DIRECT_ADDRESS_BITS, - "TLB_DIRECT_ADDRESS_BITS mismatch"); -_Static_assert(TLB_DIRECT_ADDRESS_MASK == SPARC64_DIRECT_ADDRESS_MASK, - "TLB_DIRECT_ADDRESS_MASK mismatch"); -_Static_assert(TTE_SHIFT == SPARC64_TTE_SHIFT, "TTE_SHIFT mismatch"); -_Static_assert(TD_SIZE_SHIFT == SPARC64_TD_SIZE_SHIFT, - "TD_SIZE_SHIFT mismatch"); -_Static_assert(TD_PA_SHIFT == SPARC64_TD_PA_SHIFT, - "TD_PA_SHIFT mismatch"); -_Static_assert(TD_SIZE_BITS == SPARC64_TD_SIZE_BITS, "TD_SIZE_BITS mismatch"); -_Static_assert(TD_PA_BITS == SPARC64_TD_PA_BITS, "TD_PA_BITS mismatch"); -_Static_assert(TD_SIZE_MASK == SPARC64_TD_SIZE_MASK, "TD_SIZE_MASK mismatch"); -_Static_assert(TD_PA_MASK == SPARC64_TD_PA_MASK, "TD_PA_MASK mismatch"); -_Static_assert(TD_V == SPARC64_TD_V, "TD_V mismatch"); -_Static_assert(TV_SIZE_BITS == SPARC64_TV_SIZE_BITS, "TV_SIZE_BITS mismatch"); -_Static_assert(TTE_SIZE_SPREAD == SPARC64_TTE_SIZE_SPREAD, - "TTE_SIZE_SPREAD mismatch"); -#endif - -#endif /* !__KVM_SPARC64_H__ */ From feb2ecc3826dbb12c42a38a94ebe98e97c9c564d Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Wed, 12 Feb 2020 06:54:28 +0000 Subject: [PATCH 093/144] Remove excluding libproc and librtld_db on sparc64. --- lib/Makefile | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/lib/Makefile b/lib/Makefile index badffce7135..90fe4a90406 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -72,13 +72,13 @@ SUBDIR= ${SUBDIR_BOOTSTRAP} \ libpathconv \ libpcap \ libpjdlog \ - ${_libproc} \ + libproc \ libprocstat \ libregex \ librpcsvc \ librss \ librt \ - ${_librtld_db} \ + librtld_db \ libsbuf \ libsmb \ libsqlite3 \ @@ -195,11 +195,6 @@ SUBDIR.${MK_PMC}+= libipt SUBDIR.${MK_BHYVE}+= libvmmapi .endif -.if ${MACHINE_CPUARCH} != "sparc64" -_libproc= libproc -_librtld_db= librtld_db -.endif - .if ${MACHINE_ARCH} != "powerpc" SUBDIR.${MK_OPENMP}+= libomp .endif From 1ddf69c1dfbf54bf0c5e89ce4a643f82435759d6 Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Wed, 12 Feb 2020 06:54:34 +0000 Subject: [PATCH 094/144] Remove sparc64 specific warning suppression. --- lib/libarchive/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/libarchive/Makefile b/lib/libarchive/Makefile index 474a91f7dda..e297cd8e6eb 100644 --- a/lib/libarchive/Makefile +++ b/lib/libarchive/Makefile @@ -31,7 +31,7 @@ SHARED_CFLAGS+= -DHAVE_ICONV=1 -DHAVE_ICONV_H=1 -DICONV_CONST= .endif .if ${MACHINE_ARCH:Marm*} != "" || ${MACHINE_ARCH:Mmips*} != "" || \ - ${MACHINE_ARCH:Msparc64*} != "" || ${MACHINE_ARCH:Mpowerpc*} != "" + ${MACHINE_ARCH:Mpowerpc*} != "" NO_WCAST_ALIGN= yes .if ${MACHINE_ARCH:M*64*} == "" CFLAGS+= -DPPMD_32BIT From f0df5b8f2723ed0e79a4dfc6fb766df3e383b144 Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Wed, 12 Feb 2020 06:56:04 +0000 Subject: [PATCH 095/144] Remove sparc64 specific inclusion of bswap32 built-ins. --- lib/libcompiler_rt/Makefile.inc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/libcompiler_rt/Makefile.inc b/lib/libcompiler_rt/Makefile.inc index 93c4896c421..968a0c85bb9 100644 --- a/lib/libcompiler_rt/Makefile.inc +++ b/lib/libcompiler_rt/Makefile.inc @@ -244,8 +244,7 @@ SRCS+= sync_synchronize.S .endif # On some archs GCC-6.3 requires bswap32 built-in. -.if ${MACHINE_CPUARCH} == "mips" || ${MACHINE_CPUARCH} == "riscv" || \ - ${MACHINE_CPUARCH} == "sparc64" +.if ${MACHINE_CPUARCH} == "mips" || ${MACHINE_CPUARCH} == "riscv" SRCS+= bswapdi2.c SRCS+= bswapsi2.c .endif From fb1a29b45e8b722d63b20e5acf3fef6aa413930c Mon Sep 17 00:00:00 2001 From: Hans Petter Selasky Date: Wed, 12 Feb 2020 08:30:07 +0000 Subject: [PATCH 096/144] Make sure the so-called end of receive interrupts don't starve in iflib. When the receive ring cannot be filled with mbufs, due to lack of memory, no more interrupts may be generated to fill the receive ring later on. Make sure to have a watchdog, to try refilling the receive ring from time to time, hopefully when more mbufs are available. Differential Revision: https://reviews.freebsd.org/D23315 MFC after: 1 week Reviewed by: gallatin@ Sponsored by: Mellanox Technologies --- sys/net/iflib.c | 59 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 17 deletions(-) diff --git a/sys/net/iflib.c b/sys/net/iflib.c index a9fc8090c48..35e8a5c2327 100644 --- a/sys/net/iflib.c +++ b/sys/net/iflib.c @@ -129,6 +129,9 @@ __FBSDID("$FreeBSD$"); */ MALLOC_DEFINE(M_IFLIB, "iflib", "ifnet library"); +#define IFLIB_RXEOF_MORE (1U << 0) +#define IFLIB_RXEOF_EMPTY (2U << 0) + struct iflib_txq; typedef struct iflib_txq *iflib_txq_t; struct iflib_rxq; @@ -434,6 +437,7 @@ struct iflib_rxq { uint8_t ifr_fl_offset; struct lro_ctrl ifr_lc; struct grouptask ifr_task; + struct callout ifr_watchdog; struct iflib_filter_info ifr_filter_info; iflib_dma_info_t ifr_ifdi; @@ -1940,7 +1944,7 @@ _rxq_refill_cb(void *arg, bus_dma_segment_t *segs, int nseg, int error) * (Re)populate an rxq free-buffer list with up to @count new packet buffers. * The caller must assure that @count does not exceed the queue's capacity. */ -static void +static uint8_t _iflib_fl_refill(if_ctx_t ctx, iflib_fl_t fl, int count) { struct if_rxd_update iru; @@ -2069,9 +2073,11 @@ _iflib_fl_refill(if_ctx_t ctx, iflib_fl_t fl, int count) BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); ctx->isc_rxd_flush(ctx->ifc_softc, fl->ifl_rxq->ifr_id, fl->ifl_id, pidx); fl->ifl_fragidx = frag_idx; + + return (n == -1 ? 0 : IFLIB_RXEOF_EMPTY); } -static __inline void +static __inline uint8_t __iflib_fl_refill_lt(if_ctx_t ctx, iflib_fl_t fl, int max) { /* we avoid allowing pidx to catch up with cidx as it confuses ixl */ @@ -2084,7 +2090,8 @@ __iflib_fl_refill_lt(if_ctx_t ctx, iflib_fl_t fl, int max) MPASS(reclaimable == delta); if (reclaimable > 0) - _iflib_fl_refill(ctx, fl, min(max, reclaimable)); + return (_iflib_fl_refill(ctx, fl, min(max, reclaimable))); + return (0); } uint8_t @@ -2172,7 +2179,7 @@ iflib_fl_setup(iflib_fl_t fl) /* avoid pre-allocating zillions of clusters to an idle card * potentially speeding up attach */ - _iflib_fl_refill(ctx, fl, min(128, fl->ifl_size)); + (void) _iflib_fl_refill(ctx, fl, min(128, fl->ifl_size)); MPASS(min(128, fl->ifl_size) == fl->ifl_credits); if (min(128, fl->ifl_size) != fl->ifl_credits) return (ENOBUFS); @@ -2738,7 +2745,15 @@ iflib_get_ip_forwarding(struct lro_ctrl *lc __unused, bool *v4 __unused, bool *v } #endif -static bool +static void +_task_fn_rx_watchdog(void *context) +{ + iflib_rxq_t rxq = context; + + GROUPTASK_ENQUEUE(&rxq->ifr_task); +} + +static uint8_t iflib_rxeof(iflib_rxq_t rxq, qidx_t budget) { if_t ifp; @@ -2752,6 +2767,7 @@ iflib_rxeof(iflib_rxq_t rxq, qidx_t budget) iflib_fl_t fl; int lro_enabled; bool v4_forwarding, v6_forwarding, lro_possible; + uint8_t retval = 0; /* * XXX early demux data packets so that if_input processing only handles @@ -2772,9 +2788,9 @@ iflib_rxeof(iflib_rxq_t rxq, qidx_t budget) cidxp = &rxq->ifr_fl[0].ifl_cidx; if ((avail = iflib_rxd_avail(ctx, rxq, *cidxp, budget)) == 0) { for (i = 0, fl = &rxq->ifr_fl[0]; i < sctx->isc_nfl; i++, fl++) - __iflib_fl_refill_lt(ctx, fl, budget + 8); + retval |= __iflib_fl_refill_lt(ctx, fl, budget + 8); DBG_COUNTER_INC(rx_unavail); - return (false); + return (retval); } /* pfil needs the vnet to be set */ @@ -2832,7 +2848,7 @@ iflib_rxeof(iflib_rxq_t rxq, qidx_t budget) CURVNET_RESTORE(); /* make sure that we can refill faster than drain */ for (i = 0, fl = &rxq->ifr_fl[0]; i < sctx->isc_nfl; i++, fl++) - __iflib_fl_refill_lt(ctx, fl, budget + 8); + retval |= __iflib_fl_refill_lt(ctx, fl, budget + 8); lro_enabled = (if_getcapenable(ifp) & IFCAP_LRO); if (lro_enabled) @@ -2891,15 +2907,15 @@ iflib_rxeof(iflib_rxq_t rxq, qidx_t budget) #if defined(INET6) || defined(INET) tcp_lro_flush_all(&rxq->ifr_lc); #endif - if (avail) - return true; - return (iflib_rxd_avail(ctx, rxq, *cidxp, 1)); + if (avail != 0 || iflib_rxd_avail(ctx, rxq, *cidxp, 1) != 0) + retval |= IFLIB_RXEOF_MORE; + return (retval); err: STATE_LOCK(ctx); ctx->ifc_flags |= IFC_DO_RESET; iflib_admin_intr_deferred(ctx); STATE_UNLOCK(ctx); - return (false); + return (0); } #define TXD_NOTIFY_COUNT(txq) (((txq)->ift_size / (txq)->ift_update_freq)-1) @@ -3783,7 +3799,7 @@ _task_fn_rx(void *context) { iflib_rxq_t rxq = context; if_ctx_t ctx = rxq->ifr_ctx; - bool more; + uint8_t more; uint16_t budget; #ifdef IFLIB_DIAGNOSTICS @@ -3792,19 +3808,23 @@ _task_fn_rx(void *context) DBG_COUNTER_INC(task_fn_rxs); if (__predict_false(!(if_getdrvflags(ctx->ifc_ifp) & IFF_DRV_RUNNING))) return; - more = true; #ifdef DEV_NETMAP if (if_getcapenable(ctx->ifc_ifp) & IFCAP_NETMAP) { u_int work = 0; if (netmap_rx_irq(ctx->ifc_ifp, rxq->ifr_id, &work)) { - more = false; + more = 0; + goto skip_rxeof; } } #endif budget = ctx->ifc_sysctl_rx_budget; if (budget == 0) budget = 16; /* XXX */ - if (more == false || (more = iflib_rxeof(rxq, budget)) == false) { + more = iflib_rxeof(rxq, budget); +#ifdef DEV_NETMAP +skip_rxeof: +#endif + if ((more & IFLIB_RXEOF_MORE) == 0) { if (ctx->ifc_flags & IFC_LEGACY) IFDI_INTR_ENABLE(ctx); else @@ -3813,8 +3833,11 @@ _task_fn_rx(void *context) } if (__predict_false(!(if_getdrvflags(ctx->ifc_ifp) & IFF_DRV_RUNNING))) return; - if (more) + + if (more & IFLIB_RXEOF_MORE) GROUPTASK_ENQUEUE(&rxq->ifr_task); + else if (more & IFLIB_RXEOF_EMPTY) + callout_reset_curcpu(&rxq->ifr_watchdog, 1, &_task_fn_rx_watchdog, rxq); } static void @@ -5031,6 +5054,7 @@ iflib_pseudo_deregister(if_ctx_t ctx) taskqgroup_detach(tqg, &txq->ift_task); } for (i = 0, rxq = ctx->ifc_rxqs; i < NRXQSETS(ctx); i++, rxq++) { + callout_drain(&rxq->ifr_watchdog); if (rxq->ifr_task.gt_uniq != NULL) taskqgroup_detach(tqg, &rxq->ifr_task); @@ -5533,6 +5557,7 @@ iflib_queues_alloc(if_ctx_t ctx) for (rxconf = i = 0; i < nrxqsets; i++, rxconf++, rxq++) { /* Set up some basics */ + callout_init(&rxq->ifr_watchdog, 1); if ((ifdip = malloc(sizeof(struct iflib_dma_info) * nrxqs, M_IFLIB, M_NOWAIT | M_ZERO)) == NULL) { From f98977b52145e60766f2358b32b0211aca90782b Mon Sep 17 00:00:00 2001 From: Hans Petter Selasky Date: Wed, 12 Feb 2020 09:19:47 +0000 Subject: [PATCH 097/144] Use NET_TASK_INIT() and NET_GROUPTASK_INIT() for drivers that process incoming packets in taskqueue context. This patch extends r357772. Tested by: yp@mm.st Sponsored by: Mellanox Technologies --- sys/net/iflib.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sys/net/iflib.c b/sys/net/iflib.c index 35e8a5c2327..d06fbf6ec01 100644 --- a/sys/net/iflib.c +++ b/sys/net/iflib.c @@ -6060,23 +6060,25 @@ iflib_softirq_alloc_generic(if_ctx_t ctx, if_irq_t irq, iflib_intr_type_t type, gtask = &ctx->ifc_txqs[qid].ift_task; tqg = qgroup_if_io_tqg; fn = _task_fn_tx; + GROUPTASK_INIT(gtask, 0, fn, q); break; case IFLIB_INTR_RX: q = &ctx->ifc_rxqs[qid]; gtask = &ctx->ifc_rxqs[qid].ifr_task; tqg = qgroup_if_io_tqg; fn = _task_fn_rx; + NET_GROUPTASK_INIT(gtask, 0, fn, q); break; case IFLIB_INTR_IOV: q = ctx; gtask = &ctx->ifc_vflr_task; tqg = qgroup_if_config_tqg; fn = _task_fn_iov; + GROUPTASK_INIT(gtask, 0, fn, q); break; default: panic("unknown net intr type"); } - GROUPTASK_INIT(gtask, 0, fn, q); if (irq != NULL) { err = iflib_irq_set_affinity(ctx, irq, type, qid, gtask, tqg, q, name); @@ -6111,7 +6113,6 @@ iflib_legacy_setup(if_ctx_t ctx, driver_filter_t filter, void *filter_arg, int * struct grouptask *gtask; struct resource *res; struct taskqgroup *tqg; - gtask_fn_t *fn; void *q; int err, tqrid; bool rx_only; @@ -6121,7 +6122,6 @@ iflib_legacy_setup(if_ctx_t ctx, driver_filter_t filter, void *filter_arg, int * gtask = &rxq[0].ifr_task; tqg = qgroup_if_io_tqg; tqrid = *rid; - fn = _task_fn_rx; rx_only = (ctx->ifc_sctx->isc_flags & IFLIB_SINGLE_IRQ_RX_ONLY) != 0; ctx->ifc_flags |= IFC_LEGACY; @@ -6136,7 +6136,7 @@ iflib_legacy_setup(if_ctx_t ctx, driver_filter_t filter, void *filter_arg, int * iflib_fast_intr_rxtx, NULL, info, name); if (err != 0) return (err); - GROUPTASK_INIT(gtask, 0, fn, q); + NET_GROUPTASK_INIT(gtask, 0, _task_fn_rx, q); res = irq->ii_res; taskqgroup_attach(tqg, gtask, q, dev, res, name); From f14d849862946c8bc241b901706929a2920005e8 Mon Sep 17 00:00:00 2001 From: Hans Petter Selasky Date: Wed, 12 Feb 2020 09:58:19 +0000 Subject: [PATCH 098/144] Add support for disabling and polling MSIX interrupts in mlx5core. MFC after: 1 week Sponsored by: Mellanox Technologies --- sys/dev/mlx5/driver.h | 3 +++ sys/dev/mlx5/mlx5_core/mlx5_eq.c | 25 +++++++++++++++++++++++++ sys/dev/mlx5/mlx5_core/mlx5_main.c | 4 ++-- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/sys/dev/mlx5/driver.h b/sys/dev/mlx5/driver.h index e2a68725751..b9d453e6ebd 100644 --- a/sys/dev/mlx5/driver.h +++ b/sys/dev/mlx5/driver.h @@ -1180,4 +1180,7 @@ static inline bool mlx5_rl_is_supported(struct mlx5_core_dev *dev) } #endif +void mlx5_disable_interrupts(struct mlx5_core_dev *); +void mlx5_poll_interrupts(struct mlx5_core_dev *); + #endif /* MLX5_DRIVER_H */ diff --git a/sys/dev/mlx5/mlx5_core/mlx5_eq.c b/sys/dev/mlx5/mlx5_core/mlx5_eq.c index c83973cc14b..0aed35fec71 100644 --- a/sys/dev/mlx5/mlx5_core/mlx5_eq.c +++ b/sys/dev/mlx5/mlx5_core/mlx5_eq.c @@ -739,3 +739,28 @@ static void mlx5_port_general_notification_event(struct mlx5_core_dev *dev, } } +void +mlx5_disable_interrupts(struct mlx5_core_dev *dev) +{ + int nvec = dev->priv.eq_table.num_comp_vectors + MLX5_EQ_VEC_COMP_BASE; + int x; + + for (x = 0; x != nvec; x++) + disable_irq(dev->priv.msix_arr[x].vector); +} + +void +mlx5_poll_interrupts(struct mlx5_core_dev *dev) +{ + struct mlx5_eq *eq; + + if (unlikely(dev->priv.disable_irqs != 0)) + return; + + mlx5_eq_int(dev, &dev->priv.eq_table.cmd_eq); + mlx5_eq_int(dev, &dev->priv.eq_table.async_eq); + mlx5_eq_int(dev, &dev->priv.eq_table.pages_eq); + + list_for_each_entry(eq, &dev->priv.eq_table.comp_eqs_list, list) + mlx5_eq_int(dev, eq); +} diff --git a/sys/dev/mlx5/mlx5_core/mlx5_main.c b/sys/dev/mlx5/mlx5_core/mlx5_main.c index b13fa93ae58..f5809a28540 100644 --- a/sys/dev/mlx5/mlx5_core/mlx5_main.c +++ b/sys/dev/mlx5/mlx5_core/mlx5_main.c @@ -1585,7 +1585,7 @@ done: return 0; } -static void mlx5_disable_interrupts(struct mlx5_core_dev *mdev) +static void mlx5_shutdown_disable_interrupts(struct mlx5_core_dev *mdev) { int nvec = mdev->priv.eq_table.num_comp_vectors + MLX5_EQ_VEC_COMP_BASE; int x; @@ -1609,7 +1609,7 @@ static void shutdown_one(struct pci_dev *pdev) set_bit(MLX5_INTERFACE_STATE_TEARDOWN, &dev->intf_state); /* disable all interrupts */ - mlx5_disable_interrupts(dev); + mlx5_shutdown_disable_interrupts(dev); err = mlx5_try_fast_unload(dev); if (err) From 01651e961573e13e8e61154047f6e51a0eb5edb5 Mon Sep 17 00:00:00 2001 From: Hans Petter Selasky Date: Wed, 12 Feb 2020 10:03:25 +0000 Subject: [PATCH 099/144] Add support for debugnet in mlx5en(4). MFC after: 1 week Sponsored by: Mellanox Technologies --- sys/dev/mlx5/mlx5_en/mlx5_en_main.c | 72 +++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/sys/dev/mlx5/mlx5_en/mlx5_en_main.c b/sys/dev/mlx5/mlx5_en/mlx5_en_main.c index 504f6c01591..98f06af5230 100644 --- a/sys/dev/mlx5/mlx5_en/mlx5_en_main.c +++ b/sys/dev/mlx5/mlx5_en/mlx5_en_main.c @@ -33,6 +33,8 @@ #include #include +#include + #ifndef ETH_DRIVER_VERSION #define ETH_DRIVER_VERSION "3.5.2" #endif @@ -399,6 +401,8 @@ static const struct media mlx5e_ext_mode_table[MLX5E_EXT_LINK_SPEEDS_NUMBER][MLX }, }; +DEBUGNET_DEFINE(mlx5_en); + MALLOC_DEFINE(M_MLX5EN, "MLX5EN", "MLX5 Ethernet"); static void @@ -4444,6 +4448,9 @@ mlx5e_create_ifp(struct mlx5_core_dev *mdev) /* Set autoselect by default */ ifmedia_set(&priv->media, IFM_ETHER | IFM_AUTO | IFM_FDX | IFM_ETH_RXPAUSE | IFM_ETH_TXPAUSE); + + DEBUGNET_SET(ifp, mlx5_en); + ether_ifattach(ifp, dev_addr); /* Register for VLAN events */ @@ -4591,6 +4598,71 @@ mlx5e_destroy_ifp(struct mlx5_core_dev *mdev, void *vpriv) free(priv, M_MLX5EN); } +#ifdef DEBUGNET +static void +mlx5_en_debugnet_init(struct ifnet *dev, int *nrxr, int *ncl, int *clsize) +{ + struct mlx5e_priv *priv = if_getsoftc(dev); + + PRIV_LOCK(priv); + *nrxr = priv->params.num_channels; + *ncl = DEBUGNET_MAX_IN_FLIGHT; + *clsize = MLX5E_MAX_RX_BYTES; + PRIV_UNLOCK(priv); +} + +static void +mlx5_en_debugnet_event(struct ifnet *dev, enum debugnet_ev event) +{ +} + +static int +mlx5_en_debugnet_transmit(struct ifnet *dev, struct mbuf *m) +{ + struct mlx5e_priv *priv = if_getsoftc(dev); + struct mlx5e_sq *sq; + int err; + + if ((if_getdrvflags(dev) & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) != + IFF_DRV_RUNNING || (priv->media_status_last & IFM_ACTIVE) == 0) + return (ENOENT); + + sq = &priv->channel[0].sq[0]; + + if (sq->running == 0) { + m_freem(m); + return (ENOENT); + } + + if (mlx5e_sq_xmit(sq, &m) != 0) { + m_freem(m); + err = ENOBUFS; + } else { + err = 0; + } + + if (likely(sq->doorbell.d64 != 0)) { + mlx5e_tx_notify_hw(sq, sq->doorbell.d32, 0); + sq->doorbell.d64 = 0; + } + return (err); +} + +static int +mlx5_en_debugnet_poll(struct ifnet *dev, int count) +{ + struct mlx5e_priv *priv = if_getsoftc(dev); + + if ((if_getdrvflags(dev) & IFF_DRV_RUNNING) == 0 || + (priv->media_status_last & IFM_ACTIVE) == 0) + return (ENOENT); + + mlx5_poll_interrupts(priv->mdev); + + return (0); +} +#endif /* DEBUGNET */ + static void * mlx5e_get_ifp(void *vpriv) { From 48baf00f547e84a666cb38d3ccba4fe35fa468c1 Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Wed, 12 Feb 2020 11:10:10 +0000 Subject: [PATCH 100/144] epoch: convert zpcpu_get_cpua(.., curcpu) to zpcpu_get --- sys/kern/subr_epoch.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/kern/subr_epoch.c b/sys/kern/subr_epoch.c index 0a477e1d6f7..9d396f627ee 100644 --- a/sys/kern/subr_epoch.c +++ b/sys/kern/subr_epoch.c @@ -357,7 +357,7 @@ static epoch_record_t epoch_currecord(epoch_t epoch) { - return (zpcpu_get_cpu(epoch->e_pcpu_record, curcpu)); + return (zpcpu_get(epoch->e_pcpu_record)); } #define INIT_CHECK(epoch) \ From 3acb6572fc0ef19119240a319873fa75fd597f28 Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Wed, 12 Feb 2020 11:11:22 +0000 Subject: [PATCH 101/144] Store offset into zpcpu allocations in the per-cpu area. This shorten zpcpu_get and allows more optimizations. Reviewed by: jeff Differential Revision: https://reviews.freebsd.org/D23570 --- sys/kern/subr_pcpu.c | 1 + sys/riscv/include/pcpu.h | 2 +- sys/sys/pcpu.h | 19 +++++++++++++++++-- sys/vm/uma_core.c | 15 ++++++++++----- 4 files changed, 29 insertions(+), 8 deletions(-) diff --git a/sys/kern/subr_pcpu.c b/sys/kern/subr_pcpu.c index 666428b9b08..101440e3b1e 100644 --- a/sys/kern/subr_pcpu.c +++ b/sys/kern/subr_pcpu.c @@ -95,6 +95,7 @@ pcpu_init(struct pcpu *pcpu, int cpuid, size_t size) cpu_pcpu_init(pcpu, cpuid, size); pcpu->pc_rm_queue.rmq_next = &pcpu->pc_rm_queue; pcpu->pc_rm_queue.rmq_prev = &pcpu->pc_rm_queue; + pcpu->pc_zpcpu_offset = zpcpu_offset_cpu(cpuid); } void diff --git a/sys/riscv/include/pcpu.h b/sys/riscv/include/pcpu.h index 28c5a7422d1..46b258380a1 100644 --- a/sys/riscv/include/pcpu.h +++ b/sys/riscv/include/pcpu.h @@ -48,7 +48,7 @@ struct pmap *pc_curpmap; /* Currently active pmap */ \ uint32_t pc_pending_ipis; /* IPIs pending to this CPU */ \ uint32_t pc_hart; /* Hart ID */ \ - char __pad[57] + char __pad[49] #ifdef _KERNEL diff --git a/sys/sys/pcpu.h b/sys/sys/pcpu.h index 0a6764b80e9..954fba8507e 100644 --- a/sys/sys/pcpu.h +++ b/sys/sys/pcpu.h @@ -194,6 +194,7 @@ struct pcpu { struct rm_queue pc_rm_queue; /* rmlock list of trackers */ uintptr_t pc_dynamic; /* Dynamic per-cpu data area */ uint64_t pc_early_dummy_counter; /* Startup time counter(9) */ + uintptr_t pc_zpcpu_offset; /* Offset into zpcpu allocs */ /* * Keep MD fields last, so that CPU-specific variations on a @@ -227,14 +228,28 @@ extern struct pcpu *cpuid_to_pcpu[]; #endif #define curproc (curthread->td_proc) +#ifndef zpcpu_offset_cpu +#define zpcpu_offset_cpu(cpu) (UMA_PCPU_ALLOC_SIZE * cpu) +#endif +#ifndef zpcpu_offset +#define zpcpu_offset() (PCPU_GET(zpcpu_offset)) +#endif + +#ifndef zpcpu_base_to_offset +#define zpcpu_base_to_offset(base) (base) +#endif +#ifndef zpcpu_offset_to_base +#define zpcpu_offset_to_base(base) (base) +#endif + /* Accessor to elements allocated via UMA_ZONE_PCPU zone. */ #define zpcpu_get(base) ({ \ - __typeof(base) _ptr = (void *)((char *)(base) + UMA_PCPU_ALLOC_SIZE * curcpu); \ + __typeof(base) _ptr = (void *)((char *)(base) + zpcpu_offset()); \ _ptr; \ }) #define zpcpu_get_cpu(base, cpu) ({ \ - __typeof(base) _ptr = (void *)((char *)(base) + UMA_PCPU_ALLOC_SIZE * cpu); \ + __typeof(base) _ptr = (void *)((char *)(base) + zpcpu_offset_cpu(cpu)); \ _ptr; \ }) diff --git a/sys/vm/uma_core.c b/sys/vm/uma_core.c index f4632036ca4..8618a620ef7 100644 --- a/sys/vm/uma_core.c +++ b/sys/vm/uma_core.c @@ -2944,34 +2944,39 @@ uma_zwait(uma_zone_t zone) void * uma_zalloc_pcpu_arg(uma_zone_t zone, void *udata, int flags) { - void *item; + void *item, *pcpu_item; #ifdef SMP int i; MPASS(zone->uz_flags & UMA_ZONE_PCPU); #endif item = uma_zalloc_arg(zone, udata, flags & ~M_ZERO); - if (item != NULL && (flags & M_ZERO)) { + if (item == NULL) + return (NULL); + pcpu_item = zpcpu_base_to_offset(item); + if (flags & M_ZERO) { #ifdef SMP for (i = 0; i <= mp_maxid; i++) - bzero(zpcpu_get_cpu(item, i), zone->uz_size); + bzero(zpcpu_get_cpu(pcpu_item, i), zone->uz_size); #else bzero(item, zone->uz_size); #endif } - return (item); + return (pcpu_item); } /* * A stub while both regular and pcpu cases are identical. */ void -uma_zfree_pcpu_arg(uma_zone_t zone, void *item, void *udata) +uma_zfree_pcpu_arg(uma_zone_t zone, void *pcpu_item, void *udata) { + void *item; #ifdef SMP MPASS(zone->uz_flags & UMA_ZONE_PCPU); #endif + item = zpcpu_offset_to_base(pcpu_item); uma_zfree_arg(zone, item, udata); } From fb886947d97375ea9906fa1396f83573b6d0674b Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Wed, 12 Feb 2020 11:12:13 +0000 Subject: [PATCH 102/144] amd64: store per-cpu allocations subtracted by __pcpu This eliminates a runtime subtraction from counter_u64_add. before: mov 0x4f00ed(%rip),%rax # 0xffffffff80c01788 sub 0x808ff6(%rip),%rax # 0xffffffff80f1a698 <__pcpu> addq $0x1,%gs:(%rax) after: mov 0x4f02fd(%rip),%rax # 0xffffffff80c01788 addq $0x1,%gs:(%rax) Reviewed by: jeff Differential Revision: https://reviews.freebsd.org/D23570 --- sys/amd64/include/counter.h | 6 ++++-- sys/amd64/include/pcpu.h | 4 ++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/sys/amd64/include/counter.h b/sys/amd64/include/counter.h index e1b159482a6..a3c7cecbc91 100644 --- a/sys/amd64/include/counter.h +++ b/sys/amd64/include/counter.h @@ -33,7 +33,7 @@ #include -#define EARLY_COUNTER &temp_bsp_pcpu.pc_early_dummy_counter +#define EARLY_COUNTER (void *)__offsetof(struct pcpu, pc_early_dummy_counter) #define counter_enter() do {} while (0) #define counter_exit() do {} while (0) @@ -43,6 +43,7 @@ static inline uint64_t counter_u64_read_one(counter_u64_t c, int cpu) { + MPASS(c != EARLY_COUNTER); return (*zpcpu_get_cpu(c, cpu)); } @@ -65,6 +66,7 @@ counter_u64_zero_one_cpu(void *arg) counter_u64_t c; c = arg; + MPASS(c != EARLY_COUNTER); *(zpcpu_get(c)) = 0; } @@ -86,7 +88,7 @@ counter_u64_add(counter_u64_t c, int64_t inc) KASSERT(IS_BSP() || c != EARLY_COUNTER, ("EARLY_COUNTER used on AP")); __asm __volatile("addq\t%1,%%gs:(%0)" : - : "r" ((char *)c - (char *)&__pcpu[0]), "ri" (inc) + : "r" (c), "ri" (inc) : "memory", "cc"); } diff --git a/sys/amd64/include/pcpu.h b/sys/amd64/include/pcpu.h index 24388e204df..718c36d792f 100644 --- a/sys/amd64/include/pcpu.h +++ b/sys/amd64/include/pcpu.h @@ -240,6 +240,10 @@ _Static_assert(sizeof(struct monitorbuf) == 128, "2x cache line"); #define IS_BSP() (PCPU_GET(cpuid) == 0) +#define zpcpu_offset_cpu(cpu) ((uintptr_t)&__pcpu[0] + UMA_PCPU_ALLOC_SIZE * cpu) +#define zpcpu_base_to_offset(base) (void *)((uintptr_t)(base) - (uintptr_t)&__pcpu[0]) +#define zpcpu_offset_to_base(base) (void *)((uintptr_t)(base) + (uintptr_t)&__pcpu[0]) + #else /* !__GNUCLIKE_ASM || !__GNUCLIKE___TYPEOF */ #error "this file needs to be ported to your compiler" From bee115bc59bb89662fb0a45b4787fc54b2d37a08 Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Wed, 12 Feb 2020 11:14:23 +0000 Subject: [PATCH 103/144] Dedup zpcpu assertions into one macro and guard the rest with #ifndef Sponsored by: The FreeBSD Foundation --- sys/sys/pcpu.h | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/sys/sys/pcpu.h b/sys/sys/pcpu.h index 954fba8507e..43827b1af4f 100644 --- a/sys/sys/pcpu.h +++ b/sys/sys/pcpu.h @@ -228,6 +228,10 @@ extern struct pcpu *cpuid_to_pcpu[]; #endif #define curproc (curthread->td_proc) +#ifndef ZPCPU_ASSERT_PROTECTED +#define ZPCPU_ASSERT_PROTECTED() MPASS(curthread->td_critnest > 0) +#endif + #ifndef zpcpu_offset_cpu #define zpcpu_offset_cpu(cpu) (UMA_PCPU_ALLOC_SIZE * cpu) #endif @@ -277,26 +281,32 @@ extern struct pcpu *cpuid_to_pcpu[]; _old; \ }) +#ifndef zpcpu_set_protected #define zpcpu_set_protected(base, val) ({ \ - MPASS(curthread->td_critnest > 0); \ + ZPCPU_ASSERT_PROTECTED(); \ __typeof(val) *_ptr = zpcpu_get(base); \ \ *_ptr = (val); \ }) +#endif +#ifndef zpcpu_add_protected #define zpcpu_add_protected(base, val) ({ \ - MPASS(curthread->td_critnest > 0); \ + ZPCPU_ASSERT_PROTECTED(); \ __typeof(val) *_ptr = zpcpu_get(base); \ \ *_ptr += (val); \ }) +#endif +#ifndef zpcpu_sub_protected #define zpcpu_sub_protected(base, val) ({ \ - MPASS(curthread->td_critnest > 0); \ + ZPCPU_ASSERT_PROTECTED(); \ __typeof(val) *_ptr = zpcpu_get(base); \ \ *_ptr -= (val); \ }) +#endif /* * Machine dependent callouts. cpu_pcpu_init() is responsible for From 2318ed25086624c03651a377a386f74dfd8ab4d5 Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Wed, 12 Feb 2020 11:15:33 +0000 Subject: [PATCH 104/144] amd64: provide custom zpcpu set/add/sub routines Note that clobbers are highly overzealous, can be cleaned up later. --- sys/amd64/include/counter.h | 5 +--- sys/amd64/include/pcpu.h | 57 +++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 4 deletions(-) diff --git a/sys/amd64/include/counter.h b/sys/amd64/include/counter.h index a3c7cecbc91..e7eb19e058c 100644 --- a/sys/amd64/include/counter.h +++ b/sys/amd64/include/counter.h @@ -86,10 +86,7 @@ counter_u64_add(counter_u64_t c, int64_t inc) { KASSERT(IS_BSP() || c != EARLY_COUNTER, ("EARLY_COUNTER used on AP")); - __asm __volatile("addq\t%1,%%gs:(%0)" - : - : "r" (c), "ri" (inc) - : "memory", "cc"); + zpcpu_add(c, inc); } #endif /* ! __MACHINE_COUNTER_H__ */ diff --git a/sys/amd64/include/pcpu.h b/sys/amd64/include/pcpu.h index 718c36d792f..b7b546ed2b6 100644 --- a/sys/amd64/include/pcpu.h +++ b/sys/amd64/include/pcpu.h @@ -244,6 +244,63 @@ _Static_assert(sizeof(struct monitorbuf) == 128, "2x cache line"); #define zpcpu_base_to_offset(base) (void *)((uintptr_t)(base) - (uintptr_t)&__pcpu[0]) #define zpcpu_offset_to_base(base) (void *)((uintptr_t)(base) + (uintptr_t)&__pcpu[0]) +#define zpcpu_sub_protected(base, n) do { \ + ZPCPU_ASSERT_PROTECTED(); \ + zpcpu_sub(base, n); \ +} while (0) + +#define zpcpu_set_protected(base, n) do { \ + __typeof(*base) __n = (n); \ + ZPCPU_ASSERT_PROTECTED(); \ + switch (sizeof(*base)) { \ + case 4: \ + __asm __volatile("movl\t%1,%%gs:(%0)" \ + : : "r" (base), "ri" (__n) : "memory", "cc"); \ + break; \ + case 8: \ + __asm __volatile("movq\t%1,%%gs:(%0)" \ + : : "r" (base), "ri" (__n) : "memory", "cc"); \ + break; \ + default: \ + *zpcpu_get(base) = __n; \ + } \ +} while (0); + +#define zpcpu_add(base, n) do { \ + __typeof(*base) __n = (n); \ + CTASSERT(sizeof(*base) == 4 || sizeof(*base) == 8); \ + switch (sizeof(*base)) { \ + case 4: \ + __asm __volatile("addl\t%1,%%gs:(%0)" \ + : : "r" (base), "ri" (__n) : "memory", "cc"); \ + break; \ + case 8: \ + __asm __volatile("addq\t%1,%%gs:(%0)" \ + : : "r" (base), "ri" (__n) : "memory", "cc"); \ + break; \ + } \ +} while (0) + +#define zpcpu_add_protected(base, n) do { \ + ZPCPU_ASSERT_PROTECTED(); \ + zpcpu_add(base, n); \ +} while (0) + +#define zpcpu_sub(base, n) do { \ + __typeof(*base) __n = (n); \ + CTASSERT(sizeof(*base) == 4 || sizeof(*base) == 8); \ + switch (sizeof(*base)) { \ + case 4: \ + __asm __volatile("subl\t%1,%%gs:(%0)" \ + : : "r" (base), "ri" (__n) : "memory", "cc"); \ + break; \ + case 8: \ + __asm __volatile("subq\t%1,%%gs:(%0)" \ + : : "r" (base), "ri" (__n) : "memory", "cc"); \ + break; \ + } \ +} while (0); + #else /* !__GNUCLIKE_ASM || !__GNUCLIKE___TYPEOF */ #error "this file needs to be ported to your compiler" From e4f584971bb46f6b772c625c30d9b8a8da4bc64e Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Wed, 12 Feb 2020 11:16:55 +0000 Subject: [PATCH 105/144] Add smp_rendezvous_cpus_retry This is a wrapper around smp_rendezvous_cpus which enables use of IPI handlers which can fail and require retrying. wait_func argument is added to to provide a routine which can be used to poll CPU of interest for when the IPI can be retried. Handlers which succeed must call smp_rendezvous_cpus_done to denote that fact. Discussed with: jeff Differential Revision: https://reviews.freebsd.org/D23582 --- sys/kern/subr_smp.c | 41 +++++++++++++++++++++++++++++++++++++++++ sys/sys/smp.h | 13 +++++++++++++ 2 files changed, 54 insertions(+) diff --git a/sys/kern/subr_smp.c b/sys/kern/subr_smp.c index 818858909d7..93df59f32ee 100644 --- a/sys/kern/subr_smp.c +++ b/sys/kern/subr_smp.c @@ -884,6 +884,47 @@ smp_no_rendezvous_barrier(void *dummy) #endif } +void +smp_rendezvous_cpus_retry(cpuset_t map, + void (* setup_func)(void *), + void (* action_func)(void *), + void (* teardown_func)(void *), + void (* wait_func)(void *, int), + struct smp_rendezvous_cpus_retry_arg *arg) +{ + int cpu; + + /* + * Execute an action on all specified CPUs while retrying until they + * all acknowledge completion. + */ + CPU_COPY(&map, &arg->cpus); + for (;;) { + smp_rendezvous_cpus( + arg->cpus, + setup_func, + action_func, + teardown_func, + arg); + + if (CPU_EMPTY(&arg->cpus)) + break; + + CPU_FOREACH(cpu) { + if (!CPU_ISSET(cpu, &arg->cpus)) + continue; + wait_func(arg, cpu); + } + } +} + +void +smp_rendezvous_cpus_done(struct smp_rendezvous_cpus_retry_arg *arg) +{ + + CPU_CLR_ATOMIC(curcpu, &arg->cpus); +} + /* * Wait for specified idle threads to switch once. This ensures that even * preempted threads have cycled through the switch function once, diff --git a/sys/sys/smp.h b/sys/sys/smp.h index 212ae6c35e5..a7ca84e92bc 100644 --- a/sys/sys/smp.h +++ b/sys/sys/smp.h @@ -276,6 +276,19 @@ void smp_rendezvous_cpus(cpuset_t, void (*)(void *), void (*)(void *), void *arg); + +struct smp_rendezvous_cpus_retry_arg { + cpuset_t cpus; +}; +void smp_rendezvous_cpus_retry(cpuset_t, + void (*)(void *), + void (*)(void *), + void (*)(void *), + void (*)(void *, int), + struct smp_rendezvous_cpus_retry_arg *); + +void smp_rendezvous_cpus_done(struct smp_rendezvous_cpus_retry_arg *); + #endif /* !LOCORE */ #endif /* _KERNEL */ #endif /* _SYS_SMP_H_ */ From 00ac9d2632391c51891d45d97c7cf0a761c1ba84 Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Wed, 12 Feb 2020 11:17:18 +0000 Subject: [PATCH 106/144] rms: use smp_rendezvous_cpus_retry instead of a hand-rolled variant --- sys/kern/kern_rmlock.c | 75 ++++++++++++++---------------------------- 1 file changed, 25 insertions(+), 50 deletions(-) diff --git a/sys/kern/kern_rmlock.c b/sys/kern/kern_rmlock.c index 5fe9c20f641..e7076a19aec 100644 --- a/sys/kern/kern_rmlock.c +++ b/sys/kern/kern_rmlock.c @@ -991,17 +991,17 @@ rms_runlock(struct rmslock *rms) struct rmslock_ipi { struct rmslock *rms; - cpuset_t signal; + struct smp_rendezvous_cpus_retry_arg srcra; }; static void -rms_wlock_IPI(void *arg) +rms_action_func(void *arg) { struct rmslock_ipi *rmsipi; struct rmslock *rms; int readers; - rmsipi = arg; + rmsipi = __containerof(arg, struct rmslock_ipi, srcra); rms = rmsipi->rms; if (*zpcpu_get(rms->readers_influx)) @@ -1009,65 +1009,40 @@ rms_wlock_IPI(void *arg) readers = zpcpu_replace(rms->readers_pcpu, 0); if (readers != 0) atomic_add_int(&rms->readers, readers); - CPU_CLR_ATOMIC(curcpu, &rmsipi->signal); + smp_rendezvous_cpus_done(arg); +} + +static void +rms_wait_func(void *arg, int cpu) +{ + struct rmslock_ipi *rmsipi; + struct rmslock *rms; + int *in_op; + + rmsipi = __containerof(arg, struct rmslock_ipi, srcra); + rms = rmsipi->rms; + + in_op = zpcpu_get_cpu(rms->readers_influx, cpu); + while (atomic_load_int(in_op)) + cpu_spinwait(); } static void rms_wlock_switch(struct rmslock *rms) { struct rmslock_ipi rmsipi; - int *in_op; - int cpu; MPASS(rms->readers == 0); MPASS(rms->writers == 1); rmsipi.rms = rms; - /* - * Publishes rms->writers. rlock and runlock will get this ordered - * via IPI in the worst case. - */ - atomic_thread_fence_rel(); - - /* - * Collect reader counts from all CPUs using an IPI. The handler can - * find itself running while the interrupted CPU was doing either - * rlock or runlock in which case it will fail. - * - * Successful attempts clear the cpu id in the bitmap. - * - * In case of failure we observe all failing CPUs not executing there to - * determine when to make the next attempt. Note that threads having - * the var set have preemption disabled. Setting of readers_influx - * only uses compiler barriers making these loads unreliable, which is - * fine -- the IPI handler will always see the correct result. - * - * We retry until all counts are collected. Forward progress is - * guaranteed by that fact that the total number of threads which can - * be caught like this is finite and they all are going to block on - * their own. - */ - CPU_COPY(&all_cpus, &rmsipi.signal); - for (;;) { - smp_rendezvous_cpus( - rmsipi.signal, - smp_no_rendezvous_barrier, - rms_wlock_IPI, - smp_no_rendezvous_barrier, - &rmsipi); - - if (CPU_EMPTY(&rmsipi.signal)) - break; - - CPU_FOREACH(cpu) { - if (!CPU_ISSET(cpu, &rmsipi.signal)) - continue; - in_op = zpcpu_get_cpu(rms->readers_influx, cpu); - while (atomic_load_int(in_op)) - cpu_spinwait(); - } - } + smp_rendezvous_cpus_retry(all_cpus, + smp_no_rendezvous_barrier, + rms_action_func, + smp_no_rendezvous_barrier, + rms_wait_func, + &rmsipi.srcra); } void From 123c51973174fd8250f835975b0bb56bdd93e657 Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Wed, 12 Feb 2020 11:17:45 +0000 Subject: [PATCH 107/144] vfs: switch to smp_rendezvous_cpus_retry for vfs_op_thread_enter/exit In particular on amd64 this eliminates an atomic op in the common case, trading it for IPIs in the uncommon case of catching CPUs executing the code while the filesystem is getting suspended or unmounted. --- sys/kern/vfs_mount.c | 61 ++++++++++++++++++++++++++++++-------------- sys/kern/vfs_subr.c | 4 --- sys/sys/mount.h | 13 +++------- 3 files changed, 46 insertions(+), 32 deletions(-) diff --git a/sys/kern/vfs_mount.c b/sys/kern/vfs_mount.c index 9b99cb8cf05..bbae0faed1a 100644 --- a/sys/kern/vfs_mount.c +++ b/sys/kern/vfs_mount.c @@ -1441,16 +1441,7 @@ vfs_op_enter(struct mount *mp) MNT_IUNLOCK(mp); return; } - /* - * Paired with a fence in vfs_op_thread_enter(). See the comment - * above it for details. - */ - atomic_thread_fence_seq_cst(); vfs_op_barrier_wait(mp); - /* - * Paired with a fence in vfs_op_thread_exit(). - */ - atomic_thread_fence_acq(); CPU_FOREACH(cpu) { mp->mnt_ref += zpcpu_replace_cpu(mp->mnt_ref_pcpu, 0, cpu); @@ -1484,20 +1475,52 @@ vfs_op_exit(struct mount *mp) MNT_IUNLOCK(mp); } -/* - * It is assumed the caller already posted at least an acquire barrier. - */ +struct vfs_op_barrier_ipi { + struct mount *mp; + struct smp_rendezvous_cpus_retry_arg srcra; +}; + +static void +vfs_op_action_func(void *arg) +{ + struct vfs_op_barrier_ipi *vfsopipi; + struct mount *mp; + + vfsopipi = __containerof(arg, struct vfs_op_barrier_ipi, srcra); + mp = vfsopipi->mp; + + if (!vfs_op_thread_entered(mp)) + smp_rendezvous_cpus_done(arg); +} + +static void +vfs_op_wait_func(void *arg, int cpu) +{ + struct vfs_op_barrier_ipi *vfsopipi; + struct mount *mp; + int *in_op; + + vfsopipi = __containerof(arg, struct vfs_op_barrier_ipi, srcra); + mp = vfsopipi->mp; + + in_op = zpcpu_get_cpu(mp->mnt_thread_in_ops_pcpu, cpu); + while (atomic_load_int(in_op)) + cpu_spinwait(); +} + void vfs_op_barrier_wait(struct mount *mp) { - int *in_op; - int cpu; + struct vfs_op_barrier_ipi vfsopipi; - CPU_FOREACH(cpu) { - in_op = zpcpu_get_cpu(mp->mnt_thread_in_ops_pcpu, cpu); - while (atomic_load_int(in_op)) - cpu_spinwait(); - } + vfsopipi.mp = mp; + + smp_rendezvous_cpus_retry(all_cpus, + smp_no_rendezvous_barrier, + vfs_op_action_func, + smp_no_rendezvous_barrier, + vfs_op_wait_func, + &vfsopipi.srcra); } #ifdef DIAGNOSTIC diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index 527f893e435..5bace645eb7 100644 --- a/sys/kern/vfs_subr.c +++ b/sys/kern/vfs_subr.c @@ -6049,10 +6049,6 @@ restart: } MNT_IUNLOCK(mp); if (vp != NULL) { - /* - * Paired with a fence in vfs_op_thread_exit(). - */ - atomic_thread_fence_acq(); vfs_op_barrier_wait(mp); vrele(vp); } diff --git a/sys/sys/mount.h b/sys/sys/mount.h index f5e31fb18d8..394c2f2f18c 100644 --- a/sys/sys/mount.h +++ b/sys/sys/mount.h @@ -983,13 +983,8 @@ enum mount_counter { MNT_COUNT_REF, MNT_COUNT_LOCKREF, MNT_COUNT_WRITEOPCOUNT }; int vfs_mount_fetch_counter(struct mount *, enum mount_counter); /* - * We mark ourselves as entering the section and post a sequentially consistent - * fence, meaning the store is completed before we get into the section and - * mnt_vfs_ops is only read afterwards. - * - * Any thread transitioning the ops counter 0->1 does things in the opposite - * order - first bumps the count, posts a sequentially consistent fence and - * observes all CPUs not executing within the section. + * Code transitioning mnt_vfs_ops to > 0 issues IPIs until it observes + * all CPUs not executing code enclosed by mnt_thread_in_ops_pcpu. * * This provides an invariant that by the time the last CPU is observed not * executing, everyone else entering will see the counter > 0 and exit. @@ -1009,7 +1004,7 @@ int vfs_mount_fetch_counter(struct mount *, enum mount_counter); critical_enter(); \ MPASS(!vfs_op_thread_entered(mp)); \ zpcpu_set_protected(mp->mnt_thread_in_ops_pcpu, 1); \ - atomic_thread_fence_seq_cst(); \ + __compiler_membar(); \ if (__predict_false(mp->mnt_vfs_ops > 0)) { \ vfs_op_thread_exit(mp); \ _retval = false; \ @@ -1019,7 +1014,7 @@ int vfs_mount_fetch_counter(struct mount *, enum mount_counter); #define vfs_op_thread_exit(mp) do { \ MPASS(vfs_op_thread_entered(mp)); \ - atomic_thread_fence_rel(); \ + __compiler_membar(); \ zpcpu_set_protected(mp->mnt_thread_in_ops_pcpu, 0); \ critical_exit(); \ } while (0) From ed67a63c39b3eca1832341beac6034d0a72b9703 Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Wed, 12 Feb 2020 11:18:12 +0000 Subject: [PATCH 108/144] vfs: drop remaining zpcpu casts --- sys/kern/vfs_mount.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sys/kern/vfs_mount.c b/sys/kern/vfs_mount.c index bbae0faed1a..6b573e19535 100644 --- a/sys/kern/vfs_mount.c +++ b/sys/kern/vfs_mount.c @@ -1533,9 +1533,9 @@ vfs_assert_mount_counters(struct mount *mp) return; CPU_FOREACH(cpu) { - if (*(int *)zpcpu_get_cpu(mp->mnt_ref_pcpu, cpu) != 0 || - *(int *)zpcpu_get_cpu(mp->mnt_lockref_pcpu, cpu) != 0 || - *(int *)zpcpu_get_cpu(mp->mnt_writeopcount_pcpu, cpu) != 0) + if (*zpcpu_get_cpu(mp->mnt_ref_pcpu, cpu) != 0 || + *zpcpu_get_cpu(mp->mnt_lockref_pcpu, cpu) != 0 || + *zpcpu_get_cpu(mp->mnt_writeopcount_pcpu, cpu) != 0) vfs_dump_mount_counters(mp); } } @@ -1605,7 +1605,7 @@ vfs_mount_fetch_counter(struct mount *mp, enum mount_counter which) sum = *base; CPU_FOREACH(cpu) { - sum += *(int *)zpcpu_get_cpu(pcpu, cpu); + sum += *zpcpu_get_cpu(pcpu, cpu); } return (sum); } From 4602214772fe30e131ad2aea3b7f5b8bbddee08c Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Wed, 12 Feb 2020 11:19:07 +0000 Subject: [PATCH 109/144] vfs: refactor vputx and add more comment Reviewed by: jeff (previous version) Tested by: pho (previous version) Differential Revision: https://reviews.freebsd.org/D23530 --- sys/kern/vfs_subr.c | 175 ++++++++++++++++++++++++++++---------------- 1 file changed, 113 insertions(+), 62 deletions(-) diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index 5bace645eb7..d3a4947938d 100644 --- a/sys/kern/vfs_subr.c +++ b/sys/kern/vfs_subr.c @@ -2798,14 +2798,37 @@ v_incr_devcount(struct vnode *vp) /* * Decrement si_usecount of the associated device, if any. + * + * The caller is required to hold the interlock when transitioning a VCHR use + * count to zero. This prevents a race with devfs_reclaim_vchr() that would + * leak a si_usecount reference. The vnode lock will also prevent this race + * if it is held while dropping the last ref. + * + * The race is: + * + * CPU1 CPU2 + * devfs_reclaim_vchr + * make v_usecount == 0 + * VI_LOCK + * sees v_usecount == 0, no updates + * vp->v_rdev = NULL; + * ... + * VI_UNLOCK + * VI_LOCK + * v_decr_devcount + * sees v_rdev == NULL, no updates + * + * In this scenario si_devcount decrement is not performed. */ static void v_decr_devcount(struct vnode *vp) { + ASSERT_VOP_LOCKED(vp, __func__); ASSERT_VI_LOCKED(vp, __FUNCTION__); if (vp->v_type == VCHR && vp->v_rdev != NULL) { dev_lock(); + VNPASS(vp->v_rdev->si_usecount > 0, vp); vp->v_rdev->si_usecount--; dev_unlock(); } @@ -3154,12 +3177,21 @@ vdefer_inactive_unlocked(struct vnode *vp) vdefer_inactive(vp); } -enum vputx_op { VPUTX_VRELE, VPUTX_VPUT, VPUTX_VUNREF }; +enum vput_op { VRELE, VPUT, VUNREF }; /* - * Decrement the use and hold counts for a vnode. + * Handle ->v_usecount transitioning to 0. * - * See an explanation near vget() as to why atomic operation is safe. + * By releasing the last usecount we take ownership of the hold count which + * provides liveness of the vnode, meaning we have to vdrop. + * + * If the vnode is of type VCHR we may need to decrement si_usecount, see + * v_decr_devcount for details. + * + * For all vnodes we may need to perform inactive processing. It requires an + * exclusive lock on the vnode, while it is legal to call here with only a + * shared lock (or no locks). If locking the vnode in an expected manner fails, + * inactive processing gets deferred to the syncer. * * XXX Some filesystems pass in an exclusively locked vnode and strongly depend * on the lock being held all the way until VOP_INACTIVE. This in particular @@ -3167,75 +3199,49 @@ enum vputx_op { VPUTX_VRELE, VPUTX_VPUT, VPUTX_VUNREF }; * can be found by other code. */ static void -vputx(struct vnode *vp, enum vputx_op func) +vput_final(struct vnode *vp, enum vput_op func) { int error; bool want_unlock; - KASSERT(vp != NULL, ("vputx: null vp")); - if (func == VPUTX_VUNREF) - ASSERT_VOP_LOCKED(vp, "vunref"); - else if (func == VPUTX_VPUT) - ASSERT_VOP_LOCKED(vp, "vput"); - ASSERT_VI_UNLOCKED(vp, __func__); - VNASSERT(vp->v_holdcnt > 0 && vp->v_usecount > 0, vp, - ("%s: wrong ref counts", __func__)); - CTR2(KTR_VFS, "%s: vp %p", __func__, vp); + VNPASS(vp->v_holdcnt > 0, vp); + + VI_LOCK(vp); + if (func != VRELE) + v_decr_devcount(vp); - /* - * We want to hold the vnode until the inactive finishes to - * prevent vgone() races. We drop the use count here and the - * hold count below when we're done. - * - * If we release the last usecount we take ownership of the hold - * count which provides liveness of the vnode, in which case we - * have to vdrop. - */ - if (__predict_false(vp->v_type == VCHR && func == VPUTX_VRELE)) { - if (refcount_release_if_not_last(&vp->v_usecount)) - return; - VI_LOCK(vp); - if (!refcount_release(&vp->v_usecount)) { - VI_UNLOCK(vp); - return; - } - } else { - if (!refcount_release(&vp->v_usecount)) { - if (func == VPUTX_VPUT) - VOP_UNLOCK(vp); - return; - } - VI_LOCK(vp); - } - v_decr_devcount(vp); /* * By the time we got here someone else might have transitioned * the count back to > 0. */ - if (vp->v_usecount > 0 || vp->v_iflag & VI_DOINGINACT) + if (vp->v_usecount > 0) goto out; /* - * Check if the fs wants to perform inactive processing. Note we - * may be only holding the interlock, in which case it is possible - * someone else called vgone on the vnode and ->v_data is now NULL. - * Since vgone performs inactive on its own there is nothing to do - * here but to drop our hold count. + * If the vnode is doomed vgone already performed inactive processing + * (if needed). */ - if (__predict_false(VN_IS_DOOMED(vp)) || - VOP_NEED_INACTIVE(vp) == 0) + if (VN_IS_DOOMED(vp)) + goto out; + + if (__predict_true(VOP_NEED_INACTIVE(vp) == 0)) + goto out; + + if (vp->v_iflag & VI_DOINGINACT) goto out; /* - * We must call VOP_INACTIVE with the node locked. Mark - * as VI_DOINGINACT to avoid recursion. + * Locking operations here will drop the interlock and possibly the + * vnode lock, opening a window where the vnode can get doomed all the + * while ->v_usecount is 0. Set VI_OWEINACT to let vgone know to + * perform inactive. */ vp->v_iflag |= VI_OWEINACT; want_unlock = false; error = 0; switch (func) { - case VPUTX_VRELE: + case VRELE: switch (VOP_ISLOCKED(vp)) { case LK_EXCLUSIVE: break; @@ -3255,7 +3261,7 @@ vputx(struct vnode *vp, enum vputx_op func) break; } break; - case VPUTX_VPUT: + case VPUT: want_unlock = true; if (VOP_ISLOCKED(vp) != LK_EXCLUSIVE) { error = VOP_LOCK(vp, LK_UPGRADE | LK_INTERLOCK | @@ -3263,7 +3269,7 @@ vputx(struct vnode *vp, enum vputx_op func) VI_LOCK(vp); } break; - case VPUTX_VUNREF: + case VUNREF: if (VOP_ISLOCKED(vp) != LK_EXCLUSIVE) { error = VOP_LOCK(vp, LK_TRYUPGRADE | LK_INTERLOCK); VI_LOCK(vp); @@ -3280,42 +3286,87 @@ vputx(struct vnode *vp, enum vputx_op func) } return; out: - if (func == VPUTX_VPUT) + if (func == VPUT) VOP_UNLOCK(vp); vdropl(vp); } /* - * Vnode put/release. - * If count drops to zero, call inactive routine and return to freelist. + * Decrement ->v_usecount for a vnode. + * + * Releasing the last use count requires additional processing, see vput_final + * above for details. + * + * Note that releasing use count without the vnode lock requires special casing + * for VCHR, see v_decr_devcount for details. + * + * Comment above each variant denotes lock state on entry and exit. + */ + +static void __noinline +vrele_vchr(struct vnode *vp) +{ + + if (refcount_release_if_not_last(&vp->v_usecount)) + return; + VI_LOCK(vp); + if (!refcount_release(&vp->v_usecount)) { + VI_UNLOCK(vp); + return; + } + v_decr_devcount(vp); + VI_UNLOCK(vp); + vput_final(vp, VRELE); +} + +/* + * in: any + * out: same as passed in */ void vrele(struct vnode *vp) { - vputx(vp, VPUTX_VRELE); + ASSERT_VI_UNLOCKED(vp, __func__); + if (__predict_false(vp->v_type == VCHR)) { + vrele_vchr(vp); + return; + } + if (!refcount_release(&vp->v_usecount)) + return; + vput_final(vp, VRELE); } /* - * Release an already locked vnode. This give the same effects as - * unlock+vrele(), but takes less time and avoids releasing and - * re-aquiring the lock (as vrele() acquires the lock internally.) + * in: locked + * out: unlocked */ void vput(struct vnode *vp) { - vputx(vp, VPUTX_VPUT); + ASSERT_VOP_LOCKED(vp, __func__); + ASSERT_VI_UNLOCKED(vp, __func__); + if (!refcount_release(&vp->v_usecount)) { + VOP_UNLOCK(vp); + return; + } + vput_final(vp, VPUT); } /* - * Release an exclusively locked vnode. Do not unlock the vnode lock. + * in: locked + * out: locked */ void vunref(struct vnode *vp) { - vputx(vp, VPUTX_VUNREF); + ASSERT_VOP_LOCKED(vp, __func__); + ASSERT_VI_UNLOCKED(vp, __func__); + if (!refcount_release(&vp->v_usecount)) + return; + vput_final(vp, VUNREF); } void From c626c88e587ff5176669ae65b0c5465d47fb3353 Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Wed, 12 Feb 2020 12:23:46 +0000 Subject: [PATCH 110/144] Fix indent. Sponsored by: The FreeBSD Foundation MFC after: 3 days --- libexec/rtld-elf/rtld.c | 44 ++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c index 4d3b32381cb..ba08785762f 100644 --- a/libexec/rtld-elf/rtld.c +++ b/libexec/rtld-elf/rtld.c @@ -5627,26 +5627,30 @@ parse_args(char* argv[], int argc, bool *use_pathp, int *fdp) print_usage(argv[0]); _exit(0); } else if (opt == 'f') { - /* - * -f XX can be used to specify a descriptor for the - * binary named at the command line (i.e., the later - * argument will specify the process name but the - * descriptor is what will actually be executed) - */ - if (j != arglen - 1) { - /* -f must be the last option in, e.g., -abcf */ - _rtld_error("Invalid options: %s", arg); - rtld_die(); - } - i++; - fd = parse_integer(argv[i]); - if (fd == -1) { - _rtld_error("Invalid file descriptor: '%s'", - argv[i]); - rtld_die(); - } - *fdp = fd; - break; + /* + * -f XX can be used to specify a + * descriptor for the binary named at + * the command line (i.e., the later + * argument will specify the process + * name but the descriptor is what + * will actually be executed). + * + * -f must be the last option in, e.g., -abcf. + */ + if (j != arglen - 1) { + _rtld_error("Invalid options: %s", arg); + rtld_die(); + } + i++; + fd = parse_integer(argv[i]); + if (fd == -1) { + _rtld_error( + "Invalid file descriptor: '%s'", + argv[i]); + rtld_die(); + } + *fdp = fd; + break; } else if (opt == 'p') { *use_pathp = true; } else { From d2517ab04bec438b901e41bc4b275052be3eccad Mon Sep 17 00:00:00 2001 From: Randall Stewart Date: Wed, 12 Feb 2020 12:36:55 +0000 Subject: [PATCH 111/144] Now that all of the stats framework is in FreeBSD the bits that disabled stats when netflix-stats is not defined is no longer needed. Lets remove these bits so that we will properly use stats per its definition in BBR and Rack. Sponsored by: Netflix Inc Differential Revision: https://reviews.freebsd.org/D23088 --- sys/netinet/tcp_stacks/rack.c | 3 ++- sys/netinet/tcp_stacks/rack_bbr_common.h | 5 ----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/sys/netinet/tcp_stacks/rack.c b/sys/netinet/tcp_stacks/rack.c index bbb3756c6bf..bdd9ff9947f 100644 --- a/sys/netinet/tcp_stacks/rack.c +++ b/sys/netinet/tcp_stacks/rack.c @@ -1681,7 +1681,7 @@ rack_ack_received(struct tcpcb *tp, struct tcp_rack *rack, struct tcphdr *th, ui tp->t_stats_gput_prev); tp->t_flags &= ~TF_GPUTINPROG; tp->t_stats_gput_prev = gput; - +#ifdef NETFLIX_PEAKRATE if (tp->t_maxpeakrate) { /* * We update t_peakrate_thr. This gives us roughly @@ -1689,6 +1689,7 @@ rack_ack_received(struct tcpcb *tp, struct tcp_rack *rack, struct tcphdr *th, ui */ tcp_update_peakrate_thr(tp); } +#endif } #endif if (tp->snd_cwnd > tp->snd_ssthresh) { diff --git a/sys/netinet/tcp_stacks/rack_bbr_common.h b/sys/netinet/tcp_stacks/rack_bbr_common.h index 5eb304ddf4a..1bcff320d39 100644 --- a/sys/netinet/tcp_stacks/rack_bbr_common.h +++ b/sys/netinet/tcp_stacks/rack_bbr_common.h @@ -27,11 +27,6 @@ * __FBSDID("$FreeBSD$"); */ -/* XXXLAS: Couple STATS to NETFLIX_STATS until stats(3) is fully upstreamed. */ -#ifndef NETFLIX_STATS -#undef STATS -#endif - /* Common defines and such used by both RACK and BBR */ /* Special values for mss accounting array */ #define TCP_MSS_ACCT_JUSTRET 0 From 3fba40d9f2b3551ec627891640dd63829dc13fba Mon Sep 17 00:00:00 2001 From: Randall Stewart Date: Wed, 12 Feb 2020 12:40:06 +0000 Subject: [PATCH 112/144] Remove all trailing white space from the BBR/Rack fold. Bits left around by emacs (thanks emacs). --- sys/netinet/tcp_stacks/bbr.c | 404 +++++++++++------------ sys/netinet/tcp_stacks/rack.c | 258 +++++++-------- sys/netinet/tcp_stacks/rack_bbr_common.c | 32 +- sys/netinet/tcp_stacks/rack_bbr_common.h | 4 +- sys/netinet/tcp_stacks/sack_filter.c | 88 ++--- sys/netinet/tcp_stacks/tcp_bbr.h | 14 +- sys/netinet/tcp_stacks/tcp_rack.h | 6 +- 7 files changed, 403 insertions(+), 403 deletions(-) diff --git a/sys/netinet/tcp_stacks/bbr.c b/sys/netinet/tcp_stacks/bbr.c index 76ecf5aebab..e759f7a9e0e 100644 --- a/sys/netinet/tcp_stacks/bbr.c +++ b/sys/netinet/tcp_stacks/bbr.c @@ -208,7 +208,7 @@ static int32_t bbr_min_measurements_req = 1; /* We need at least 2 * to prevent it from being ok * to have no measurements). */ static int32_t bbr_no_pacing_until = 4; - + static int32_t bbr_min_usec_delta = 20000; /* 20,000 usecs */ static int32_t bbr_min_peer_delta = 20; /* 20 units */ static int32_t bbr_delta_percent = 150; /* 15.0 % */ @@ -380,9 +380,9 @@ static int32_t bbr_rto_max_sec = 4; /* 4 seconds */ static int32_t bbr_hptsi_per_second = 1000; /* - * For hptsi under bbr_cross_over connections what is delay + * For hptsi under bbr_cross_over connections what is delay * target 7ms (in usec) combined with a seg_max of 2 - * gets us close to identical google behavior in + * gets us close to identical google behavior in * TSO size selection (possibly more 1MSS sends). */ static int32_t bbr_hptsi_segments_delay_tar = 7000; @@ -596,9 +596,9 @@ activate_rxt: rsm = TAILQ_FIRST(&bbr->r_ctl.rc_tmap); if (rsm) { idx = rsm->r_rtr_cnt - 1; - if (TSTMP_GEQ(rsm->r_tim_lastsent[idx], bbr->r_ctl.rc_tlp_rxt_last_time)) + if (TSTMP_GEQ(rsm->r_tim_lastsent[idx], bbr->r_ctl.rc_tlp_rxt_last_time)) tstmp_touse = rsm->r_tim_lastsent[idx]; - else + else tstmp_touse = bbr->r_ctl.rc_tlp_rxt_last_time; if (TSTMP_GT(tstmp_touse, cts)) time_since_sent = cts - tstmp_touse; @@ -673,9 +673,9 @@ activate_rxt: } time_since_sent = 0; idx = rsm->r_rtr_cnt - 1; - if (TSTMP_GEQ(rsm->r_tim_lastsent[idx], bbr->r_ctl.rc_tlp_rxt_last_time)) + if (TSTMP_GEQ(rsm->r_tim_lastsent[idx], bbr->r_ctl.rc_tlp_rxt_last_time)) tstmp_touse = rsm->r_tim_lastsent[idx]; - else + else tstmp_touse = bbr->r_ctl.rc_tlp_rxt_last_time; if (TSTMP_GT(tstmp_touse, cts)) time_since_sent = cts - tstmp_touse; @@ -695,11 +695,11 @@ activate_rxt: } if ((bbr->rc_tlp_rtx_out == 1) && (rsm->r_start == bbr->r_ctl.rc_last_tlp_seq)) { - /* - * Second retransmit of the same TLP + /* + * Second retransmit of the same TLP * lets not. */ - bbr->rc_tlp_rtx_out = 0; + bbr->rc_tlp_rtx_out = 0; goto activate_rxt; } if (rsm->r_start != bbr->r_ctl.rc_last_tlp_seq) { @@ -766,7 +766,7 @@ bbr_start_hpts_timer(struct tcp_bbr *bbr, struct tcpcb *tp, uint32_t cts, int32_ prev_delay = bbr->r_ctl.rc_last_delay_val; if (bbr->r_ctl.rc_last_delay_val && (slot == 0)) { - /* + /* * If a previous pacer delay was in place we * are not coming from the output side (where * we calculate a delay, more likely a timer). @@ -777,7 +777,7 @@ bbr_start_hpts_timer(struct tcp_bbr *bbr, struct tcpcb *tp, uint32_t cts, int32_ delay_calc = cts - bbr->rc_pacer_started; if (delay_calc <= slot) slot -= delay_calc; - } + } } /* Do we have early to make up for by pushing out the pacing time? */ if (bbr->r_agg_early_set) { @@ -804,8 +804,8 @@ bbr_start_hpts_timer(struct tcp_bbr *bbr, struct tcpcb *tp, uint32_t cts, int32_ if (bbr->rc_in_persist == 0) { delayed_ack = bbr_delack_time; } else { - /* - * We are in persists and have + /* + * We are in persists and have * gotten a new data element. */ if (hpts_timeout > bbr_delack_time) { @@ -816,7 +816,7 @@ bbr_start_hpts_timer(struct tcp_bbr *bbr, struct tcpcb *tp, uint32_t cts, int32_ hpts_timeout = bbr_delack_time; } } - } + } if (delayed_ack && ((hpts_timeout == 0) || (delayed_ack < hpts_timeout))) { @@ -910,10 +910,10 @@ bbr_start_hpts_timer(struct tcp_bbr *bbr, struct tcpcb *tp, uint32_t cts, int32_ * the do not disturbe even for sack. */ inp->inp_flags2 |= INP_DONT_SACK_QUEUE; - } else + } else inp->inp_flags2 &= ~INP_DONT_SACK_QUEUE; bbr->rc_pacer_started = cts; - + (void)tcp_hpts_insert_diag(tp->t_inpcb, HPTS_USEC_TO_SLOTS(slot), __LINE__, &diag); bbr->rc_timer_first = 0; @@ -923,8 +923,8 @@ bbr_start_hpts_timer(struct tcp_bbr *bbr, struct tcpcb *tp, uint32_t cts, int32_ } else if (hpts_timeout) { (void)tcp_hpts_insert_diag(tp->t_inpcb, HPTS_USEC_TO_SLOTS(hpts_timeout), __LINE__, &diag); - /* - * We add the flag here as well if the slot is set, + /* + * We add the flag here as well if the slot is set, * since hpts will call in to clear the queue first before * calling the output routine (which does our timers). * We don't want to set the flag if its just a timer @@ -937,7 +937,7 @@ bbr_start_hpts_timer(struct tcp_bbr *bbr, struct tcpcb *tp, uint32_t cts, int32_ bbr->rc_pacer_started = cts; if ((bbr->r_ctl.rc_hpts_flags & PACE_TMR_RACK) && (bbr->rc_cwnd_limited == 0)) { - /* + /* * For a rack timer, don't wake us even * if a sack arrives as long as we are * not cwnd limited. @@ -1048,7 +1048,7 @@ bbr_timer_audit(struct tcpcb *tp, struct tcp_bbr *bbr, uint32_t cts, struct sock * We have outstanding data and * we *do* have a RACK, TLP or RXT * timer running. We won't restart - * anything here since thats probably ok we + * anything here since thats probably ok we * will get called with some timer here shortly. */ return; @@ -2223,7 +2223,7 @@ bbr_log_rtt_sample(struct tcp_bbr *bbr, uint32_t rtt, uint32_t tsin) log.u_bbr.pkts_out = tcp_tv_to_mssectick(&bbr->rc_tv); log.u_bbr.flex6 = tsin; log.u_bbr.flex7 = 0; - log.u_bbr.flex8 = bbr->rc_ack_was_delayed; + log.u_bbr.flex8 = bbr->rc_ack_was_delayed; TCP_LOG_EVENTP(bbr->rc_tp, NULL, &bbr->rc_inp->inp_socket->so_rcv, &bbr->rc_inp->inp_socket->so_snd, @@ -2423,7 +2423,7 @@ bbr_log_startup_event(struct tcp_bbr *bbr, uint32_t cts, uint32_t flex1, uint32_ log.u_bbr.flex1 = flex1; log.u_bbr.flex2 = flex2; log.u_bbr.flex3 = flex3; - log.u_bbr.flex4 = 0; + log.u_bbr.flex4 = 0; log.u_bbr.flex5 = bbr->r_ctl.rc_target_at_state; log.u_bbr.flex6 = bbr->r_ctl.rc_lost_at_startup; log.u_bbr.flex8 = reason; @@ -2693,7 +2693,7 @@ bbr_log_type_bbrupd(struct tcp_bbr *bbr, uint8_t flex8, uint32_t cts, log.u_bbr.flex8 = flex8; if (bbr->rc_ack_was_delayed) log.u_bbr.epoch = bbr->r_ctl.rc_ack_hdwr_delay; - else + else log.u_bbr.epoch = 0; TCP_LOG_EVENTP(bbr->rc_tp, NULL, &bbr->rc_inp->inp_socket->so_rcv, @@ -2725,7 +2725,7 @@ bbr_log_type_ltbw(struct tcp_bbr *bbr, uint32_t cts, int32_t reason, if (bbr->rc_lt_use_bw == 0) log.u_bbr.epoch = bbr->r_ctl.rc_pkt_epoch - bbr->r_ctl.rc_lt_epoch; else - log.u_bbr.epoch = bbr->r_ctl.rc_pkt_epoch - bbr->r_ctl.rc_lt_epoch_use; + log.u_bbr.epoch = bbr->r_ctl.rc_pkt_epoch - bbr->r_ctl.rc_lt_epoch_use; TCP_LOG_EVENTP(bbr->rc_tp, NULL, &bbr->rc_inp->inp_socket->so_rcv, &bbr->rc_inp->inp_socket->so_snd, @@ -2908,10 +2908,10 @@ bbr_set_pktepoch(struct tcp_bbr *bbr, uint32_t cts, int32_t line) calclr /= (uint64_t)del; } else { /* Nothing delivered? 100.0% loss */ - calclr = 1000; + calclr = 1000; } bbr->r_ctl.rc_pkt_epoch_loss_rate = (uint32_t)calclr; - if (IN_RECOVERY(bbr->rc_tp->t_flags)) + if (IN_RECOVERY(bbr->rc_tp->t_flags)) bbr->r_ctl.recovery_lr += (uint32_t)calclr; bbr->r_ctl.rc_pkt_epoch++; if (bbr->rc_no_pacing && @@ -2959,8 +2959,8 @@ __bbr_get_bw(struct tcp_bbr *bbr) uint64_t bw, min_bw; uint64_t rtt; int gm_measure_cnt = 1; - - /* + + /* * For startup we make, like google, a * minimum b/w. This is generated from the * IW and the rttProp. We do fall back to srtt @@ -2970,7 +2970,7 @@ __bbr_get_bw(struct tcp_bbr *bbr) */ if (bbr->rc_bbr_state == BBR_STATE_STARTUP) { /* Attempt first to use rttProp */ - rtt = (uint64_t)get_filter_value_small(&bbr->r_ctl.rc_rttprop); + rtt = (uint64_t)get_filter_value_small(&bbr->r_ctl.rc_rttprop); if (rtt && (rtt < 0xffffffff)) { measure: min_bw = (uint64_t)(bbr_initial_cwnd(bbr, bbr->rc_tp)) * @@ -3158,7 +3158,7 @@ static void bbr_randomize_extra_state_time(struct tcp_bbr *bbr) { uint32_t ran, deduct; - + ran = arc4random_uniform(bbr_rand_ot); if (ran) { deduct = bbr->r_ctl.rc_level_state_extra / ran; @@ -3219,8 +3219,8 @@ reset_all: bbr->rc_bbr_state = BBR_STATE_PROBE_BW; bbr_log_type_statechange(bbr, cts, __LINE__); } else { - /* - * This should not happen really + /* + * This should not happen really * unless we remove the startup/drain * restrictions above. */ @@ -3293,7 +3293,7 @@ reset_all: } diff = bbr->r_ctl.rc_pkt_epoch - bbr->r_ctl.rc_lt_epoch; if (diff < bbr_lt_intvl_min_rtts) { - /* + /* * need more samples (we don't * start on a round like linux so * we need 1 more). @@ -3536,20 +3536,20 @@ bbr_get_target_cwnd(struct tcp_bbr *bbr, uint64_t bw, uint32_t gain) mss = min((bbr->rc_tp->t_maxseg - bbr->rc_last_options), bbr->r_ctl.rc_pace_max_segs); /* Get the base cwnd with gain rounded to a mss */ cwnd = roundup(bbr_get_raw_target_cwnd(bbr, bw, gain), mss); - /* + /* * Add in N (2 default since we do not have a - * fq layer to trap packets in) quanta's per the I-D - * section 4.2.3.2 quanta adjust. + * fq layer to trap packets in) quanta's per the I-D + * section 4.2.3.2 quanta adjust. */ cwnd += (bbr_quanta * bbr->r_ctl.rc_pace_max_segs); if (bbr->rc_use_google) { if((bbr->rc_bbr_state == BBR_STATE_PROBE_BW) && (bbr_state_val(bbr) == BBR_SUB_GAIN)) { - /* + /* * The linux implementation adds * an extra 2 x mss in gain cycle which * is documented no-where except in the code. - * so we add more for Neal undocumented feature + * so we add more for Neal undocumented feature */ cwnd += 2 * mss; } @@ -3605,7 +3605,7 @@ static uint32_t bbr_get_pacing_length(struct tcp_bbr *bbr, uint16_t gain, uint32_t useconds_time, uint64_t bw) { uint64_t divor, res, tim; - + if (useconds_time == 0) return (0); gain = bbr_gain_adjust(bbr, gain); @@ -3642,8 +3642,8 @@ bbr_get_pacing_delay(struct tcp_bbr *bbr, uint16_t gain, int32_t len, uint32_t c bw = bbr_get_bw(bbr); if (bbr->rc_use_google) { uint64_t cbw; - - /* + + /* * Reduce the b/w by the google discount * factor 10 = 1%. */ @@ -3721,8 +3721,8 @@ bbr_ack_received(struct tcpcb *tp, struct tcp_bbr *bbr, struct tcphdr *th, uint3 bytes_this_ack += sack_changed; if (bytes_this_ack > prev_acked) { bytes_this_ack -= prev_acked; - /* - * A byte ack'd gives us a full mss + /* + * A byte ack'd gives us a full mss * to be like linux i.e. they count packets. */ if ((bytes_this_ack < maxseg) && bbr->rc_use_google) @@ -3733,7 +3733,7 @@ bbr_ack_received(struct tcpcb *tp, struct tcp_bbr *bbr, struct tcphdr *th, uint3 } cwnd = tp->snd_cwnd; bw = get_filter_value(&bbr->r_ctl.rc_delrate); - if (bw) + if (bw) target_cwnd = bbr_get_target_cwnd(bbr, bw, (uint32_t)bbr->r_ctl.rc_bbr_cwnd_gain); @@ -3741,7 +3741,7 @@ bbr_ack_received(struct tcpcb *tp, struct tcp_bbr *bbr, struct tcphdr *th, uint3 target_cwnd = bbr_initial_cwnd(bbr, bbr->rc_tp); if (IN_RECOVERY(tp->t_flags) && (bbr->bbr_prev_in_rec == 0)) { - /* + /* * We are entering recovery and * thus packet conservation. */ @@ -3770,7 +3770,7 @@ bbr_ack_received(struct tcpcb *tp, struct tcp_bbr *bbr, struct tcphdr *th, uint3 if (TSTMP_GEQ(bbr->r_ctl.rc_rcvtime, bbr->r_ctl.rc_recovery_start)) time_in = bbr->r_ctl.rc_rcvtime - bbr->r_ctl.rc_recovery_start; - else + else time_in = 0; if (time_in >= bbr_get_rtt(bbr, BBR_RTT_PROP)) { @@ -3818,7 +3818,7 @@ bbr_ack_received(struct tcpcb *tp, struct tcp_bbr *bbr, struct tcphdr *th, uint3 meth = 3; cwnd += bytes_this_ack; } else { - /* + /* * Method 4 means we are at target so no gain in * startup and past the initial window. */ @@ -3888,7 +3888,7 @@ bbr_post_recovery(struct tcpcb *tp) uint64_t val, lr2use; uint32_t maxseg, newcwnd, acks_inflight, ratio, cwnd; uint32_t *cwnd_p; - + if (bbr_get_rtt(bbr, BBR_SRTT)) { val = ((uint64_t)bbr_get_rtt(bbr, BBR_RTT_PROP) * (uint64_t)1000); val /= bbr_get_rtt(bbr, BBR_SRTT); @@ -3911,8 +3911,8 @@ bbr_post_recovery(struct tcpcb *tp) (bbr_state_val(bbr) == BBR_SUB_DRAIN)) || ((bbr->rc_bbr_state == BBR_STATE_DRAIN) && bbr_slam_cwnd_in_main_drain)) { - /* - * Here we must poke at the saved cwnd + /* + * Here we must poke at the saved cwnd * as well as the cwnd. */ cwnd = bbr->r_ctl.rc_saved_cwnd; @@ -3954,7 +3954,7 @@ bbr_post_recovery(struct tcpcb *tp) } /* with standard delayed acks how many acks can I expect? */ if (bbr_drop_limit == 0) { - /* + /* * Anticpate how much we will * raise the cwnd based on the acks. */ @@ -4013,8 +4013,8 @@ bbr_cong_signal(struct tcpcb *tp, struct tcphdr *th, uint32_t type, struct bbr_s /* Start a new epoch */ bbr_set_pktepoch(bbr, bbr->r_ctl.rc_rcvtime, __LINE__); if (bbr->rc_lt_is_sampling || bbr->rc_lt_use_bw) { - /* - * Move forward the lt epoch + /* + * Move forward the lt epoch * so it won't count the truncated * epoch. */ @@ -4022,7 +4022,7 @@ bbr_cong_signal(struct tcpcb *tp, struct tcphdr *th, uint32_t type, struct bbr_s } if (bbr->rc_bbr_state == BBR_STATE_STARTUP) { /* - * Just like the policer detection code + * Just like the policer detection code * if we are in startup we must push * forward the last startup epoch * to hide the truncated PE. @@ -4036,7 +4036,7 @@ bbr_cong_signal(struct tcpcb *tp, struct tcphdr *th, uint32_t type, struct bbr_s tcp_bbr_tso_size_check(bbr, bbr->r_ctl.rc_rcvtime); if (bbr->rc_inp->inp_in_hpts && ((bbr->r_ctl.rc_hpts_flags & PACE_TMR_RACK) == 0)) { - /* + /* * When we enter recovery, we need to restart * any timers. This may mean we gain an agg * early, which will be made up for at the last @@ -4358,7 +4358,7 @@ bbr_is_lost(struct tcp_bbr *bbr, struct bbr_sendmap *rsm, uint32_t cts) { uint32_t thresh; - + thresh = bbr_calc_thresh_rack(bbr, bbr_get_rtt(bbr, BBR_RTT_RACK), cts, rsm); if ((cts - rsm->r_tim_lastsent[(rsm->r_rtr_cnt - 1)]) >= thresh) { @@ -4447,7 +4447,7 @@ bbr_timeout_rack(struct tcpcb *tp, struct tcp_bbr *bbr, uint32_t cts) * settings. */ uint32_t lost; - + if (bbr->rc_all_timers_stopped) { return (1); } @@ -4519,7 +4519,7 @@ static int bbr_sack_mergable(struct bbr_sendmap *at, uint32_t start, uint32_t end) { - /* + /* * Given a sack block defined by * start and end, and a current postion * at. Return 1 if either side of at @@ -4554,7 +4554,7 @@ bbr_sack_mergable(struct bbr_sendmap *at, if ((r_rsm->r_start == end) || (SEQ_LT(start, r_rsm->r_start) && SEQ_GT(end, r_rsm->r_start))) { - /* + /* * map blk |---------| * sack blk |----| * @@ -4572,7 +4572,7 @@ bbr_merge_rsm(struct tcp_bbr *bbr, struct bbr_sendmap *l_rsm, struct bbr_sendmap *r_rsm) { - /* + /* * We are merging two ack'd RSM's, * the l_rsm is on the left (lower seq * values) and the r_rsm is on the right @@ -4604,7 +4604,7 @@ bbr_merge_rsm(struct tcp_bbr *bbr, /* This really should not happen */ bbr->r_ctl.rc_lost_bytes -= r_rsm->r_end - r_rsm->r_start; } - TAILQ_REMOVE(&bbr->r_ctl.rc_map, r_rsm, r_next); + TAILQ_REMOVE(&bbr->r_ctl.rc_map, r_rsm, r_next); if ((r_rsm->r_limit_type == 0) && (l_rsm->r_limit_type != 0)) { /* Transfer the split limit to the map we free */ r_rsm->r_limit_type = l_rsm->r_limit_type; @@ -4711,8 +4711,8 @@ need_retran: goto restore; } } else { - /* - * We must find the last segment + /* + * We must find the last segment * that was acceptable by the client. */ TAILQ_FOREACH_REVERSE(rsm, &bbr->r_ctl.rc_map, bbr_head, r_next) { @@ -4974,7 +4974,7 @@ bbr_remxt_tmr(struct tcpcb *tp) TAILQ_FOREACH(rsm, &bbr->r_ctl.rc_map, r_next) { if (rsm->r_flags & BBR_ACKED) { uint32_t old_flags; - + rsm->r_dupack = 0; if (rsm->r_in_tmap == 0) { /* We must re-add it back to the tlist */ @@ -4996,7 +4996,7 @@ bbr_remxt_tmr(struct tcpcb *tp) } if (bbr_marks_rxt_sack_passed) { /* - * With this option, we will rack out + * With this option, we will rack out * in 1ms increments the rest of the packets. */ rsm->r_flags |= BBR_SACK_PASSED | BBR_MARKED_LOST; @@ -5388,7 +5388,7 @@ static uint32_t bbr_get_earliest_send_outstanding(struct tcp_bbr *bbr, struct bbr_sendmap *u_rsm, uint32_t cts) { struct bbr_sendmap *rsm; - + rsm = TAILQ_FIRST(&bbr->r_ctl.rc_tmap); if ((rsm == NULL) || (u_rsm == rsm)) return (cts); @@ -5414,7 +5414,7 @@ bbr_update_rsm(struct tcpcb *tp, struct tcp_bbr *bbr, if (rsm->r_flags & BBR_MARKED_LOST) { /* We have retransmitted, its no longer lost */ rsm->r_flags &= ~BBR_MARKED_LOST; - bbr->r_ctl.rc_lost_bytes -= rsm->r_end - rsm->r_start; + bbr->r_ctl.rc_lost_bytes -= rsm->r_end - rsm->r_start; } if (rsm->r_flags & BBR_RXT_CLEARED) { /* @@ -5436,7 +5436,7 @@ bbr_update_rsm(struct tcpcb *tp, struct tcp_bbr *bbr, rsm->r_pacing_delay = pacing_time; rsm->r_delivered = bbr->r_ctl.rc_delivered; rsm->r_ts_valid = bbr->rc_ts_valid; - if (bbr->rc_ts_valid) + if (bbr->rc_ts_valid) rsm->r_del_ack_ts = bbr->r_ctl.last_inbound_ts; if (bbr->r_ctl.r_app_limited_until) rsm->r_app_limited = 1; @@ -5556,7 +5556,7 @@ static uint64_t bbr_get_hardware_rate(struct tcp_bbr *bbr) { uint64_t bw; - + bw = bbr_get_bw(bbr); bw *= (uint64_t)bbr_hptsi_gain[BBR_SUB_GAIN]; bw /= (uint64_t)BBR_UNIT; @@ -5592,7 +5592,7 @@ bbr_update_hardware_pacing_rate(struct tcp_bbr *bbr, uint32_t cts) { const struct tcp_hwrate_limit_table *nrte; int error, rate = -1; - + if (bbr->r_ctl.crte == NULL) return; if ((bbr->rc_inp->inp_route.ro_rt == NULL) || @@ -5702,12 +5702,12 @@ bbr_adjust_for_hw_pacing(struct tcp_bbr *bbr, uint32_t cts) * time between each segment the * hardware sends rounding up and * derive a bytes from that. We multiply - * that by bbr_hdwr_pace_adjust to get + * that by bbr_hdwr_pace_adjust to get * more bang for our buck. * * The goal is to have the software pacer * waiting no more than an additional - * pacing delay if we can (without the + * pacing delay if we can (without the * compensation i.e. x bbr_hdwr_pace_adjust). */ seg_sz = max(((cur_delay + rlp->time_between)/rlp->time_between), @@ -5724,12 +5724,12 @@ bbr_adjust_for_hw_pacing(struct tcp_bbr *bbr, uint32_t cts) } seg_sz *= maxseg; } else if (delta == 0) { - /* + /* * The highest pacing rate is * above our b/w gained. This means * we probably are going quite fast at * the hardware highest rate. Lets just multiply - * the calculated TSO size by the + * the calculated TSO size by the * multiplier factor (its probably * 4 segments in the default config for * mlx). @@ -5764,7 +5764,7 @@ bbr_adjust_for_hw_pacing(struct tcp_bbr *bbr, uint32_t cts) new_tso = bbr->r_ctl.rc_pace_max_segs; if (new_tso >= (PACE_MAX_IP_BYTES-maxseg)) new_tso = PACE_MAX_IP_BYTES - maxseg; - + if (new_tso != bbr->r_ctl.rc_pace_max_segs) { bbr_log_type_tsosize(bbr, cts, new_tso, 0, bbr->r_ctl.rc_pace_max_segs, maxseg, 0); bbr->r_ctl.rc_pace_max_segs = new_tso; @@ -5778,7 +5778,7 @@ tcp_bbr_tso_size_check(struct tcp_bbr *bbr, uint32_t cts) uint32_t old_tso = 0, new_tso; uint32_t maxseg, bytes; uint32_t tls_seg=0; - /* + /* * Google/linux uses the following algorithm to determine * the TSO size based on the b/w of the link (from Neal Cardwell email 9/27/18): * @@ -5791,7 +5791,7 @@ tcp_bbr_tso_size_check(struct tcp_bbr *bbr, uint32_t cts) * min_tso_segs = 2 * tso_segs = max(tso_segs, min_tso_segs) * - * * Note apply a device specific limit (we apply this in the + * * Note apply a device specific limit (we apply this in the * tcp_m_copym). * Note that before the initial measurement is made google bursts out * a full iwnd just like new-reno/cubic. @@ -5824,7 +5824,7 @@ tcp_bbr_tso_size_check(struct tcp_bbr *bbr, uint32_t cts) * Note the default per-tcb-divisor is 1000 (same as google). * the goal cross over is 30Mbps however. To recreate googles * algorithm you need to set: - * + * * cross-over = 23,168,000 bps * goal-time = 18000 * per-tcb-max = 2 @@ -5898,7 +5898,7 @@ tcp_bbr_tso_size_check(struct tcp_bbr *bbr, uint32_t cts) new_tso = maxseg; } else if (bbr->rc_use_google) { int min_tso_segs; - + /* Google considers the gain too */ if (bbr->r_ctl.rc_bbr_hptsi_gain != BBR_UNIT) { bw *= bbr->r_ctl.rc_bbr_hptsi_gain; @@ -5984,7 +5984,7 @@ tcp_bbr_tso_size_check(struct tcp_bbr *bbr, uint32_t cts) } #ifdef KERN_TLS if (tls_seg) { - /* + /* * Lets move the output size * up to 1 or more TLS record sizes. */ @@ -6116,7 +6116,7 @@ again: rsm->r_first_sent_time = bbr_get_earliest_send_outstanding(bbr, rsm, cts); rsm->r_flight_at_send = ctf_flight_size(bbr->rc_tp, (bbr->r_ctl.rc_sacked + bbr->r_ctl.rc_lost_bytes)); - /* + /* * Here we must also add in this rsm since snd_max * is updated after we return from a new send. */ @@ -6274,7 +6274,7 @@ bbr_make_timestamp_determination(struct tcp_bbr *bbr) * And the peer's time between receiving them by doing: * * peer_delta = bbr->r_ctl.last_inbound_ts - bbr->r_ctl.bbr_ts_check_tstmp - * + * * We want to figure out if the timestamp values are in msec, 10msec or usec. * We also may find that we can't use the timestamps if say we see * that the peer_delta indicates that though we may have taken 10ms to @@ -6290,11 +6290,11 @@ bbr_make_timestamp_determination(struct tcp_bbr *bbr) * put a 1 there. If the value is faster then ours, we will disable the * use of timestamps (though we could revist this later if we find it to be not * just an isolated one or two flows)). - * + * * To detect the batching middle boxes we will come up with our compensation and * if with it in place, we find the peer is drastically off (by some margin) in * the smaller direction, then we will assume the worst case and disable use of timestamps. - * + * */ uint64_t delta, peer_delta, delta_up; @@ -6327,7 +6327,7 @@ bbr_make_timestamp_determination(struct tcp_bbr *bbr) /* Very unlikely, the peer without * compensation shows that it saw * the two sends arrive further apart - * then we saw then in micro-seconds. + * then we saw then in micro-seconds. */ if (peer_delta < (delta + ((delta * (uint64_t)1000)/ (uint64_t)bbr_delta_percent))) { /* well it looks like the peer is a micro-second clock. */ @@ -6352,7 +6352,7 @@ bbr_make_timestamp_determination(struct tcp_bbr *bbr) /* Ok if not usec, what about 10usec (though unlikely)? */ delta_up = (peer_delta * 1000 * 10) / (uint64_t)bbr_delta_percent; if (((peer_delta * 10) + delta_up) >= delta) { - bbr->r_ctl.bbr_peer_tsratio = 10; + bbr->r_ctl.bbr_peer_tsratio = 10; bbr_log_tstmp_validation(bbr, peer_delta, delta); return; } @@ -6401,7 +6401,7 @@ tcp_bbr_xmit_timer_commit(struct tcp_bbr *bbr, struct tcpcb *tp, uint32_t cts) rtt = bbr->r_ctl.cur_rtt; tsin = bbr->r_ctl.ts_in; if (bbr->rc_prtt_set_ts) { - /* + /* * We are to force feed the rttProp filter due * to an entry into PROBE_RTT. This assures * that the times are sync'd between when we @@ -6413,13 +6413,13 @@ tcp_bbr_xmit_timer_commit(struct tcp_bbr *bbr, struct tcpcb *tp, uint32_t cts) * value to the newest rtt. */ uint32_t rtt_prop; - + bbr->rc_prtt_set_ts = 0; rtt_prop = get_filter_value_small(&bbr->r_ctl.rc_rttprop); if (rtt > rtt_prop) filter_increase_by_small(&bbr->r_ctl.rc_rttprop, (rtt - rtt_prop), cts); else - apply_filter_min_small(&bbr->r_ctl.rc_rttprop, rtt, cts); + apply_filter_min_small(&bbr->r_ctl.rc_rttprop, rtt, cts); } if (bbr->rc_ack_was_delayed) rtt += bbr->r_ctl.rc_ack_hdwr_delay; @@ -6453,8 +6453,8 @@ tcp_bbr_xmit_timer_commit(struct tcp_bbr *bbr, struct tcpcb *tp, uint32_t cts) bbr->r_ctl.bbr_ts_check_our_cts = bbr->r_ctl.cur_rtt_send_time; } } else { - /* - * We have to have consecutive acks + /* + * We have to have consecutive acks * reset any "filled" state to none. */ bbr->rc_ts_data_set = 0; @@ -6573,7 +6573,7 @@ bbr_earlier_retran(struct tcpcb *tp, struct tcp_bbr *bbr, struct bbr_sendmap *rs */ return; } - + if (rsm->r_flags & BBR_WAS_SACKPASS) { /* * We retransmitted based on a sack and the earlier @@ -6586,7 +6586,7 @@ bbr_earlier_retran(struct tcpcb *tp, struct tcp_bbr *bbr, struct bbr_sendmap *rs if (rsm->r_flags & BBR_MARKED_LOST) { bbr->r_ctl.rc_lost -= rsm->r_end - rsm->r_start; bbr->r_ctl.rc_lost_bytes -= rsm->r_end - rsm->r_start; - rsm->r_flags &= ~BBR_MARKED_LOST; + rsm->r_flags &= ~BBR_MARKED_LOST; if (SEQ_GT(bbr->r_ctl.rc_lt_lost, bbr->r_ctl.rc_lost)) /* LT sampling also needs adjustment */ bbr->r_ctl.rc_lt_lost = bbr->r_ctl.rc_lost; @@ -6607,8 +6607,8 @@ bbr_set_reduced_rtt(struct tcp_bbr *bbr, uint32_t cts, uint32_t line) if (bbr_can_force_probertt && (TSTMP_GT(cts, bbr->r_ctl.last_in_probertt)) && ((cts - bbr->r_ctl.last_in_probertt) > bbr->r_ctl.rc_probertt_int)) { - /* - * We should enter probe-rtt its been too long + /* + * We should enter probe-rtt its been too long * since we have been there. */ bbr_enter_probe_rtt(bbr, cts, __LINE__); @@ -6666,7 +6666,7 @@ bbr_nf_measurement(struct tcp_bbr *bbr, struct bbr_sendmap *rsm, uint32_t rtt, u tim = (uint64_t)(bbr->r_ctl.rc_del_time - rsm->r_del_time); else tim = 1; - /* + /* * Now that we have processed the tim (skipping the sample * or possibly updating the time, go ahead and * calculate the cdr. @@ -6681,7 +6681,7 @@ bbr_nf_measurement(struct tcp_bbr *bbr, struct bbr_sendmap *rsm, uint32_t rtt, u } upper = (bw >> 32) & 0x00000000ffffffff; lower = bw & 0x00000000ffffffff; - /* + /* * If we are using this b/w shove it in now so we * can see in the trace viewer if it gets over-ridden. */ @@ -6783,7 +6783,7 @@ bbr_google_measurement(struct tcp_bbr *bbr, struct bbr_sendmap *rsm, uint32_t rt tim = (uint64_t)(bbr->r_ctl.rc_del_time - rsm->r_del_time); else tim = 1; - /* + /* * Now that we have processed the tim (skipping the sample * or possibly updating the time, go ahead and * calculate the cdr. @@ -6800,7 +6800,7 @@ bbr_google_measurement(struct tcp_bbr *bbr, struct bbr_sendmap *rsm, uint32_t rt } upper = (bw >> 32) & 0x00000000ffffffff; lower = bw & 0x00000000ffffffff; - /* + /* * If we are using this b/w shove it in now so we * can see in the trace viewer if it gets over-ridden. */ @@ -6900,7 +6900,7 @@ bbr_update_bbr_info(struct tcp_bbr *bbr, struct bbr_sendmap *rsm, uint32_t rtt, else bbr->rc_ack_is_cumack = 0; old_rttprop = bbr_get_rtt(bbr, BBR_RTT_PROP); - /* + /* * Note the following code differs to the original * BBR spec. It calls for <= not <. However after a * long discussion in email with Neal, he acknowledged @@ -6932,7 +6932,7 @@ bbr_update_bbr_info(struct tcp_bbr *bbr, struct bbr_sendmap *rsm, uint32_t rtt, } if ((bbr->rc_use_google == 0) && (match == BBR_RTT_BY_TIMESTAMP)) { - /* + /* * We don't do b/w update with * these since they are not really * reliable. @@ -7137,7 +7137,7 @@ bbr_log_sack_passed(struct tcpcb *tp, continue; } if (nrsm->r_flags & BBR_SACK_PASSED) { - /* + /* * We found one that is already marked * passed, we have been here before and * so all others below this are marked. @@ -7240,7 +7240,7 @@ do_rest_ofb: /* * Need to split this in two pieces the before and after. */ - if (bbr_sack_mergable(rsm, start, end)) + if (bbr_sack_mergable(rsm, start, end)) nrsm = bbr_alloc_full_limit(bbr); else nrsm = bbr_alloc_limit(bbr, BBR_LIMIT_TYPE_SPLIT); @@ -7310,7 +7310,7 @@ do_rest_ofb: goto out; } /* Ok we need to split off this one at the tail */ - if (bbr_sack_mergable(rsm, start, end)) + if (bbr_sack_mergable(rsm, start, end)) nrsm = bbr_alloc_full_limit(bbr); else nrsm = bbr_alloc_limit(bbr, BBR_LIMIT_TYPE_SPLIT); @@ -7360,7 +7360,7 @@ do_rest_ofb: } out: if (rsm && (rsm->r_flags & BBR_ACKED)) { - /* + /* * Now can we merge this newly acked * block with either the previous or * next block? @@ -7462,7 +7462,7 @@ bbr_log_syn(struct tcpcb *tp, struct tcpopt *to) struct tcp_bbr *bbr; struct bbr_sendmap *rsm; uint32_t cts; - + bbr = (struct tcp_bbr *)tp->t_fb_ptr; cts = bbr->r_ctl.rc_rcvtime; rsm = TAILQ_FIRST(&bbr->r_ctl.rc_map); @@ -7526,7 +7526,7 @@ bbr_log_ack(struct tcpcb *tp, struct tcpopt *to, struct tcphdr *th, acked = th_ack - tp->snd_una; bbr_log_progress_event(bbr, tp, ticks, PROGRESS_UPDATE, __LINE__); bbr->rc_tp->t_acktime = ticks; - } else + } else acked = 0; if (SEQ_LEQ(th_ack, tp->snd_una)) { /* Only sent here for sack processing */ @@ -7601,7 +7601,7 @@ more: /* None here to ack */ goto proc_sack; } - /* + /* * Clear the dup ack counter, it will * either be freed or if there is some * remaining we need to start it at zero. @@ -7686,8 +7686,8 @@ more: } if ((rsm->r_flags & BBR_MARKED_LOST) && ((rsm->r_flags & BBR_ACKED) == 0)) { - /* - * It was marked lost and partly ack'd now + /* + * It was marked lost and partly ack'd now * for the first time. We lower the rc_lost_bytes * and still leave it MARKED. */ @@ -8030,7 +8030,7 @@ nothing_left: } sack_filter_clear(&bbr->r_ctl.bbr_sf, tp->snd_una); bbr_log_ack_clear(bbr, bbr->r_ctl.rc_rcvtime); - /* + /* * We invalidate the last ack here since we * don't want to transfer forward the time * for our sum's calculations. @@ -8092,11 +8092,11 @@ bbr_restart_after_idle(struct tcp_bbr *bbr, uint32_t cts, uint32_t idle_time) * Note that if idle time does not exceed our * threshold, we do nothing continuing the state * transitions we were last walking through. - */ + */ if (idle_time >= bbr_idle_restart_threshold) { if (bbr->rc_use_idle_restart) { bbr->rc_bbr_state = BBR_STATE_IDLE_EXIT; - /* + /* * Set our target using BBR_UNIT, so * we increase at a dramatic rate but * we stop when we get the pipe @@ -8127,7 +8127,7 @@ bbr_exit_persist(struct tcpcb *tp, struct tcp_bbr *bbr, uint32_t cts, int32_t li bbr->rc_hit_state_1 = 0; tp->t_flags &= ~TF_FORCEDATA; bbr->r_ctl.rc_del_time = cts; - /* + /* * We invalidate the last ack here since we * don't want to transfer forward the time * for our sum's calculations. @@ -8167,7 +8167,7 @@ bbr_exit_persist(struct tcpcb *tp, struct tcp_bbr *bbr, uint32_t cts, int32_t li bbr->r_ctl.rc_bbr_state_time = cts; if ((bbr->rc_bbr_state == BBR_STATE_PROBE_BW) || (bbr->rc_bbr_state == BBR_STATE_PROBE_RTT)) { - /* + /* * If we are going back to probe-bw * or probe_rtt, we may need to possibly * do a fast restart. @@ -8181,7 +8181,7 @@ bbr_collapsed_window(struct tcp_bbr *bbr) { /* * Now we must walk the - * send map and divide the + * send map and divide the * ones left stranded. These * guys can't cause us to abort * the connection and are really @@ -8192,7 +8192,7 @@ bbr_collapsed_window(struct tcp_bbr *bbr) * the win and acked that data. We would * get into an ack war, the simplier * method then of just pretending we - * did not send those segments something + * did not send those segments something * won't work. */ struct bbr_sendmap *rsm, *nrsm; @@ -8219,8 +8219,8 @@ bbr_collapsed_window(struct tcp_bbr *bbr) /* Nothing to do strange */ return; } - /* - * Now can we split? + /* + * Now can we split? * * We don't want to split if splitting * would generate too many small segments @@ -8271,7 +8271,7 @@ bbr_collapsed_window(struct tcp_bbr *bbr) nrsm->r_in_tmap = 1; } } else { - /* + /* * Split not allowed just start here just * use this guy. */ @@ -8294,7 +8294,7 @@ bbr_un_collapse_window(struct tcp_bbr *bbr) { struct bbr_sendmap *rsm; int cleared = 0; - + TAILQ_FOREACH_REVERSE(rsm, &bbr->r_ctl.rc_map, bbr_head, r_next) { if (rsm->r_flags & BBR_RWND_COLLAPSED) { /* Clear the flag */ @@ -8843,7 +8843,7 @@ bbr_fastack(struct mbuf *m, struct tcphdr *th, struct socket *so, /* Ok if we reach here, we can process a fast-ack */ nsegs = max(1, m->m_pkthdr.lro_nsegs); sack_changed = bbr_log_ack(tp, to, th, &prev_acked); - /* + /* * We never detect loss in fast ack [we can't * have a sack and can't be in recovery so * we always pass 0 (nothing detected)]. @@ -8959,7 +8959,7 @@ bbr_fastack(struct mbuf *m, struct tcphdr *th, struct socket *so, } sack_filter_clear(&bbr->r_ctl.bbr_sf, tp->snd_una); bbr_log_ack_clear(bbr, bbr->r_ctl.rc_rcvtime); - /* + /* * We invalidate the last ack here since we * don't want to transfer forward the time * for our sum's calculations. @@ -9060,19 +9060,19 @@ bbr_do_syn_sent(struct mbuf *m, struct tcphdr *th, struct socket *so, tp->t_flags |= TF_ACKNOW; } if (SEQ_GT(th->th_ack, tp->iss)) { - /* + /* * The SYN is acked * handle it specially. */ bbr_log_syn(tp, to); } if (SEQ_GT(th->th_ack, tp->snd_una)) { - /* - * We advance snd_una for the + /* + * We advance snd_una for the * fast open case. If th_ack is - * acknowledging data beyond + * acknowledging data beyond * snd_una we can't just call - * ack-processing since the + * ack-processing since the * data stream in our send-map * will start at snd_una + 1 (one * beyond the SYN). If its just @@ -9133,7 +9133,7 @@ bbr_do_syn_sent(struct mbuf *m, struct tcphdr *th, struct socket *so, if (thflags & TH_ACK) { if ((to->to_flags & TOF_TS) != 0) { uint32_t t, rtt; - + t = tcp_tv_to_mssectick(&bbr->rc_tv); if (TSTMP_GEQ(t, to->to_tsecr)) { rtt = t - to->to_tsecr; @@ -9316,7 +9316,7 @@ bbr_do_syn_recv(struct mbuf *m, struct tcphdr *th, struct socket *so, if (thflags & TH_ACK) bbr_log_syn(tp, to); if (IS_FASTOPEN(tp->t_flags) && tp->t_tfo_pending) { - + tcp_fastopen_decrement_counter(tp->t_tfo_pending); tp->t_tfo_pending = NULL; /* @@ -10260,7 +10260,7 @@ bbr_init(struct tcpcb *tp) bbr->rc_use_ts_limit = 1; else bbr->rc_use_ts_limit = 0; - if (bbr_ts_can_raise) + if (bbr_ts_can_raise) bbr->ts_can_raise = 1; else bbr->ts_can_raise = 0; @@ -10531,7 +10531,7 @@ bbr_substate_change(struct tcp_bbr *bbr, uint32_t cts, int32_t line, int dolog) */ int32_t old_state, old_gain; - + old_state = bbr_state_val(bbr); old_gain = bbr->r_ctl.rc_bbr_hptsi_gain; if (bbr_state_val(bbr) == BBR_SUB_LEVEL1) { @@ -10551,7 +10551,7 @@ bbr_substate_change(struct tcp_bbr *bbr, uint32_t cts, int32_t line, int dolog) * shallow buffer detection is enabled) */ if (bbr->skip_gain) { - /* + /* * Hardware pacing has set our rate to * the max and limited our b/w just * do level i.e. no gain. @@ -10560,7 +10560,7 @@ bbr_substate_change(struct tcp_bbr *bbr, uint32_t cts, int32_t line, int dolog) } else if (bbr->gain_is_limited && bbr->bbr_hdrw_pacing && bbr->r_ctl.crte) { - /* + /* * We can't gain above the hardware pacing * rate which is less than our rate + the gain * calculate the gain needed to reach the hardware @@ -10583,7 +10583,7 @@ bbr_substate_change(struct tcp_bbr *bbr, uint32_t cts, int32_t line, int dolog) bbr->r_ctl.rc_bbr_hptsi_gain = bbr_hptsi_gain[BBR_SUB_GAIN]; if ((bbr->rc_use_google == 0) && (bbr_gain_to_target == 0)) { bbr->r_ctl.rc_bbr_state_atflight = cts; - } else + } else bbr->r_ctl.rc_bbr_state_atflight = 0; } else if (bbr_state_val(bbr) == BBR_SUB_DRAIN) { bbr->rc_hit_state_1 = 1; @@ -10682,14 +10682,14 @@ bbr_set_probebw_google_gains(struct tcp_bbr *bbr, uint32_t cts, uint32_t losses) return; } if ((cts - bbr->r_ctl.rc_bbr_state_time) < bbr_get_rtt(bbr, BBR_RTT_PROP)) { - /* + /* * Must be a rttProp movement forward before * we can change states. */ return; } if (bbr_state_val(bbr) == BBR_SUB_GAIN) { - /* + /* * The needed time has passed but for * the gain cycle extra rules apply: * 1) If we have seen loss, we exit @@ -10711,13 +10711,13 @@ static void bbr_set_probebw_gains(struct tcp_bbr *bbr, uint32_t cts, uint32_t losses) { uint32_t flight, bbr_cur_cycle_time; - + if (bbr->rc_use_google) { bbr_set_probebw_google_gains(bbr, cts, losses); return; } if (cts == 0) { - /* + /* * Never alow cts to be 0 we * do this so we can judge if * we have set a timestamp. @@ -10728,13 +10728,13 @@ bbr_set_probebw_gains(struct tcp_bbr *bbr, uint32_t cts, uint32_t losses) bbr_cur_cycle_time = bbr_get_rtt(bbr, BBR_RTT_PKTRTT); else bbr_cur_cycle_time = bbr_get_rtt(bbr, BBR_RTT_PROP); - + if (bbr->r_ctl.rc_bbr_state_atflight == 0) { if (bbr_state_val(bbr) == BBR_SUB_DRAIN) { flight = ctf_flight_size(bbr->rc_tp, (bbr->r_ctl.rc_sacked + bbr->r_ctl.rc_lost_bytes)); if (bbr_sub_drain_slam_cwnd && bbr->rc_hit_state_1) { - /* Keep it slam down */ + /* Keep it slam down */ if (bbr->rc_tp->snd_cwnd > bbr->r_ctl.rc_target_at_state) { bbr->rc_tp->snd_cwnd = bbr->r_ctl.rc_target_at_state; bbr_log_type_cwndupd(bbr, 0, 0, 0, 12, 0, 0, __LINE__); @@ -10802,11 +10802,11 @@ bbr_set_probebw_gains(struct tcp_bbr *bbr, uint32_t cts, uint32_t losses) } /** * We fall through and return always one of two things has - * occured. - * 1) We are still not at target - * - * 2) We reached the target and set rc_bbr_state_atflight - * which means we no longer hit this block + * occured. + * 1) We are still not at target + * + * 2) We reached the target and set rc_bbr_state_atflight + * which means we no longer hit this block * next time we are called. */ return; @@ -10861,7 +10861,7 @@ static void bbr_set_state_target(struct tcp_bbr *bbr, int line) { uint32_t tar, meth; - + if ((bbr->rc_bbr_state == BBR_STATE_PROBE_RTT) && ((bbr->r_ctl.bbr_rttprobe_gain_val == 0) || bbr->rc_use_google)) { /* Special case using old probe-rtt method */ @@ -10875,15 +10875,15 @@ bbr_set_state_target(struct tcp_bbr *bbr, int line) tar = bbr_get_a_state_target(bbr, bbr->r_ctl.rc_bbr_hptsi_gain); meth = 2; } else if ((bbr_target_is_bbunit) || bbr->rc_use_google) { - /* + /* * If configured, or for google all other states * get BBR_UNIT. */ tar = bbr_get_a_state_target(bbr, BBR_UNIT); meth = 3; } else { - /* - * Or we set a target based on the pacing gain + /* + * Or we set a target based on the pacing gain * for non-google mode and default (non-configured). * Note we don't set a target goal below drain (192). */ @@ -10925,14 +10925,14 @@ bbr_enter_probe_rtt(struct tcp_bbr *bbr, uint32_t cts, int32_t line) bbr->r_ctl.rc_bbr_state_time = cts; bbr->rc_bbr_state = BBR_STATE_PROBE_RTT; /* We need to force the filter to update */ - + if ((bbr_sub_drain_slam_cwnd) && bbr->rc_hit_state_1 && (bbr->rc_use_google == 0) && (bbr_state_val(bbr) == BBR_SUB_DRAIN)) { if (bbr->rc_tp->snd_cwnd > bbr->r_ctl.rc_saved_cwnd) bbr->r_ctl.rc_saved_cwnd = bbr->rc_tp->snd_cwnd; - } else + } else bbr->r_ctl.rc_saved_cwnd = bbr->rc_tp->snd_cwnd; /* Update the lost */ bbr->r_ctl.rc_lost_at_startup = bbr->r_ctl.rc_lost; @@ -10977,7 +10977,7 @@ bbr_enter_probe_rtt(struct tcp_bbr *bbr, uint32_t cts, int32_t line) static void bbr_check_probe_rtt_limits(struct tcp_bbr *bbr, uint32_t cts) { - /* + /* * Sanity check on probe-rtt intervals. * In crazy situations where we are competing * against new-reno flows with huge buffers @@ -10995,7 +10995,7 @@ bbr_check_probe_rtt_limits(struct tcp_bbr *bbr, uint32_t cts) cur_rttp = roundup(baseval, USECS_IN_SECOND); fval = bbr_filter_len_sec * USECS_IN_SECOND; if (bbr_is_ratio == 0) { - if (fval > bbr_rtt_probe_limit) + if (fval > bbr_rtt_probe_limit) newval = cur_rttp + (fval - bbr_rtt_probe_limit); else newval = cur_rttp; @@ -11010,15 +11010,15 @@ bbr_check_probe_rtt_limits(struct tcp_bbr *bbr, uint32_t cts) reset_time_small(&bbr->r_ctl.rc_rttprop, newval); val = 1; } else { - /* + /* * No adjustments were made * do we need to shrink it? */ if (bbr->r_ctl.rc_probertt_int > bbr_rtt_probe_limit) { if (cur_rttp <= bbr_rtt_probe_limit) { - /* - * Things have calmed down lets - * shrink all the way to default + /* + * Things have calmed down lets + * shrink all the way to default */ bbr->r_ctl.rc_probertt_int = bbr_rtt_probe_limit; reset_time_small(&bbr->r_ctl.rc_rttprop, @@ -11079,8 +11079,8 @@ bbr_exit_probe_rtt(struct tcpcb *tp, struct tcp_bbr *bbr, uint32_t cts) /* Back to startup */ bbr->rc_bbr_state = BBR_STATE_STARTUP; bbr->r_ctl.rc_bbr_state_time = cts; - /* - * We don't want to give a complete free 3 + /* + * We don't want to give a complete free 3 * measurements until we exit, so we use * the number of pe's we were in probe-rtt * to add to the startup_epoch. That way @@ -11123,7 +11123,7 @@ bbr_should_enter_probe_rtt(struct tcp_bbr *bbr, uint32_t cts) } -static int32_t +static int32_t bbr_google_startup(struct tcp_bbr *bbr, uint32_t cts, int32_t pkt_epoch) { uint64_t btlbw, gain; @@ -11223,7 +11223,7 @@ bbr_state_startup(struct tcp_bbr *bbr, uint32_t cts, int32_t epoch, int32_t pkt_ /* * We only assess if we have a new measurment when * we have no loss and are not in recovery. - * Drag up by one our last_startup epoch so we will hold + * Drag up by one our last_startup epoch so we will hold * the number of non-gain we have already accumulated. */ if (bbr->r_ctl.rc_bbr_last_startup_epoch < bbr->r_ctl.rc_pkt_epoch) @@ -11329,7 +11329,7 @@ bbr_state_change(struct tcp_bbr *bbr, uint32_t cts, int32_t epoch, int32_t pkt_e if ((bbr->rc_use_google == 0) && bbr_slam_cwnd_in_main_drain) { /* Here we don't have to worry about probe-rtt */ - bbr->r_ctl.rc_saved_cwnd = bbr->rc_tp->snd_cwnd; + bbr->r_ctl.rc_saved_cwnd = bbr->rc_tp->snd_cwnd; bbr->rc_tp->snd_cwnd = bbr->r_ctl.rc_target_at_state; bbr_log_type_cwndupd(bbr, 0, 0, 0, 12, 0, 0, __LINE__); } @@ -11361,7 +11361,7 @@ bbr_state_change(struct tcp_bbr *bbr, uint32_t cts, int32_t epoch, int32_t pkt_e bbr->r_ctl.rc_bbr_hptsi_gain = BBR_UNIT; bbr->r_ctl.rc_bbr_cwnd_gain = BBR_UNIT; bbr_set_state_target(bbr, __LINE__); - /* + /* * Rig it so we don't do anything crazy and * start fresh with a new randomization. */ @@ -11380,8 +11380,8 @@ bbr_state_change(struct tcp_bbr *bbr, uint32_t cts, int32_t epoch, int32_t pkt_e if ((bbr->rc_use_google == 0) && bbr_slam_cwnd_in_main_drain && (bbr->rc_tp->snd_cwnd > bbr->r_ctl.rc_target_at_state)) { - /* - * Here we don't have to worry about probe-rtt + /* + * Here we don't have to worry about probe-rtt * re-slam it, but keep it slammed down. */ bbr->rc_tp->snd_cwnd = bbr->r_ctl.rc_target_at_state; @@ -11426,7 +11426,7 @@ bbr_state_change(struct tcp_bbr *bbr, uint32_t cts, int32_t epoch, int32_t pkt_e */ bbr->rc_tp->snd_cwnd = bbr_rtt_probe_cwndtarg * (bbr->rc_tp->t_maxseg - bbr->rc_last_options); bbr_log_type_cwndupd(bbr, 0, 0, 0, 12, 0, 0, __LINE__); - } else if ((bbr_prtt_slam_cwnd) && + } else if ((bbr_prtt_slam_cwnd) && (bbr->rc_tp->snd_cwnd > bbr->r_ctl.rc_target_at_state)) { /* Re-slam it */ bbr->rc_tp->snd_cwnd = bbr->r_ctl.rc_target_at_state; @@ -11577,7 +11577,7 @@ bbr_do_segment_nounlock(struct mbuf *m, struct tcphdr *th, struct socket *so, if (m->m_flags & M_TSTMP) { /* Prefer the hardware timestamp if present */ struct timespec ts; - + mbuf_tstmp2timespec(m, &ts); bbr->rc_tv.tv_sec = ts.tv_sec; bbr->rc_tv.tv_usec = ts.tv_nsec / 1000; @@ -11591,7 +11591,7 @@ bbr_do_segment_nounlock(struct mbuf *m, struct tcphdr *th, struct socket *so, bbr->rc_tv.tv_usec = ts.tv_nsec / 1000; bbr->r_ctl.rc_rcvtime = cts = tcp_tv_to_usectick(&bbr->rc_tv); } else { - /* + /* * Ok just get the current time. */ bbr->r_ctl.rc_rcvtime = lcts = cts = tcp_get_usecs(&bbr->rc_tv); @@ -11709,7 +11709,7 @@ bbr_do_segment_nounlock(struct mbuf *m, struct tcphdr *th, struct socket *so, bbr->r_ctl.rc_ack_hdwr_delay = lcts - cts; bbr->rc_ack_was_delayed = 1; if (TSTMP_GT(bbr->r_ctl.rc_ack_hdwr_delay, - bbr->r_ctl.highest_hdwr_delay)) + bbr->r_ctl.highest_hdwr_delay)) bbr->r_ctl.highest_hdwr_delay = bbr->r_ctl.rc_ack_hdwr_delay; } else { bbr->r_ctl.rc_ack_hdwr_delay = 0; @@ -11881,7 +11881,7 @@ bbr_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so, { struct timeval tv; int retval; - + /* First lets see if we have old packets */ if (tp->t_in_pkt) { if (ctf_do_queued_segments(so, tp, 1)) { @@ -12274,12 +12274,12 @@ bbr_output_wtime(struct tcpcb *tp, const struct timeval *tv) /* Setup the delay which will be added in */ delay_calc -= bbr->r_ctl.rc_last_delay_val; else { - /* - * We are early setup to adjust + /* + * We are early setup to adjust * our slot time. */ uint64_t merged_val; - + bbr->r_ctl.rc_agg_early += (bbr->r_ctl.rc_last_delay_val - delay_calc); bbr->r_agg_early_set = 1; if (bbr->r_ctl.rc_hptsi_agg_delay) { @@ -12325,7 +12325,7 @@ bbr_output_wtime(struct tcpcb *tp, const struct timeval *tv) if ((tp->snd_una == tp->snd_max) && (bbr->rc_bbr_state != BBR_STATE_IDLE_EXIT) && (sbavail(sb))) { - /* + /* * Ok we have been idle with nothing outstanding * we possibly need to start fresh with either a new * suite of states or a fast-ramp up. @@ -12515,8 +12515,8 @@ recheck_resend: sb_offset = rsm->r_start - tp->snd_una; BBR_STAT_INC(bbr_tlp_set); } - /* - * Enforce a connection sendmap count limit if set + /* + * Enforce a connection sendmap count limit if set * as long as we are not retransmiting. */ if ((rsm == NULL) && @@ -12698,7 +12698,7 @@ recheck_resend: * to have something in the sb. */ len = 1; - sb_offset = 0; + sb_offset = 0; if (avail == 0) len = 0; } @@ -12795,7 +12795,7 @@ recheck_resend: } else if ((rsm == NULL) && (doing_tlp == 0) && (len < bbr->r_ctl.rc_pace_max_segs)) { - /* + /* * We are not sending a full segment for * some reason. Should we not send anything (think * sws or persists)? @@ -12811,7 +12811,7 @@ recheck_resend: * lets not send, and possibly enter persists. */ len = 0; - if (tp->snd_max == tp->snd_una) + if (tp->snd_max == tp->snd_una) bbr_enter_persist(tp, bbr, cts, __LINE__); } else if ((tp->snd_cwnd >= bbr->r_ctl.rc_pace_max_segs) && (ctf_flight_size(tp, (bbr->r_ctl.rc_sacked + @@ -12825,7 +12825,7 @@ recheck_resend: * not having gone off), We have 2 segments or * more already in flight, its not the tail end * of the socket buffer and the cwnd is blocking - * us from sending out minimum pacing segment size. + * us from sending out minimum pacing segment size. * Lets not send anything. */ bbr->rc_cwnd_limited = 1; @@ -12836,10 +12836,10 @@ recheck_resend: bbr->r_ctl.rc_lost_bytes)) > (2 * maxseg)) && (len < (int)(sbavail(sb) - sb_offset)) && (TCPS_HAVEESTABLISHED(tp->t_state))) { - /* + /* * Here we have a send window but we have * filled it up and we can't send another pacing segment. - * We also have in flight more than 2 segments + * We also have in flight more than 2 segments * and we are not completing the sb i.e. we allow * the last bytes of the sb to go out even if * its not a full pacing segment. @@ -12857,7 +12857,7 @@ recheck_resend: len && (rsm == NULL) && (len < min((bbr->r_ctl.rc_high_rwnd/2), bbr->r_ctl.rc_pace_max_segs))) { - /* + /* * We are in persist, not doing a retransmit and don't have enough space * yet to send a full TSO. So is it at the end of the sb * if so we need to send else nuke to 0 and don't send. @@ -13077,7 +13077,7 @@ just_return_nolock: */ bbr->r_ctl.r_app_limited_until = (ctf_flight_size(tp, (bbr->r_ctl.rc_sacked + bbr->r_ctl.rc_lost_bytes)) + bbr->r_ctl.rc_delivered); - } + } if (tot_len == 0) counter_u64_add(bbr_out_size[TCP_MSS_ACCT_JUSTRET], 1); tp->t_flags &= ~TF_FORCEDATA; @@ -13518,8 +13518,8 @@ send: #endif mb, moff, &len, if_hw_tsomaxsegcount, - if_hw_tsomaxsegsize, msb, - ((rsm == NULL) ? hw_tls : 0) + if_hw_tsomaxsegsize, msb, + ((rsm == NULL) ? hw_tls : 0) #ifdef NETFLIX_COPY_ARGS , &filled_all #endif @@ -13896,7 +13896,7 @@ send: /* Log to the black box */ if (tp->t_logstate != TCP_LOG_STATE_OFF) { union tcp_log_stackspecific log; - + bbr_fill_in_logging_data(bbr, &log.u_bbr, cts); /* Record info on type of transmission */ log.u_bbr.flex1 = bbr->r_ctl.rc_hptsi_agg_delay; @@ -14043,7 +14043,7 @@ out: if (doing_tlp) { BBR_STAT_INC(bbr_miss_tlp); bbr_log_type_hrdwtso(tp, bbr, len, 1, what_we_can); - + } else if (rsm) { BBR_STAT_INC(bbr_miss_retran); @@ -14175,8 +14175,8 @@ nomore: /* * Failures do not advance the seq counter above. For the * case of ENOBUFS we will fall out and become ack-clocked. - * capping the cwnd at the current flight. - * Everything else will just have to retransmit with the timer + * capping the cwnd at the current flight. + * Everything else will just have to retransmit with the timer * (no pacer). */ SOCKBUF_UNLOCK_ASSERT(sb); @@ -14310,7 +14310,7 @@ nomore: rate_wanted = bbr_get_hardware_rate(bbr); bbr->bbr_attempt_hdwr_pace = 1; - bbr->r_ctl.crte = tcp_set_pacing_rate(bbr->rc_tp, + bbr->r_ctl.crte = tcp_set_pacing_rate(bbr->rc_tp, inp->inp_route.ro_rt->rt_ifp, rate_wanted, (RS_PACING_GEQ|RS_PACING_SUB_OK), @@ -14357,9 +14357,9 @@ nomore: bbr->bbr_hdrw_pacing = 0; } else if ((inp->inp_route.ro_rt == NULL) || (inp->inp_route.ro_rt->rt_ifp != inp->inp_snd_tag->ifp)) { - /* + /* * We had an interface or route change, - * detach from the current hdwr pacing + * detach from the current hdwr pacing * and setup to re-attempt next go * round. */ @@ -14432,8 +14432,8 @@ enobufs: slot = 1000; } if (bbr->bbr_hdrw_pacing && (bbr->hw_pacing_set == 0)) { - /* - * We don't change the tso size until some number of sends + /* + * We don't change the tso size until some number of sends * to give the hardware commands time to get down * to the interface. */ @@ -14610,9 +14610,9 @@ bbr_set_sockopt(struct socket *so, struct sockopt *sopt, /* Turn on the google mode */ bbr_google_mode_on(bbr); if ((optval > 3) && (optval < 500)) { - /* - * Must be at least greater than .3% - * and must be less than 50.0%. + /* + * Must be at least greater than .3% + * and must be less than 50.0%. */ bbr->r_ctl.bbr_google_discount = optval; } @@ -14623,7 +14623,7 @@ bbr_set_sockopt(struct socket *so, struct sockopt *sopt, break; case TCP_BBR_TSLIMITS: BBR_OPTS_INC(tcp_bbr_tslimits); - if (optval == 1) + if (optval == 1) bbr->rc_use_ts_limit = 1; else if (optval == 0) bbr->rc_use_ts_limit = 0; @@ -14753,7 +14753,7 @@ bbr_set_sockopt(struct socket *so, struct sockopt *sopt, break; case TCP_BBR_FLOOR_MIN_TSO: BBR_OPTS_INC(tcp_utter_max_tso); - if ((optval >= 0) && (optval < 40)) + if ((optval >= 0) && (optval < 40)) bbr->r_ctl.bbr_hptsi_segments_floor = optval; else error = EINVAL; diff --git a/sys/netinet/tcp_stacks/rack.c b/sys/netinet/tcp_stacks/rack.c index bdd9ff9947f..87a75d11434 100644 --- a/sys/netinet/tcp_stacks/rack.c +++ b/sys/netinet/tcp_stacks/rack.c @@ -501,7 +501,7 @@ rack_init_sysctls(void) { struct sysctl_oid *rack_counters; struct sysctl_oid *rack_attack; - + SYSCTL_ADD_S32(&rack_sysctl_ctx, SYSCTL_CHILDREN(rack_sysctl_root), OID_AUTO, "rate_sample_method", CTLFLAG_RW, @@ -1052,7 +1052,7 @@ rb_map_cmp(struct rack_sendmap *b, struct rack_sendmap *a) { if (SEQ_GEQ(b->r_start, a->r_start) && SEQ_LT(b->r_start, a->r_end)) { - /* + /* * The entry b is within the * block a. i.e.: * a -- |-------------| @@ -1064,15 +1064,15 @@ rb_map_cmp(struct rack_sendmap *b, struct rack_sendmap *a) */ return (0); } else if (SEQ_GEQ(b->r_start, a->r_end)) { - /* + /* * b falls as either the next * sequence block after a so a * is said to be smaller than b. * i.e: * a -- |------| * b -- |--------| - * or - * b -- |-----| + * or + * b -- |-----| */ return (1); } @@ -1212,7 +1212,7 @@ rack_log_rtt_upd(struct tcpcb *tp, struct tcp_rack *rack, int32_t t, log.u_bbr.flex2 = o_srtt; log.u_bbr.flex3 = o_var; log.u_bbr.flex4 = rack->r_ctl.rack_rs.rs_rtt_lowest; - log.u_bbr.flex5 = rack->r_ctl.rack_rs.rs_rtt_highest; + log.u_bbr.flex5 = rack->r_ctl.rack_rs.rs_rtt_highest; log.u_bbr.flex6 = rack->r_ctl.rack_rs.rs_rtt_cnt; log.u_bbr.rttProp = rack->r_ctl.rack_rs.rs_rtt_tot; log.u_bbr.flex8 = rack->r_ctl.rc_rate_sample_method; @@ -1230,7 +1230,7 @@ rack_log_rtt_upd(struct tcpcb *tp, struct tcp_rack *rack, int32_t t, static void rack_log_rtt_sample(struct tcp_rack *rack, uint32_t rtt) { - /* + /* * Log the rtt sample we are * applying to the srtt algorithm in * useconds. @@ -1238,7 +1238,7 @@ rack_log_rtt_sample(struct tcp_rack *rack, uint32_t rtt) if (rack->rc_tp->t_logstate != TCP_LOG_STATE_OFF) { union tcp_log_stackspecific log; struct timeval tv; - + /* Convert our ms to a microsecond */ memset(&log, 0, sizeof(log)); log.u_bbr.flex1 = rtt * 1000; @@ -1359,7 +1359,7 @@ rack_log_type_hrdwtso(struct tcpcb *tp, struct tcp_rack *rack, int len, int mod, 0, &log, false, &tv); } } - + static void rack_log_type_just_return(struct tcp_rack *rack, uint32_t cts, uint32_t tlen, uint32_t slot, uint8_t hpts_calling) { @@ -1862,7 +1862,7 @@ rack_cc_after_idle(struct tcpcb *tp) if (tp->snd_cwnd == 1) i_cwnd = tp->t_maxseg; /* SYN(-ACK) lost */ - else + else i_cwnd = tcp_compute_initwnd(tcp_maxseg(tp)); /* @@ -2014,14 +2014,14 @@ rack_calc_thresh_tlp(struct tcpcb *tp, struct tcp_rack *rack, struct rack_sendmap *prsm; uint32_t thresh, len; int maxseg; - + if (srtt == 0) srtt = 1; if (rack->r_ctl.rc_tlp_threshold) thresh = srtt + (srtt / rack->r_ctl.rc_tlp_threshold); else thresh = (srtt * 2); - + /* Get the previous sent packet, if any */ maxseg = ctf_fixed_maxseg(tp); counter_u64_add(rack_enter_tlp_calc, 1); @@ -2048,7 +2048,7 @@ rack_calc_thresh_tlp(struct tcpcb *tp, struct tcp_rack *rack, */ uint32_t inter_gap = 0; int idx, nidx; - + counter_u64_add(rack_used_tlpmethod, 1); idx = rsm->r_rtr_cnt - 1; nidx = prsm->r_rtr_cnt - 1; @@ -2062,7 +2062,7 @@ rack_calc_thresh_tlp(struct tcpcb *tp, struct tcp_rack *rack, * Possibly compensate for delayed-ack. */ uint32_t alt_thresh; - + counter_u64_add(rack_used_tlpmethod2, 1); alt_thresh = srtt + (srtt / 2) + rack_delayed_ack_time; if (alt_thresh > thresh) @@ -2188,7 +2188,7 @@ rack_timer_start(struct tcpcb *tp, struct tcp_rack *rack, uint32_t cts, int sup_ int32_t idx; int32_t is_tlp_timer = 0; struct rack_sendmap *rsm; - + if (rack->t_timers_stopped) { /* All timers have been stopped none are to run */ return (0); @@ -2208,9 +2208,9 @@ activate_rxt: rsm = TAILQ_FIRST(&rack->r_ctl.rc_tmap); if (rsm) { idx = rsm->r_rtr_cnt - 1; - if (TSTMP_GEQ(rsm->r_tim_lastsent[idx], rack->r_ctl.rc_tlp_rxt_last_time)) + if (TSTMP_GEQ(rsm->r_tim_lastsent[idx], rack->r_ctl.rc_tlp_rxt_last_time)) tstmp_touse = rsm->r_tim_lastsent[idx]; - else + else tstmp_touse = rack->r_ctl.rc_tlp_rxt_last_time; if (TSTMP_GT(tstmp_touse, cts)) time_since_sent = cts - tstmp_touse; @@ -2259,7 +2259,7 @@ activate_rxt: if ((rack->use_rack_cheat == 0) && (IN_RECOVERY(tp->t_flags)) && (rack->r_ctl.rc_prr_sndcnt < ctf_fixed_maxseg(tp))) { - /* + /* * We are not cheating, in recovery and * not enough ack's to yet get our next * retransmission out. @@ -2304,9 +2304,9 @@ activate_tlp: } idx = rsm->r_rtr_cnt - 1; time_since_sent = 0; - if (TSTMP_GEQ(rsm->r_tim_lastsent[idx], rack->r_ctl.rc_tlp_rxt_last_time)) + if (TSTMP_GEQ(rsm->r_tim_lastsent[idx], rack->r_ctl.rc_tlp_rxt_last_time)) tstmp_touse = rsm->r_tim_lastsent[idx]; - else + else tstmp_touse = rack->r_ctl.rc_tlp_rxt_last_time; if (TSTMP_GT(tstmp_touse, cts)) time_since_sent = cts - tstmp_touse; @@ -2381,7 +2381,7 @@ rack_exit_persist(struct tcpcb *tp, struct tcp_rack *rack) } static void -rack_start_hpts_timer(struct tcp_rack *rack, struct tcpcb *tp, uint32_t cts, +rack_start_hpts_timer(struct tcp_rack *rack, struct tcpcb *tp, uint32_t cts, int32_t slot, uint32_t tot_len_this_send, int sup_rack) { struct inpcb *inp; @@ -2407,12 +2407,12 @@ rack_start_hpts_timer(struct tcp_rack *rack, struct tcpcb *tp, uint32_t cts, rack->r_ctl.rc_timer_exp = 0; if (rack->rc_inp->inp_in_hpts == 0) { rack->r_ctl.rc_hpts_flags = 0; - } + } if (slot) { /* We are hptsi too */ rack->r_ctl.rc_hpts_flags |= PACE_PKT_OUTPUT; } else if (rack->r_ctl.rc_hpts_flags & PACE_PKT_OUTPUT) { - /* + /* * We are still left on the hpts when the to goes * it will be for output. */ @@ -2428,9 +2428,9 @@ rack_start_hpts_timer(struct tcp_rack *rack, struct tcpcb *tp, uint32_t cts, /* * We have a potential attacker on * the line. We have possibly some - * (or now) pacing time set. We want to + * (or now) pacing time set. We want to * slow down the processing of sacks by some - * amount (if it is an attacker). Set the default + * amount (if it is an attacker). Set the default * slot for attackers in place (unless the orginal * interval is longer). Its stored in * micro-seconds, so lets convert to msecs. @@ -2445,7 +2445,7 @@ rack_start_hpts_timer(struct tcp_rack *rack, struct tcpcb *tp, uint32_t cts, if (delayed_ack && ((hpts_timeout == 0) || (delayed_ack < hpts_timeout))) hpts_timeout = delayed_ack; - else + else rack->r_ctl.rc_hpts_flags &= ~PACE_TMR_DELACK; /* * If no timers are going to run and we will fall off the hptsi @@ -2495,9 +2495,9 @@ rack_start_hpts_timer(struct tcp_rack *rack, struct tcpcb *tp, uint32_t cts, } if (slot) { rack->rc_inp->inp_flags2 |= INP_MBUF_QUEUE_READY; - if (rack->r_ctl.rc_hpts_flags & PACE_TMR_RACK) + if (rack->r_ctl.rc_hpts_flags & PACE_TMR_RACK) inp->inp_flags2 |= INP_DONT_SACK_QUEUE; - else + else inp->inp_flags2 &= ~INP_DONT_SACK_QUEUE; rack->r_ctl.rc_last_output_to = cts + slot; if ((hpts_timeout == 0) || (hpts_timeout > slot)) { @@ -2637,7 +2637,7 @@ rack_merge_rsm(struct tcp_rack *rack, struct rack_sendmap *l_rsm, struct rack_sendmap *r_rsm) { - /* + /* * We are merging two ack'd RSM's, * the l_rsm is on the left (lower seq * values) and the r_rsm is on the right @@ -2648,7 +2648,7 @@ rack_merge_rsm(struct tcp_rack *rack, * the oldest (or last oldest retransmitted). */ struct rack_sendmap *rm; - + l_rsm->r_end = r_rsm->r_end; if (l_rsm->r_dupack < r_rsm->r_dupack) l_rsm->r_dupack = r_rsm->r_dupack; @@ -2797,8 +2797,8 @@ need_retran: goto out; } } else { - /* - * We must find the last segment + /* + * We must find the last segment * that was acceptable by the client. */ RB_FOREACH_REVERSE(rsm, rack_rb_tree_head, &rack->r_ctl.rc_mtree) { @@ -3846,7 +3846,7 @@ tcp_rack_xmit_timer_commit(struct tcp_rack *rack, struct tcpcb *tp) } else { #ifdef INVARIANTS panic("Unknown rtt variant %d", rack->r_ctl.rc_rate_sample_method); -#endif +#endif return; } if (rtt == 0) @@ -4025,7 +4025,7 @@ rack_update_rtt(struct tcpcb *tp, struct tcp_rack *rack, */ rack->r_ctl.rc_prr_sndcnt = ctf_fixed_maxseg(tp); rack_log_to_prr(rack, 7); - } + } } if (SEQ_LT(rack->r_ctl.rc_rack_tmit_time, rsm->r_tim_lastsent[(rsm->r_rtr_cnt - 1)])) { /* New more recent rack_tmit_time */ @@ -4034,8 +4034,8 @@ rack_update_rtt(struct tcpcb *tp, struct tcp_rack *rack, } return (1); } - /* - * We clear the soft/rxtshift since we got an ack. + /* + * We clear the soft/rxtshift since we got an ack. * There is no assurance we will call the commit() function * so we need to clear these to avoid incorrect handling. */ @@ -4071,7 +4071,7 @@ rack_update_rtt(struct tcpcb *tp, struct tcp_rack *rack, * tcp_rack_xmit_timer() are being commented * out for now. They give us no more accuracy * and often lead to a wrong choice. We have - * enough samples that have not been + * enough samples that have not been * retransmitted. I leave the commented out * code in here in case in the future we * decide to add it back (though I can't forsee @@ -4150,15 +4150,15 @@ rack_log_sack_passed(struct tcpcb *tp, continue; } if (nrsm->r_flags & RACK_ACKED) { - /* - * Skip ack'd segments, though we + /* + * Skip ack'd segments, though we * should not see these, since tmap * should not have ack'd segments. */ continue; - } + } if (nrsm->r_flags & RACK_SACK_PASSED) { - /* + /* * We found one that is already marked * passed, we have been here before and * so all others below this are marked. @@ -4189,7 +4189,7 @@ do_rest_ofb: (SEQ_LT(end, rsm->r_start)) || (SEQ_GEQ(start, rsm->r_end)) || (SEQ_LT(start, rsm->r_start))) { - /* + /* * We are not in the right spot, * find the correct spot in the tree. */ @@ -4217,7 +4217,7 @@ do_rest_ofb: * nrsm |----------| * * But before we start down that path lets - * see if the sack spans over on top of + * see if the sack spans over on top of * the next guy and it is already sacked. */ next = RB_NEXT(rack_rb_tree_head, &rack->r_ctl.rc_mtree, rsm); @@ -4258,7 +4258,7 @@ do_rest_ofb: counter_u64_add(rack_reorder_seen, 1); rack->r_ctl.rc_reorder_ts = cts; } - /* + /* * Now we want to go up from rsm (the * one left un-acked) to the next one * in the tmap. We do this so when @@ -4342,12 +4342,12 @@ do_rest_ofb: goto out; } else if (SEQ_LT(end, rsm->r_end)) { /* A partial sack to a already sacked block */ - moved++; + moved++; rsm = RB_NEXT(rack_rb_tree_head, &rack->r_ctl.rc_mtree, rsm); goto out; } else { - /* - * The end goes beyond this guy + /* + * The end goes beyond this guy * repostion the start to the * next block. */ @@ -4395,8 +4395,8 @@ do_rest_ofb: /* This block only - done, setup for next */ goto out; } - /* - * There is more not coverend by this rsm move on + /* + * There is more not coverend by this rsm move on * to the next block in the RB tree. */ nrsm = RB_NEXT(rack_rb_tree_head, &rack->r_ctl.rc_mtree, rsm); @@ -4433,14 +4433,14 @@ do_rest_ofb: memcpy(nrsm, rsm, sizeof(struct rack_sendmap)); prev->r_end = end; rsm->r_start = end; - /* Now adjust nrsm (stack copy) to be + /* Now adjust nrsm (stack copy) to be * the one that is the small * piece that was "sacked". */ nrsm->r_end = end; rsm->r_dupack = 0; rack_log_retran_reason(rack, rsm, __LINE__, 0, 2); - /* + /* * Now nrsm is our new little piece * that is acked (which was merged * to prev). Update the rtt and changed @@ -4467,7 +4467,7 @@ do_rest_ofb: goto out; } /** - * In this case nrsm becomes + * In this case nrsm becomes * nrsm->r_start = end; * nrsm->r_end = rsm->r_end; * which is un-acked. @@ -4529,8 +4529,8 @@ do_rest_ofb: } out: if (rsm && (rsm->r_flags & RACK_ACKED)) { - /* - * Now can we merge where we worked + /* + * Now can we merge where we worked * with either the previous or * next block? */ @@ -4560,7 +4560,7 @@ out: counter_u64_add(rack_sack_proc_short, 1); } /* Save off the next one for quick reference. */ - if (rsm) + if (rsm) nrsm = RB_NEXT(rack_rb_tree_head, &rack->r_ctl.rc_mtree, rsm); else nrsm = NULL; @@ -4570,7 +4570,7 @@ out: return (changed); } -static void inline +static void inline rack_peer_reneges(struct tcp_rack *rack, struct rack_sendmap *rsm, tcp_seq th_ack) { struct rack_sendmap *tmap; @@ -4597,8 +4597,8 @@ rack_peer_reneges(struct tcp_rack *rack, struct rack_sendmap *rsm, tcp_seq th_ac tmap->r_in_tmap = 1; rsm = RB_NEXT(rack_rb_tree_head, &rack->r_ctl.rc_mtree, rsm); } - /* - * Now lets possibly clear the sack filter so we start + /* + * Now lets possibly clear the sack filter so we start * recognizing sacks that cover this area. */ if (rack_use_sack_filter) @@ -4623,14 +4623,14 @@ rack_do_decay(struct tcp_rack *rack) } while (0) timersub(&rack->r_ctl.rc_last_ack, &rack->r_ctl.rc_last_time_decay, &res); -#undef timersub +#undef timersub rack->r_ctl.input_pkt++; if ((rack->rc_in_persist) || (res.tv_sec >= 1) || (rack->rc_tp->snd_max == rack->rc_tp->snd_una)) { - /* - * Check for decay of non-SAD, + /* + * Check for decay of non-SAD, * we want all SAD detection metrics to * decay 1/4 per second (or more) passed. */ @@ -4644,8 +4644,8 @@ rack_do_decay(struct tcp_rack *rack) if (rack->rc_in_persist || (rack->rc_tp->snd_max == rack->rc_tp->snd_una) || (pkt_delta < tcp_sad_low_pps)){ - /* - * We don't decay idle connections + /* + * We don't decay idle connections * or ones that have a low input pps. */ return; @@ -4660,7 +4660,7 @@ rack_do_decay(struct tcp_rack *rack) rack->r_ctl.sack_noextra_move = ctf_decay_count(rack->r_ctl.sack_noextra_move, tcp_sad_decay_val); } -#endif +#endif } static void @@ -4674,7 +4674,7 @@ rack_log_ack(struct tcpcb *tp, struct tcpopt *to, struct tcphdr *th) int32_t i, j, k, num_sack_blks = 0; uint32_t cts, acked, ack_point, sack_changed = 0; int loop_start = 0, moved_two = 0; - + INP_WLOCK_ASSERT(tp->t_inpcb); if (th->th_flags & TH_RST) { /* We don't log resets */ @@ -4688,7 +4688,7 @@ rack_log_ack(struct tcpcb *tp, struct tcpopt *to, struct tcphdr *th) if (rack->sack_attack_disable == 0) rack_do_decay(rack); if (BYTES_THIS_ACK(tp, th) >= ctf_fixed_maxseg(rack->rc_tp)) { - /* + /* * You only get credit for * MSS and greater (and you get extra * credit for larger cum-ack moves). @@ -4700,8 +4700,8 @@ rack_log_ack(struct tcpcb *tp, struct tcpopt *to, struct tcphdr *th) counter_u64_add(rack_ack_total, ac); } if (rack->r_ctl.ack_count > 0xfff00000) { - /* - * reduce the number to keep us under + /* + * reduce the number to keep us under * a uint32_t. */ rack->r_ctl.ack_count /= 2; @@ -4818,14 +4818,14 @@ rack_log_ack(struct tcpcb *tp, struct tcpopt *to, struct tcphdr *th) */ rack->r_ctl.rc_sacked -= (th_ack - rsm->r_start); } - /* + /* * Clear the dup ack count for * the piece that remains. */ rsm->r_dupack = 0; rack_log_retran_reason(rack, rsm, __LINE__, 0, 2); if (rsm->r_rtr_bytes) { - /* + /* * It was retransmitted adjust the * sack holes for what was acked. */ @@ -4850,7 +4850,7 @@ proc_sack: * that it had previously acked. The only * way that can be true if the peer threw * away data (space issues) that it had - * previously sacked (else it would have + * previously sacked (else it would have * given us snd_una up to (rsm->r_end). * We need to undo the acked markings here. * @@ -4959,8 +4959,8 @@ again: } } do_sack_work: - /* - * First lets look to see if + /* + * First lets look to see if * we have retransmitted and * can use the transmit next? */ @@ -4993,8 +4993,8 @@ do_sack_work: counter_u64_add(rack_ack_total, (acked / ctf_fixed_maxseg(rack->rc_tp))); counter_u64_add(rack_express_sack, 1); if (rack->r_ctl.ack_count > 0xfff00000) { - /* - * reduce the number to keep us under + /* + * reduce the number to keep us under * a uint32_t. */ rack->r_ctl.ack_count /= 2; @@ -5013,8 +5013,8 @@ do_sack_work: /* Its a sack of some sort */ rack->r_ctl.sack_count++; if (rack->r_ctl.sack_count > 0xfff00000) { - /* - * reduce the number to keep us under + /* + * reduce the number to keep us under * a uint32_t. */ rack->r_ctl.ack_count /= 2; @@ -5088,8 +5088,8 @@ do_sack_work: } out_with_totals: if (num_sack_blks > 1) { - /* - * You get an extra stroke if + /* + * You get an extra stroke if * you have more than one sack-blk, this * could be where we are skipping forward * and the sack-filter is still working, or @@ -5105,7 +5105,7 @@ out: tcp_sack_to_ack_thresh && tcp_sack_to_move_thresh && ((rack->r_ctl.rc_num_maps_alloced > tcp_map_minimum) || rack->sack_attack_disable)) { - /* + /* * We have thresholds set to find * possible attackers and disable sack. * Check them. @@ -5138,7 +5138,7 @@ out: if ((rack->sack_attack_disable == 0) && (moveratio > rack_highest_move_thresh_seen)) rack_highest_move_thresh_seen = (uint32_t)moveratio; - if (rack->sack_attack_disable == 0) { + if (rack->sack_attack_disable == 0) { if ((ackratio > tcp_sack_to_ack_thresh) && (moveratio > tcp_sack_to_move_thresh)) { /* Disable sack processing */ @@ -5148,7 +5148,7 @@ out: counter_u64_add(rack_sack_attacks_detected, 1); } if (tcp_attack_on_turns_on_logging) { - /* + /* * Turn on logging, used for debugging * false positives. */ @@ -5171,7 +5171,7 @@ out: rack->r_ctl.sack_noextra_move = 1; rack->r_ctl.ack_count = max(1, (BYTES_THIS_ACK(tp, th)/ctf_fixed_maxseg(rack->rc_tp))); - + if (rack->r_rep_reverse == 0) { rack->r_rep_reverse = 1; counter_u64_add(rack_sack_attacks_reversed, 1); @@ -5451,7 +5451,7 @@ rack_process_ack(struct mbuf *m, struct tcphdr *th, struct socket *so, if ((tp->t_state >= TCPS_FIN_WAIT_1) && (sbavail(&so->so_snd) == 0) && (tp->t_flags2 & TF2_DROP_AF_DATA)) { - /* + /* * The socket was gone and the * peer sent data, time to * reset him. @@ -5472,7 +5472,7 @@ rack_collapsed_window(struct tcp_rack *rack) { /* * Now we must walk the - * send map and divide the + * send map and divide the * ones left stranded. These * guys can't cause us to abort * the connection and are really @@ -5483,7 +5483,7 @@ rack_collapsed_window(struct tcp_rack *rack) * the win and acked that data. We would * get into an ack war, the simplier * method then of just pretending we - * did not send those segments something + * did not send those segments something * won't work. */ struct rack_sendmap *rsm, *nrsm, fe, *insret; @@ -5501,7 +5501,7 @@ rack_collapsed_window(struct tcp_rack *rack) rack->rc_has_collapsed = 0; return; } - /* + /* * Now do we need to split at * the collapse point? */ @@ -5525,8 +5525,8 @@ rack_collapsed_window(struct tcp_rack *rack) TAILQ_INSERT_AFTER(&rack->r_ctl.rc_tmap, rsm, nrsm, r_tnext); nrsm->r_in_tmap = 1; } - /* - * Set in the new RSM as the + /* + * Set in the new RSM as the * collapsed starting point */ rsm = nrsm; @@ -6089,7 +6089,7 @@ rack_fastack(struct mbuf *m, struct tcphdr *th, struct socket *so, * We made progress, clear the tlp * out flag so we could start a TLP * again. - */ + */ rack->r_ctl.rc_tlp_rtx_out = 0; /* Did the window get updated? */ if (tiwin != tp->snd_wnd) { @@ -6263,7 +6263,7 @@ rack_do_syn_sent(struct mbuf *m, struct tcphdr *th, struct socket *so, rack = (struct tcp_rack *)tp->t_fb_ptr; if (thflags & TH_ACK) { int tfo_partial = 0; - + TCPSTAT_INC(tcps_connects); soisconnected(so); #ifdef MAC @@ -6304,12 +6304,12 @@ rack_do_syn_sent(struct mbuf *m, struct tcphdr *th, struct socket *so, TCPSTAT_INC(tcps_ecn_shs); } if (SEQ_GT(th->th_ack, tp->snd_una)) { - /* - * We advance snd_una for the + /* + * We advance snd_una for the * fast open case. If th_ack is - * acknowledging data beyond + * acknowledging data beyond * snd_una we can't just call - * ack-processing since the + * ack-processing since the * data stream in our send-map * will start at snd_una + 1 (one * beyond the SYN). If its just @@ -6377,7 +6377,7 @@ rack_do_syn_sent(struct mbuf *m, struct tcphdr *th, struct socket *so, tp->t_rttlow = t; tcp_rack_xmit_timer(rack, t + 1); tcp_rack_xmit_timer_commit(rack, tp); - } + } if (rack_process_ack(m, th, so, tp, to, tiwin, tlen, &ourfinisacked, thflags, &ret_val)) return (ret_val); /* We may have changed to FIN_WAIT_1 above */ @@ -6538,7 +6538,7 @@ rack_do_syn_recv(struct mbuf *m, struct tcphdr *th, struct socket *so, /* * Account for the ACK of our SYN prior to * regular ACK processing below. - */ + */ tp->snd_una++; } if (tp->t_flags & TF_NEEDFIN) { @@ -6574,7 +6574,7 @@ rack_do_syn_recv(struct mbuf *m, struct tcphdr *th, struct socket *so, tp->t_rttlow = t; tcp_rack_xmit_timer(rack, t + 1); tcp_rack_xmit_timer_commit(rack, tp); - } + } if (rack_process_ack(m, th, so, tp, to, tiwin, tlen, &ourfinisacked, thflags, &ret_val)) { return (ret_val); } @@ -6833,7 +6833,7 @@ rack_do_close_wait(struct mbuf *m, struct tcphdr *th, struct socket *so, } static int -rack_check_data_after_close(struct mbuf *m, +rack_check_data_after_close(struct mbuf *m, struct tcpcb *tp, int32_t *tlen, struct tcphdr *th, struct socket *so) { struct tcp_rack *rack; @@ -7314,7 +7314,7 @@ rack_set_pace_segments(struct tcpcb *tp, struct tcp_rack *rack) if (rack->rc_inp->inp_socket->so_snd.sb_flags & SB_TLS_IFNET) { tls_seg = ctf_get_opt_tls_size(rack->rc_inp->inp_socket, rack->rc_tp->snd_wnd); rack->r_ctl.rc_pace_min_segs = tls_seg; - } else + } else #endif rack->r_ctl.rc_pace_min_segs = ctf_fixed_maxseg(tp); rack->r_ctl.rc_pace_max_segs = ctf_fixed_maxseg(tp) * rack->rc_pace_max_segs; @@ -7557,7 +7557,7 @@ rack_timer_audit(struct tcpcb *tp, struct tcp_rack *rack, struct sockbuf *sb) */ struct rack_sendmap *rsm; int tmr_up; - + tmr_up = rack->r_ctl.rc_hpts_flags & PACE_TMR_MASK; if (rack->rc_in_persist && (tmr_up == PACE_TMR_PERSIT)) return; @@ -7574,7 +7574,7 @@ rack_timer_audit(struct tcpcb *tp, struct tcp_rack *rack, struct sockbuf *sb) /* We are supposed to have delayed ack up and we do */ return; } else if (sbavail(&tp->t_inpcb->inp_socket->so_snd) && (tmr_up == PACE_TMR_RXT)) { - /* + /* * if we hit enobufs then we would expect the possiblity * of nothing outstanding and the RXT up (and the hptsi timer). */ @@ -7592,7 +7592,7 @@ rack_timer_audit(struct tcpcb *tp, struct tcp_rack *rack, struct sockbuf *sb) ((tmr_up == PACE_TMR_TLP) || (tmr_up == PACE_TMR_RACK) || (tmr_up == PACE_TMR_RXT))) { - /* + /* * Either a Rack, TLP or RXT is fine if we * have outstanding data. */ @@ -7607,7 +7607,7 @@ rack_timer_audit(struct tcpcb *tp, struct tcp_rack *rack, struct sockbuf *sb) */ return; } - /* + /* * Ok the timer originally started is not what we want now. * We will force the hpts to be stopped if any, and restart * with the slot set to what was in the saved slot. @@ -8011,7 +8011,7 @@ rack_get_pacing_delay(struct tcp_rack *rack, struct tcpcb *tp, uint32_t len) * the peer to have a gap in data sending. */ uint32_t srtt, cwnd, tr_perms = 0; - + old_method: if (rack->r_ctl.rc_rack_min_rtt) srtt = rack->r_ctl.rc_rack_min_rtt; @@ -8038,7 +8038,7 @@ old_method: /* Now do we reduce the time so we don't run dry? */ if (slot && rack->rc_pace_reduce) { int32_t reduce; - + reduce = (slot / rack->rc_pace_reduce); if (reduce < slot) { slot -= reduce; @@ -8057,19 +8057,19 @@ old_method: bw_est += rack->r_ctl.rc_gp_history[cnt]; } if (bw_est == 0) { - /* - * No way yet to make a b/w estimate + /* + * No way yet to make a b/w estimate * (no goodput est yet). */ goto old_method; } /* Covert to bytes per second */ bw_est *= MSEC_IN_SECOND; - /* + /* * Now ratchet it up by our percentage. Note * that the minimum you can do is 1 which would * get you 101% of the average last N goodput estimates. - * The max you can do is 256 which would yeild you + * The max you can do is 256 which would yeild you * 356% of the last N goodput estimates. */ bw_raise = bw_est * (uint64_t)rack->rack_per_of_gp; @@ -8086,7 +8086,7 @@ old_method: /* We are enforcing a minimum pace time of 1ms */ slot = rack->r_enforce_min_pace; } - if (slot) + if (slot) counter_u64_add(rack_calc_nonzero, 1); else counter_u64_add(rack_calc_zero, 1); @@ -8288,8 +8288,8 @@ again: long tlen; doing_tlp = 1; - /* - * Check if we can do a TLP with a RACK'd packet + /* + * Check if we can do a TLP with a RACK'd packet * this can happen if we are not doing the rack * cheat and we skipped to a TLP and it * went off. @@ -8362,7 +8362,7 @@ again: (rack->r_ctl.rc_prr_sndcnt < maxseg)) { /* * prr is less than a segment, we - * have more acks due in besides + * have more acks due in besides * what we need to resend. Lets not send * to avoid sending small pieces of * what we need to retransmit. @@ -8385,8 +8385,8 @@ again: counter_u64_add(rack_rtm_prr_retran, 1); } } - /* - * Enforce a connection sendmap count limit if set + /* + * Enforce a connection sendmap count limit if set * as long as we are not retransmiting. */ if ((rsm == NULL) && @@ -8660,7 +8660,7 @@ again: } else if ((rsm == NULL) && ((doing_tlp == 0) || (new_data_tlp == 1)) && (len < rack->r_ctl.rc_pace_max_segs)) { - /* + /* * We are not sending a full segment for * some reason. Should we not send anything (think * sws or persists)? @@ -8677,7 +8677,7 @@ again: */ len = 0; if (tp->snd_max == tp->snd_una) { - /* + /* * Nothing out we can * go into persists. */ @@ -8695,7 +8695,7 @@ again: * not having gone off), We have 2 segments or * more already in flight, its not the tail end * of the socket buffer and the cwnd is blocking - * us from sending out a minimum pacing segment size. + * us from sending out a minimum pacing segment size. * Lets not send anything. */ len = 0; @@ -8704,10 +8704,10 @@ again: (ctf_flight_size(tp, rack->r_ctl.rc_sacked) > (2 * maxseg)) && (len < (int)(sbavail(sb) - sb_offset)) && (TCPS_HAVEESTABLISHED(tp->t_state))) { - /* + /* * Here we have a send window but we have * filled it up and we can't send another pacing segment. - * We also have in flight more than 2 segments + * We also have in flight more than 2 segments * and we are not completing the sb i.e. we allow * the last bytes of the sb to go out even if * its not a full pacing segment. @@ -8817,7 +8817,7 @@ again: */ if (!(tp->t_flags & TF_MORETOCOME) && /* normal case */ (idle || (tp->t_flags & TF_NODELAY)) && - ((uint32_t)len + (uint32_t)sb_offset >= sbavail(&so->so_snd)) && + ((uint32_t)len + (uint32_t)sb_offset >= sbavail(&so->so_snd)) && (tp->t_flags & TF_NOPUSH) == 0) { pass = 2; goto send; @@ -8964,7 +8964,7 @@ just_return_nolock: send: if ((flags & TH_FIN) && sbavail(&tp->t_inpcb->inp_socket->so_snd)) { - /* + /* * We do not transmit a FIN * with data outstanding. We * need to make it so all data @@ -9170,7 +9170,7 @@ send: len -= moff; sendalot = 1; } - } + } /* * In case there are too many small fragments don't * use TSO: @@ -9294,14 +9294,14 @@ send: tp, #endif mb, moff, &len, - if_hw_tsomaxsegcount, if_hw_tsomaxsegsize, msb, + if_hw_tsomaxsegcount, if_hw_tsomaxsegsize, msb, ((rsm == NULL) ? hw_tls : 0) #ifdef NETFLIX_COPY_ARGS , &filled_all #endif ); if (len <= (tp->t_maxseg - optlen)) { - /* + /* * Must have ran out of mbufs for the copy * shorten it to no longer need tso. Lets * not put on sendalot since we are low on @@ -10058,13 +10058,13 @@ enobufs: rack->r_tlp_running = 0; if (flags & TH_RST) { /* - * We don't send again after sending a RST. + * We don't send again after sending a RST. */ slot = 0; sendalot = 0; } if (rsm && (slot == 0)) { - /* + /* * Dup ack retransmission possibly, so * lets assure we have at least min rack * time, if its a rack resend then the rack @@ -10282,7 +10282,7 @@ rack_set_sockopt(struct socket *so, struct sockopt *sopt, break; case TCP_RACK_GP_INCREASE: if ((optval >= 0) && - (optval <= 256)) + (optval <= 256)) rack->rack_per_of_gp = optval; else error = EINVAL; diff --git a/sys/netinet/tcp_stacks/rack_bbr_common.c b/sys/netinet/tcp_stacks/rack_bbr_common.c index 37945a7709b..421812ba969 100644 --- a/sys/netinet/tcp_stacks/rack_bbr_common.c +++ b/sys/netinet/tcp_stacks/rack_bbr_common.c @@ -173,7 +173,7 @@ again: * - INP_SUPPORTS_MBUFQ * - INP_MBUF_QUEUE_READY * - INP_DONT_SACK_QUEUE - * + * * These flags help control how LRO will deliver * packets to the transport. You first set in inp_flags2 * the INP_SUPPORTS_MBUFQ to tell the LRO code that you @@ -191,9 +191,9 @@ again: * * Now there are some interesting Caveats that the transport * designer needs to take into account when using this feature. - * + * * 1) It is used with HPTS and pacing, when the pacing timer - * for output calls it will first call the input. + * for output calls it will first call the input. * 2) When you set INP_MBUF_QUEUE_READY this tells LRO * queue normal packets, I am busy pacing out data and * will process the queued packets before my tfb_tcp_output @@ -207,7 +207,7 @@ again: * the loss. * * Now a critical thing you must be aware of here is that the - * use of the flags has a far greater scope then just your + * use of the flags has a far greater scope then just your * typical LRO. Why? Well thats because in the normal compressed * LRO case at the end of a driver interupt all packets are going * to get presented to the transport no matter if there is one @@ -216,9 +216,9 @@ again: * a) The flags discussed above allow it. * * b) You exceed a ack or data limit (by default the - * ack limit is infinity (64k acks) and the data + * ack limit is infinity (64k acks) and the data * limit is 64k of new TCP data) - * + * * c) The push bit has been set by the peer */ @@ -239,7 +239,7 @@ ctf_process_inbound_raw(struct tcpcb *tp, struct socket *so, struct mbuf *m, int * after adjusting the time to match the arrival time. * Note that the LRO code assures no IP options are present. * - * The symantics for calling tfb_tcp_hpts_do_segment are the + * The symantics for calling tfb_tcp_hpts_do_segment are the * following: * 1) It returns 0 if all went well and you (the caller) need * to release the lock. @@ -274,7 +274,7 @@ ctf_process_inbound_raw(struct tcpcb *tp, struct socket *so, struct mbuf *m, int if (ifp) { bpf_req = bpf_peers_present(ifp->if_bpf); } else { - /* + /* * We probably should not work around * but kassert, since lro alwasy sets rcvif. */ @@ -406,7 +406,7 @@ skip_vnet: } tlen -= off; drop_hdrlen += off; - /* + /* * Now lets setup the timeval to be when we should * have been called (if we can). */ @@ -470,7 +470,7 @@ ctf_outstanding(struct tcpcb *tp) return(tp->snd_max - tp->snd_una); } -uint32_t +uint32_t ctf_flight_size(struct tcpcb *tp, uint32_t rc_sacked) { if (rc_sacked <= ctf_outstanding(tp)) @@ -480,7 +480,7 @@ ctf_flight_size(struct tcpcb *tp, uint32_t rc_sacked) #ifdef INVARIANTS panic("tp:%p rc_sacked:%d > out:%d", tp, rc_sacked, ctf_outstanding(tp)); -#endif +#endif return (0); } } @@ -821,7 +821,7 @@ ctf_fixed_maxseg(struct tcpcb *tp) * without a proper loop, and having most of paddings hardcoded. * We only consider fixed options that we would send every * time I.e. SACK is not considered. - * + * */ #define PAD(len) ((((len) / 4) + !!((len) % 4)) * 4) if (TCPS_HAVEESTABLISHED(tp->t_state)) { @@ -886,12 +886,12 @@ ctf_log_sack_filter(struct tcpcb *tp, int num_sack_blks, struct sackblk *sack_bl } } -uint32_t +uint32_t ctf_decay_count(uint32_t count, uint32_t decay) { /* * Given a count, decay it by a set percentage. The - * percentage is in thousands i.e. 100% = 1000, + * percentage is in thousands i.e. 100% = 1000, * 19.3% = 193. */ uint64_t perc_count, decay_per; @@ -904,8 +904,8 @@ ctf_decay_count(uint32_t count, uint32_t decay) decay_per = decay; perc_count *= decay_per; perc_count /= 1000; - /* - * So now perc_count holds the + /* + * So now perc_count holds the * count decay value. */ decayed_count = count - (uint32_t)perc_count; diff --git a/sys/netinet/tcp_stacks/rack_bbr_common.h b/sys/netinet/tcp_stacks/rack_bbr_common.h index 1bcff320d39..8f866ed731f 100644 --- a/sys/netinet/tcp_stacks/rack_bbr_common.h +++ b/sys/netinet/tcp_stacks/rack_bbr_common.h @@ -129,13 +129,13 @@ void ctf_do_dropwithreset_conn(struct mbuf *m, struct tcpcb *tp, struct tcphdr *th, int32_t rstreason, int32_t tlen); -uint32_t +uint32_t ctf_fixed_maxseg(struct tcpcb *tp); void ctf_log_sack_filter(struct tcpcb *tp, int num_sack_blks, struct sackblk *sack_blocks); -uint32_t +uint32_t ctf_decay_count(uint32_t count, uint32_t decay_percentage); #endif diff --git a/sys/netinet/tcp_stacks/sack_filter.c b/sys/netinet/tcp_stacks/sack_filter.c index 978f6670c50..96728f36046 100644 --- a/sys/netinet/tcp_stacks/sack_filter.c +++ b/sys/netinet/tcp_stacks/sack_filter.c @@ -61,7 +61,7 @@ __FBSDID("$FreeBSD$"); * cum-ack A * sack D - E * sack B - C - * + * * The previous sack information (B-C) is repeated * in SACK 2. If the receiver gets SACK 1 and then * SACK 2 then any work associated with B-C as already @@ -69,8 +69,8 @@ __FBSDID("$FreeBSD$"); * (as in bbr or rack) cases where we walk a linked list. * * Now the utility trys to keep everything in a single - * cache line. This means that its not perfect and - * it could be that so big of sack's come that a + * cache line. This means that its not perfect and + * it could be that so big of sack's come that a * "remembered" processed sack falls off the list and * so gets re-processed. Thats ok, it just means we * did some extra work. We could of course take more @@ -135,7 +135,7 @@ sack_filter_prune(struct sack_filter *sf, tcp_seq th_ack) sf->sf_ack = th_ack; } -/* +/* * Return true if you find that * the sackblock b is on the score * board. Update it along the way @@ -179,7 +179,7 @@ is_sack_on_board(struct sack_filter *sf, struct sackblk *b) if(SEQ_LT(sf->sf_blks[i].end, b->start)) { /** * Not near each other: - * + * * board |---| * sack |---| */ @@ -189,21 +189,21 @@ is_sack_on_board(struct sack_filter *sf, struct sackblk *b) if (SEQ_GT(sf->sf_blks[i].start, b->end)) { /** * Not near each other: - * + * * board |---| * sack |---| */ goto nxt_blk; } if (SEQ_LEQ(sf->sf_blks[i].start, b->start)) { - /** + /** * The board block partial meets: * * board |--------| - * sack |----------| + * sack |----------| * * board |--------| - * sack |--------------| + * sack |--------------| * * up with this one (we have part of it). * 1) Update the board block to the new end @@ -215,14 +215,14 @@ is_sack_on_board(struct sack_filter *sf, struct sackblk *b) goto nxt_blk; } if (SEQ_GEQ(sf->sf_blks[i].end, b->end)) { - /** + /** * The board block partial meets: * * board |--------| - * sack |----------| + * sack |----------| * * board |----| - * sack |----------| + * sack |----------| * 1) Update the board block to the new start * and * 2) Update the start of this block to my end. @@ -231,7 +231,7 @@ is_sack_on_board(struct sack_filter *sf, struct sackblk *b) sf->sf_blks[i].start = b->start; goto nxt_blk; } - } + } nxt_blk: i++; i %= SACK_FILTER_BLOCKS; @@ -248,7 +248,7 @@ sack_filter_old(struct sack_filter *sf, struct sackblk *in, int numblks) { int32_t num, i; struct sackblk blkboard[TCP_MAX_SACK]; - /* + /* * An old sack has arrived. It may contain data * we do not have. We might not have it since * we could have had a lost ack we might have the @@ -263,8 +263,8 @@ sack_filter_old(struct sack_filter *sf, struct sackblk *in, int numblks) #endif continue; } - /* Did not find it (or found only - * a piece of it). Copy it to + /* Did not find it (or found only + * a piece of it). Copy it to * our outgoing board. */ memcpy(&blkboard[num], &in[i], sizeof(struct sackblk)); @@ -279,8 +279,8 @@ sack_filter_old(struct sack_filter *sf, struct sackblk *in, int numblks) return (num); } -/* - * Given idx its used but there is space available +/* + * Given idx its used but there is space available * move the entry to the next free slot */ static void @@ -291,7 +291,7 @@ sack_move_to_empty(struct sack_filter *sf, uint32_t idx) i = (idx + 1) % SACK_FILTER_BLOCKS; for (cnt=0; cnt <(SACK_FILTER_BLOCKS-1); cnt++) { if (sack_blk_used(sf, i) == 0) { - memcpy(&sf->sf_blks[i], &sf->sf_blks[idx], sizeof(struct sackblk)); + memcpy(&sf->sf_blks[i], &sf->sf_blks[idx], sizeof(struct sackblk)); sf->sf_bits = sack_blk_clr(sf, idx); sf->sf_bits = sack_blk_set(sf, i); return; @@ -306,9 +306,9 @@ sack_filter_new(struct sack_filter *sf, struct sackblk *in, int numblks, tcp_seq { struct sackblk blkboard[TCP_MAX_SACK]; int32_t num, i; - /* - * First lets trim the old and possibly - * throw any away we have. + /* + * First lets trim the old and possibly + * throw any away we have. */ for(i=0, num=0; i=0; i--) { @@ -370,7 +370,7 @@ static int32_t sack_blocks_overlap_or_meet(struct sack_filter *sf, struct sackblk *sb, uint32_t skip) { int32_t i; - + for(i=0; isf_blks[i].end, sb->start) && SEQ_LEQ(sf->sf_blks[i].end, sb->end) && SEQ_LEQ(sf->sf_blks[i].start, sb->start)) { - /** + /** * The two board blocks meet: * * board1 |--------| - * board2 |----------| + * board2 |----------| * * board1 |--------| - * board2 |--------------| + * board2 |--------------| * * board1 |--------| * board2 |--------| @@ -396,14 +396,14 @@ sack_blocks_overlap_or_meet(struct sack_filter *sf, struct sackblk *sb, uint32_t if (SEQ_LEQ(sf->sf_blks[i].start, sb->end) && SEQ_GEQ(sf->sf_blks[i].start, sb->start) && SEQ_GEQ(sf->sf_blks[i].end, sb->end)) { - /** + /** * The board block partial meets: * * board |--------| - * sack |----------| + * sack |----------| * * board |----| - * sack |----------| + * sack |----------| * 1) Update the board block to the new start * and * 2) Update the start of this block to my end. @@ -442,7 +442,7 @@ sack_board_collapse(struct sack_filter *sf) if (sack_blk_used(sf, i) == 0) continue; /* - * Look at all other blocks but this guy + * Look at all other blocks but this guy * to see if they overlap. If so we collapse * the two blocks together. */ @@ -451,7 +451,7 @@ sack_board_collapse(struct sack_filter *sf) /* No overlap */ continue; } - /* + /* * Ok j and i overlap with each other, collapse the * one out furthest away from the current position. */ @@ -500,11 +500,11 @@ sack_filter_blks(struct sack_filter *sf, struct sackblk *in, int numblks, tcp_seq th_ack) { int32_t i, ret; - + if (numblks > TCP_MAX_SACK) { #ifdef _KERNEL panic("sf:%p sb:%p Impossible number of sack blocks %d > 4\n", - sf, in, + sf, in, numblks); #endif return(numblks); @@ -513,13 +513,13 @@ sack_filter_blks(struct sack_filter *sf, struct sackblk *in, int numblks, if ((sf->sf_used > 1) && (no_collapse == 0)) sack_board_collapse(sf); -#else - if (sf->sf_used > 1) +#else + if (sf->sf_used > 1) sack_board_collapse(sf); #endif if ((sf->sf_used == 0) && numblks) { - /* - * We are brand new add the blocks in + /* + * We are brand new add the blocks in * reverse order. Note we can see more * than one in new, since ack's could be lost. */ @@ -560,15 +560,15 @@ sack_filter_blks(struct sack_filter *sf, struct sackblk *in, int numblks, void sack_filter_reject(struct sack_filter *sf, struct sackblk *in) { - /* + /* * Given a specified block (that had made * it past the sack filter). Reject that * block triming it off any sack-filter block * that has it. Usually because the block was * too small and did not cover a whole send. * - * This function will only "undo" sack-blocks - * that are fresh and touch the edges of + * This function will only "undo" sack-blocks + * that are fresh and touch the edges of * blocks in our filter. */ int i; @@ -576,9 +576,9 @@ sack_filter_reject(struct sack_filter *sf, struct sackblk *in) for(i=0; isf_blks[i].end == in->end) { /* The end moves back to start */ diff --git a/sys/netinet/tcp_stacks/tcp_bbr.h b/sys/netinet/tcp_stacks/tcp_bbr.h index 8667355e148..8c03183c425 100644 --- a/sys/netinet/tcp_stacks/tcp_bbr.h +++ b/sys/netinet/tcp_stacks/tcp_bbr.h @@ -42,7 +42,7 @@ #define BBR_HAS_FIN 0x0040 /* segment is sent with fin */ #define BBR_TLP 0x0080 /* segment sent as tail-loss-probe */ #define BBR_HAS_SYN 0x0100 /* segment has the syn */ -#define BBR_MARKED_LOST 0x0200 /* +#define BBR_MARKED_LOST 0x0200 /* * This segments is lost and * totaled into bbr->rc_ctl.rc_lost */ @@ -55,8 +55,8 @@ #define BBR_INCL_TCP_OH 0x03 /* - * With the addition of both measurement algorithms - * I had to move over the size of a + * With the addition of both measurement algorithms + * I had to move over the size of a * cache line (unfortunately). For now there is * no way around this. We may be able to cut back * at some point I hope. @@ -221,8 +221,8 @@ struct bbr_rtt_sample { #define BBR_RT_FLAG_LIMITED 0x20 /* Saw application/cwnd or rwnd limited period */ #define BBR_RT_SEEN_A_ACK 0x40 /* A ack has been saved */ #define BBR_RT_PREV_RTT_SET 0x80 /* There was a RTT set in */ -#define BBR_RT_PREV_SEND_TIME 0x100 /* - *There was a RTT send time set that can be used +#define BBR_RT_PREV_SEND_TIME 0x100 /* + *There was a RTT send time set that can be used * no snd_limits */ #define BBR_RT_SET_GRADIENT 0x200 @@ -570,7 +570,7 @@ struct bbr_control { rc_pace_min_segs:15; /* The minimum single segment size before we enter persists */ uint32_t rc_rtt_shrinks; /* Time of last rtt shrinkage Lock(a) */ - uint32_t r_app_limited_until; + uint32_t r_app_limited_until; uint32_t rc_timer_exp; /* If a timer ticks of expiry */ uint32_t rc_rcv_epoch_start; /* Start time of the Epoch Lock(a) */ @@ -598,7 +598,7 @@ struct bbr_control { uint32_t rc_reorder_ts; /* Last time we saw reordering Lock(a) */ uint32_t rc_init_rwnd; /* Initial rwnd when we transitioned */ /*- --- - * used only initial and close + * used only initial and close */ uint32_t rc_high_rwnd; /* Highest rwnd seen */ uint32_t rc_lowest_rtt; /* Smallest RTT we have seen */ diff --git a/sys/netinet/tcp_stacks/tcp_rack.h b/sys/netinet/tcp_stacks/tcp_rack.h index 9020f362ec0..ac194bb0e58 100644 --- a/sys/netinet/tcp_stacks/tcp_rack.h +++ b/sys/netinet/tcp_stacks/tcp_rack.h @@ -251,7 +251,7 @@ struct rack_control { uint32_t rc_rcvtime; /* When we last received data */ uint32_t rc_num_split_allocs; /* num split map entries allocated */ - uint32_t rc_last_output_to; + uint32_t rc_last_output_to; uint32_t rc_went_idle_time; struct rack_sendmap *rc_sacklast; /* sack remembered place @@ -266,7 +266,7 @@ struct rack_control { /* Cache line split 0x140 */ /* Flags for various things */ uint32_t rc_pace_max_segs; - uint32_t rc_pace_min_segs; + uint32_t rc_pace_min_segs; uint32_t rc_high_rwnd; uint32_t ack_count; uint32_t sack_count; @@ -333,7 +333,7 @@ struct tcp_rack { uint8_t rc_allow_data_af_clo: 1, delayed_ack : 1, set_pacing_done_a_iw : 1, - use_rack_cheat : 1, + use_rack_cheat : 1, alloc_limit_reported : 1, sack_attack_disable : 1, do_detection : 1, From 596ae436ef8fdf767b29cb67a12745b02f61a994 Mon Sep 17 00:00:00 2001 From: Randall Stewart Date: Wed, 12 Feb 2020 13:04:19 +0000 Subject: [PATCH 113/144] This small fix makes it so we properly follow the RFC and only enable ECN when both the CWR and ECT bits our set within the SYN packet. Sponsored by: Netflix Inc. Differential Revision: https://reviews.freebsd.org/D23645 --- sys/netinet/tcp_syncache.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sys/netinet/tcp_syncache.c b/sys/netinet/tcp_syncache.c index 98c90c561d1..e5f7dde531c 100644 --- a/sys/netinet/tcp_syncache.c +++ b/sys/netinet/tcp_syncache.c @@ -1668,7 +1668,8 @@ skip_alloc: sc->sc_peer_mss = to->to_mss; /* peer mss may be zero */ if (ltflags & TF_NOOPT) sc->sc_flags |= SCF_NOOPT; - if ((th->th_flags & (TH_ECE|TH_CWR)) && V_tcp_do_ecn) + if (((th->th_flags & (TH_ECE|TH_CWR)) == (TH_ECE|TH_CWR)) && + V_tcp_do_ecn) sc->sc_flags |= SCF_ECN; if (V_tcp_syncookies) From df341f5986e63970ef51eb9d751681b13e62a12f Mon Sep 17 00:00:00 2001 From: Randall Stewart Date: Wed, 12 Feb 2020 13:07:09 +0000 Subject: [PATCH 114/144] Whitespace, remove from three files trailing white space (leftover presents from emacs). Sponsored by: Netflix Inc. --- sys/netinet/tcp_hpts.c | 120 ++++++++++++++++++------------------ sys/netinet/tcp_hpts.h | 2 +- sys/netinet/tcp_ratelimit.c | 6 +- 3 files changed, 64 insertions(+), 64 deletions(-) diff --git a/sys/netinet/tcp_hpts.c b/sys/netinet/tcp_hpts.c index 96c8ea36eb9..f25e4ba2572 100644 --- a/sys/netinet/tcp_hpts.c +++ b/sys/netinet/tcp_hpts.c @@ -33,7 +33,7 @@ __FBSDID("$FreeBSD$"); * Some notes about usage. * * The tcp_hpts system is designed to provide a high precision timer - * system for tcp. Its main purpose is to provide a mechanism for + * system for tcp. Its main purpose is to provide a mechanism for * pacing packets out onto the wire. It can be used in two ways * by a given TCP stack (and those two methods can be used simultaneously). * @@ -59,22 +59,22 @@ __FBSDID("$FreeBSD$"); * to prevent output processing until the time alotted has gone by. * Of course this is a bare bones example and the stack will probably * have more consideration then just the above. - * + * * Now the second function (actually two functions I guess :D) - * the tcp_hpts system provides is the ability to either abort - * a connection (later) or process input on a connection. + * the tcp_hpts system provides is the ability to either abort + * a connection (later) or process input on a connection. * Why would you want to do this? To keep processor locality * and or not have to worry about untangling any recursive * locks. The input function now is hooked to the new LRO - * system as well. + * system as well. * * In order to use the input redirection function the - * tcp stack must define an input function for + * tcp stack must define an input function for * tfb_do_queued_segments(). This function understands * how to dequeue a array of packets that were input and - * knows how to call the correct processing routine. + * knows how to call the correct processing routine. * - * Locking in this is important as well so most likely the + * Locking in this is important as well so most likely the * stack will need to define the tfb_do_segment_nounlock() * splitting tfb_do_segment() into two parts. The main processing * part that does not unlock the INP and returns a value of 1 or 0. @@ -83,7 +83,7 @@ __FBSDID("$FreeBSD$"); * The remains of tfb_do_segment() then become just a simple call * to the tfb_do_segment_nounlock() function and check the return * code and possibly unlock. - * + * * The stack must also set the flag on the INP that it supports this * feature i.e. INP_SUPPORTS_MBUFQ. The LRO code recoginizes * this flag as well and will queue packets when it is set. @@ -99,11 +99,11 @@ __FBSDID("$FreeBSD$"); * * There is a common functions within the rack_bbr_common code * version i.e. ctf_do_queued_segments(). This function - * knows how to take the input queue of packets from - * tp->t_in_pkts and process them digging out - * all the arguments, calling any bpf tap and + * knows how to take the input queue of packets from + * tp->t_in_pkts and process them digging out + * all the arguments, calling any bpf tap and * calling into tfb_do_segment_nounlock(). The common - * function (ctf_do_queued_segments()) requires that + * function (ctf_do_queued_segments()) requires that * you have defined the tfb_do_segment_nounlock() as * described above. * @@ -113,9 +113,9 @@ __FBSDID("$FreeBSD$"); * a stack wants to drop a connection it calls: * * tcp_set_inp_to_drop(tp, ETIMEDOUT) - * - * To schedule the tcp_hpts system to call - * + * + * To schedule the tcp_hpts system to call + * * tcp_drop(tp, drop_reason) * * at a future point. This is quite handy to prevent locking @@ -284,7 +284,7 @@ sysctl_net_inet_tcp_hpts_max_sleep(SYSCTL_HANDLER_ARGS) error = sysctl_handle_int(oidp, &new, 0, req); if (error == 0 && req->newptr) { if ((new < (NUM_OF_HPTSI_SLOTS / 4)) || - (new > HPTS_MAX_SLEEP_ALLOWED)) + (new > HPTS_MAX_SLEEP_ALLOWED)) error = EINVAL; else hpts_sleep_max = new; @@ -311,7 +311,7 @@ tcp_hpts_log(struct tcp_hpts_entry *hpts, struct tcpcb *tp, struct timeval *tv, int ticks_to_run, int idx) { union tcp_log_stackspecific log; - + memset(&log.u_bbr, 0, sizeof(log.u_bbr)); log.u_bbr.flex1 = hpts->p_nxt_slot; log.u_bbr.flex2 = hpts->p_cur_slot; @@ -616,7 +616,7 @@ tcp_hpts_remove_locked_input(struct tcp_hpts_entry *hpts, struct inpcb *inp, int * Valid values in the flags are * HPTS_REMOVE_OUTPUT - remove from the output of the hpts. * HPTS_REMOVE_INPUT - remove from the input of the hpts. - * Note that you can use one or both values together + * Note that you can use one or both values together * and get two actions. */ void @@ -651,7 +651,7 @@ hpts_tick(uint32_t wheel_tick, uint32_t plus) static inline int tick_to_wheel(uint32_t cts_in_wticks) { - /* + /* * Given a timestamp in wheel ticks (10usec inc's) * map it to our limited space wheel. */ @@ -668,8 +668,8 @@ hpts_ticks_diff(int prev_tick, int tick_now) if (tick_now > prev_tick) return (tick_now - prev_tick); else if (tick_now == prev_tick) - /* - * Special case, same means we can go all of our + /* + * Special case, same means we can go all of our * wheel less one slot. */ return (NUM_OF_HPTSI_SLOTS - 1); @@ -686,7 +686,7 @@ hpts_ticks_diff(int prev_tick, int tick_now) * a uint32_t *, fill it with the tick location. * * Note if you do not give this function the current - * time (that you think it is) mapped to the wheel + * time (that you think it is) mapped to the wheel * then the results will not be what you expect and * could lead to invalid inserts. */ @@ -721,8 +721,8 @@ max_ticks_available(struct tcp_hpts_entry *hpts, uint32_t wheel_tick, uint32_t * end_tick--; if (target_tick) *target_tick = end_tick; - /* - * Now we have close to the full wheel left minus the + /* + * Now we have close to the full wheel left minus the * time it has been since the pacer went to sleep. Note * that wheel_tick, passed in, should be the current time * from the perspective of the caller, mapped to the wheel. @@ -731,18 +731,18 @@ max_ticks_available(struct tcp_hpts_entry *hpts, uint32_t wheel_tick, uint32_t * dis_to_travel = hpts_ticks_diff(hpts->p_prev_slot, wheel_tick); else dis_to_travel = 1; - /* - * dis_to_travel in this case is the space from when the - * pacer stopped (p_prev_slot) and where our wheel_tick - * is now. To know how many slots we can put it in we + /* + * dis_to_travel in this case is the space from when the + * pacer stopped (p_prev_slot) and where our wheel_tick + * is now. To know how many slots we can put it in we * subtract from the wheel size. We would not want * to place something after p_prev_slot or it will * get ran too soon. */ return (NUM_OF_HPTSI_SLOTS - dis_to_travel); } - /* - * So how many slots are open between p_runningtick -> p_cur_slot + /* + * So how many slots are open between p_runningtick -> p_cur_slot * that is what is currently un-available for insertion. Special * case when we are at the last slot, this gets 1, so that * the answer to how many slots are available is all but 1. @@ -751,7 +751,7 @@ max_ticks_available(struct tcp_hpts_entry *hpts, uint32_t wheel_tick, uint32_t * dis_to_travel = 1; else dis_to_travel = hpts_ticks_diff(hpts->p_runningtick, hpts->p_cur_slot); - /* + /* * How long has the pacer been running? */ if (hpts->p_cur_slot != wheel_tick) { @@ -761,19 +761,19 @@ max_ticks_available(struct tcp_hpts_entry *hpts, uint32_t wheel_tick, uint32_t * /* The pacer is right on time, now == pacers start time */ pacer_to_now = 0; } - /* + /* * To get the number left we can insert into we simply * subract the distance the pacer has to run from how * many slots there are. */ avail_on_wheel = NUM_OF_HPTSI_SLOTS - dis_to_travel; - /* - * Now how many of those we will eat due to the pacer's - * time (p_cur_slot) of start being behind the + /* + * Now how many of those we will eat due to the pacer's + * time (p_cur_slot) of start being behind the * real time (wheel_tick)? */ if (avail_on_wheel <= pacer_to_now) { - /* + /* * Wheel wrap, we can't fit on the wheel, that * is unusual the system must be way overloaded! * Insert into the assured tick, and return special @@ -783,7 +783,7 @@ max_ticks_available(struct tcp_hpts_entry *hpts, uint32_t wheel_tick, uint32_t * *target_tick = hpts->p_nxt_slot; return (0); } else { - /* + /* * We know how many slots are open * on the wheel (the reverse of what * is left to run. Take away the time @@ -800,7 +800,7 @@ static int tcp_queue_to_hpts_immediate_locked(struct inpcb *inp, struct tcp_hpts_entry *hpts, int32_t line, int32_t noref) { uint32_t need_wake = 0; - + HPTS_MTX_ASSERT(hpts); if (inp->inp_in_hpts == 0) { /* Ok we need to set it on the hpts in the current slot */ @@ -808,7 +808,7 @@ tcp_queue_to_hpts_immediate_locked(struct inpcb *inp, struct tcp_hpts_entry *hpt if ((hpts->p_hpts_active == 0) || (hpts->p_wheel_complete)) { /* - * A sleeping hpts we want in next slot to run + * A sleeping hpts we want in next slot to run * note that in this state p_prev_slot == p_cur_slot */ inp->inp_hptsslot = hpts_tick(hpts->p_prev_slot, 1); @@ -817,7 +817,7 @@ tcp_queue_to_hpts_immediate_locked(struct inpcb *inp, struct tcp_hpts_entry *hpt } else if ((void *)inp == hpts->p_inp) { /* * The hpts system is running and the caller - * was awoken by the hpts system. + * was awoken by the hpts system. * We can't allow you to go into the same slot we * are in (we don't want a loop :-D). */ @@ -855,7 +855,7 @@ static void check_if_slot_would_be_wrong(struct tcp_hpts_entry *hpts, struct inpcb *inp, uint32_t inp_hptsslot, int line) { /* - * Sanity checks for the pacer with invariants + * Sanity checks for the pacer with invariants * on insert. */ if (inp_hptsslot >= NUM_OF_HPTSI_SLOTS) @@ -863,7 +863,7 @@ check_if_slot_would_be_wrong(struct tcp_hpts_entry *hpts, struct inpcb *inp, uin hpts, inp, inp_hptsslot); if ((hpts->p_hpts_active) && (hpts->p_wheel_complete == 0)) { - /* + /* * If the pacer is processing a arc * of the wheel, we need to make * sure we are not inserting within @@ -929,7 +929,7 @@ tcp_hpts_insert_locked(struct tcp_hpts_entry *hpts, struct inpcb *inp, uint32_t if (maxticks == 0) { /* The pacer is in a wheel wrap behind, yikes! */ if (slot > 1) { - /* + /* * Reduce by 1 to prevent a forever loop in * case something else is wrong. Note this * probably does not hurt because the pacer @@ -1178,7 +1178,7 @@ hpts_cpuid(struct inpcb *inp){ * unknown cpuids to curcpu. Not the best, but apparently better * than defaulting to swi 0. */ - + if (inp->inp_flowtype == M_HASHTYPE_NONE) return (hpts_random_cpu(inp)); /* @@ -1201,7 +1201,7 @@ static void tcp_drop_in_pkts(struct tcpcb *tp) { struct mbuf *m, *n; - + m = tp->t_in_pkt; if (m) n = m->m_nextpkt; @@ -1327,8 +1327,8 @@ out: INP_WLOCK(inp); } } else if (tp->t_in_pkt) { - /* - * We reach here only if we had a + /* + * We reach here only if we had a * stack that supported INP_SUPPORTS_MBUFQ * and then somehow switched to a stack that * does not. The packets are basically stranded @@ -1380,8 +1380,8 @@ tcp_hptsi(struct tcp_hpts_entry *hpts) hpts->p_cur_slot = tick_to_wheel(hpts->p_curtick); if ((hpts->p_on_queue_cnt == 0) || (hpts->p_lasttick == hpts->p_curtick)) { - /* - * No time has yet passed, + /* + * No time has yet passed, * or nothing to do. */ hpts->p_prev_slot = hpts->p_cur_slot; @@ -1394,7 +1394,7 @@ again: ticks_to_run = hpts_ticks_diff(hpts->p_prev_slot, hpts->p_cur_slot); if (((hpts->p_curtick - hpts->p_lasttick) > ticks_to_run) && (hpts->p_on_queue_cnt != 0)) { - /* + /* * Wheel wrap is occuring, basically we * are behind and the distance between * run's has spread so much it has exceeded @@ -1413,7 +1413,7 @@ again: wrap_loop_cnt++; hpts->p_nxt_slot = hpts_tick(hpts->p_prev_slot, 1); hpts->p_runningtick = hpts_tick(hpts->p_prev_slot, 2); - /* + /* * Adjust p_cur_slot to be where we are starting from * hopefully we will catch up (fat chance if something * is broken this bad :( ) @@ -1427,7 +1427,7 @@ again: * put behind) does not really matter in this situation. */ #ifdef INVARIANTS - /* + /* * To prevent a panic we need to update the inpslot to the * new location. This is safe since it takes both the * INP lock and the pacer mutex to change the inp_hptsslot. @@ -1441,7 +1441,7 @@ again: ticks_to_run = NUM_OF_HPTSI_SLOTS - 1; counter_u64_add(wheel_wrap, 1); } else { - /* + /* * Nxt slot is always one after p_runningtick though * its not used usually unless we are doing wheel wrap. */ @@ -1492,12 +1492,12 @@ again: if (inp->inp_hpts_request) { /* * This guy is deferred out further in time - * then our wheel had available on it. + * then our wheel had available on it. * Push him back on the wheel or run it * depending. */ uint32_t maxticks, last_tick, remaining_slots; - + remaining_slots = ticks_to_run - (i + 1); if (inp->inp_hpts_request > remaining_slots) { /* @@ -1521,7 +1521,7 @@ again: /* Fall through we will so do it now */ } /* - * We clear the hpts flag here after dealing with + * We clear the hpts flag here after dealing with * remaining slots. This way anyone looking with the * TCB lock will see its on the hpts until just * before we unlock. @@ -1680,7 +1680,7 @@ no_one: #endif hpts->p_prev_slot = hpts->p_cur_slot; hpts->p_lasttick = hpts->p_curtick; - if (loop_cnt > max_pacer_loops) { + if (loop_cnt > max_pacer_loops) { /* * Something is serious slow we have * looped through processing the wheel @@ -1691,7 +1691,7 @@ no_one: * can never catch up :( * * We will just lie to this thread - * and let it thing p_curtick is + * and let it thing p_curtick is * correct. When it next awakens * it will find itself further behind. */ @@ -1713,7 +1713,7 @@ no_run: * input. */ hpts->p_wheel_complete = 1; - /* + /* * Run any input that may be there not covered * in running data. */ diff --git a/sys/netinet/tcp_hpts.h b/sys/netinet/tcp_hpts.h index 293daa2cae3..8599a439351 100644 --- a/sys/netinet/tcp_hpts.h +++ b/sys/netinet/tcp_hpts.h @@ -102,7 +102,7 @@ struct tcp_hpts_entry { uint32_t p_lasttick; /* Last tick before the current one */ uint8_t p_direct_wake :1, /* boolean */ p_on_min_sleep:1, /* boolean */ - p_avail:6; + p_avail:6; uint8_t p_fill[3]; /* Fill to 32 bits */ /* Cache line 0x40 */ void *p_inp; diff --git a/sys/netinet/tcp_ratelimit.c b/sys/netinet/tcp_ratelimit.c index 5b50dadaf65..28f845221f2 100644 --- a/sys/netinet/tcp_ratelimit.c +++ b/sys/netinet/tcp_ratelimit.c @@ -372,7 +372,7 @@ rt_setup_new_rs(struct ifnet *ifp, int *error) struct if_ratelimit_query_results rl; struct sysctl_oid *rl_sysctl_root; /* - * We expect to enter with the + * We expect to enter with the * mutex locked. */ @@ -392,8 +392,8 @@ rt_setup_new_rs(struct ifnet *ifp, int *error) rl.flags = RT_NOSUPPORT; ifp->if_ratelimit_query(ifp, &rl); if (rl.flags & RT_IS_UNUSABLE) { - /* - * The interface does not really support + /* + * The interface does not really support * the rate-limiting. */ memset(rs, 0, sizeof(struct tcp_rate_set)); From 481be5de9deed47eae529c7e5df890520ebc6837 Mon Sep 17 00:00:00 2001 From: Randall Stewart Date: Wed, 12 Feb 2020 13:31:36 +0000 Subject: [PATCH 115/144] White space cleanup -- remove trailing tab's or spaces from any line. Sponsored by: Netflix Inc. --- sys/netinet/cc/cc_cdg.c | 2 +- sys/netinet/cc/cc_dctcp.c | 4 +- sys/netinet/cc/cc_htcp.c | 2 +- sys/netinet/icmp6.h | 4 +- sys/netinet/if_ether.c | 4 +- sys/netinet/igmp.c | 4 +- sys/netinet/in.c | 4 +- sys/netinet/in.h | 6 +- sys/netinet/in_mcast.c | 6 +- sys/netinet/in_pcb.c | 18 +- sys/netinet/in_pcb.h | 26 +-- sys/netinet/in_proto.c | 4 +- sys/netinet/in_rmx.c | 2 +- sys/netinet/ip_divert.c | 8 +- sys/netinet/ip_dummynet.h | 2 +- sys/netinet/ip_fastfwd.c | 2 +- sys/netinet/ip_fw.h | 22 +-- sys/netinet/ip_icmp.c | 6 +- sys/netinet/ip_id.c | 2 +- sys/netinet/ip_input.c | 14 +- sys/netinet/ip_mroute.c | 10 +- sys/netinet/ip_options.c | 6 +- sys/netinet/ip_reass.c | 4 +- sys/netinet/raw_ip.c | 4 +- sys/netinet/siftr.c | 6 +- sys/netinet/tcp.h | 2 +- sys/netinet/tcp_fastopen.c | 22 +-- sys/netinet/tcp_fsm.h | 2 +- sys/netinet/tcp_input.c | 22 +-- sys/netinet/tcp_log_buf.c | 16 +- sys/netinet/tcp_log_buf.h | 2 +- sys/netinet/tcp_lro.c | 50 +++--- sys/netinet/tcp_lro.h | 12 +- sys/netinet/tcp_output.c | 24 +-- sys/netinet/tcp_ratelimit.c | 344 ++++++++++++++++++++++++++++++++---- sys/netinet/tcp_ratelimit.h | 17 +- sys/netinet/tcp_reass.c | 52 +++--- sys/netinet/tcp_sack.c | 14 +- sys/netinet/tcp_subr.c | 46 ++--- sys/netinet/tcp_syncache.c | 14 +- sys/netinet/tcp_timer.c | 20 +-- sys/netinet/tcp_timer.h | 2 +- sys/netinet/tcp_usrreq.c | 18 +- sys/netinet/tcp_var.h | 4 +- sys/netinet/udp.h | 2 +- sys/netinet/udp_usrreq.c | 6 +- sys/netinet/udp_var.h | 2 +- sys/netinet/udplite.h | 2 +- 48 files changed, 577 insertions(+), 290 deletions(-) diff --git a/sys/netinet/cc/cc_cdg.c b/sys/netinet/cc/cc_cdg.c index 44c566f73db..deab55a24e9 100644 --- a/sys/netinet/cc/cc_cdg.c +++ b/sys/netinet/cc/cc_cdg.c @@ -607,7 +607,7 @@ cdg_ack_received(struct cc_var *ccv, uint16_t ack_type) congestion = prob_backoff(qdiff_max); else if (cdg_data->max_qtrend > 0) congestion = prob_backoff(cdg_data->max_qtrend); - + /* Update estimate of queue state. */ if (cdg_data->min_qtrend > 0 && cdg_data->max_qtrend <= 0) { diff --git a/sys/netinet/cc/cc_dctcp.c b/sys/netinet/cc/cc_dctcp.c index 72aa8f73c0d..13267217485 100644 --- a/sys/netinet/cc/cc_dctcp.c +++ b/sys/netinet/cc/cc_dctcp.c @@ -274,9 +274,9 @@ dctcp_cong_signal(struct cc_var *ccv, uint32_t type) dctcp_data->bytes_total = 0; dctcp_data->save_sndnxt = CCV(ccv, snd_nxt); } else - CCV(ccv, snd_ssthresh) = + CCV(ccv, snd_ssthresh) = max((cwin - (((uint64_t)cwin * - dctcp_data->alpha) >> (DCTCP_SHIFT+1))), + dctcp_data->alpha) >> (DCTCP_SHIFT+1))), 2 * mss); CCV(ccv, snd_cwnd) = CCV(ccv, snd_ssthresh); ENTER_CONGRECOVERY(CCV(ccv, t_flags)); diff --git a/sys/netinet/cc/cc_htcp.c b/sys/netinet/cc/cc_htcp.c index 1686a4e5553..273ebf3b6a5 100644 --- a/sys/netinet/cc/cc_htcp.c +++ b/sys/netinet/cc/cc_htcp.c @@ -364,7 +364,7 @@ htcp_post_recovery(struct cc_var *ccv) pipe = tcp_compute_pipe(ccv->ccvc.tcp); else pipe = CCV(ccv, snd_max) - ccv->curack; - + if (pipe < CCV(ccv, snd_ssthresh)) /* * Ensure that cwnd down not collape to 1 MSS under diff --git a/sys/netinet/icmp6.h b/sys/netinet/icmp6.h index 53c8b57ee0c..00fa21ec684 100644 --- a/sys/netinet/icmp6.h +++ b/sys/netinet/icmp6.h @@ -344,7 +344,7 @@ struct nd_opt_mtu { /* MTU option */ #define ND_OPT_NONCE_LEN ((1 * 8) - 2) #if ((ND_OPT_NONCE_LEN + 2) % 8) != 0 #error "(ND_OPT_NONCE_LEN + 2) must be a multiple of 8." -#endif +#endif struct nd_opt_nonce { /* nonce option */ u_int8_t nd_opt_nonce_type; u_int8_t nd_opt_nonce_len; @@ -607,7 +607,7 @@ struct icmp6stat { * for netinet6 code, it is already available in icp6s_outhist[]. */ uint64_t icp6s_reflect; - uint64_t icp6s_inhist[256]; + uint64_t icp6s_inhist[256]; uint64_t icp6s_nd_toomanyopt; /* too many ND options */ struct icmp6errstat icp6s_outerrhist; #define icp6s_odst_unreach_noroute \ diff --git a/sys/netinet/if_ether.c b/sys/netinet/if_ether.c index cb3c335d089..53c78c2a299 100644 --- a/sys/netinet/if_ether.c +++ b/sys/netinet/if_ether.c @@ -211,7 +211,7 @@ arptimer(void *arg) LLE_WLOCK(lle); if (callout_pending(&lle->lle_timer)) { /* - * Here we are a bit odd here in the treatment of + * Here we are a bit odd here in the treatment of * active/pending. If the pending bit is set, it got * rescheduled before I ran. The active * bit we ignore, since if it was stopped @@ -709,7 +709,7 @@ arpintr(struct mbuf *m) layer = "ethernet"; break; case ARPHRD_INFINIBAND: - hlen = 20; /* RFC 4391, INFINIBAND_ALEN */ + hlen = 20; /* RFC 4391, INFINIBAND_ALEN */ layer = "infiniband"; break; case ARPHRD_IEEE1394: diff --git a/sys/netinet/igmp.c b/sys/netinet/igmp.c index 52aff9e6999..5ee99dbb91d 100644 --- a/sys/netinet/igmp.c +++ b/sys/netinet/igmp.c @@ -877,7 +877,7 @@ out_locked: * We may be updating the group for the first time since we switched * to IGMPv3. If we are, then we must clear any recorded source lists, * and transition to REPORTING state; the group timer is overloaded - * for group and group-source query responses. + * for group and group-source query responses. * * Unlike IGMPv3, the delay per group should be jittered * to avoid bursts of IGMPv2 reports. @@ -2324,7 +2324,7 @@ igmp_initial_join(struct in_multi *inm, struct igmp_ifsoftc *igi) struct ifnet *ifp; struct mbufq *mq; int error, retval, syncstates; - + CTR4(KTR_IGMPV3, "%s: initial join 0x%08x on ifp %p(%s)", __func__, ntohl(inm->inm_addr.s_addr), inm->inm_ifp, inm->inm_ifp->if_xname); diff --git a/sys/netinet/in.c b/sys/netinet/in.c index bf38e3c3350..fb44766fc61 100644 --- a/sys/netinet/in.c +++ b/sys/netinet/in.c @@ -820,11 +820,11 @@ in_scrubprefix(struct in_ifaddr *target, u_int flags) if ((target->ia_flags & IFA_ROUTE) == 0) { int fibnum; - + fibnum = V_rt_add_addr_allfibs ? RT_ALL_FIBS : target->ia_ifp->if_fib; rt_addrmsg(RTM_DELETE, &target->ia_ifa, fibnum); - + /* * Removing address from !IFF_UP interface or * prefix which exists on other interface (along with route). diff --git a/sys/netinet/in.h b/sys/netinet/in.h index e3d7cf38eb9..84a209eef77 100644 --- a/sys/netinet/in.h +++ b/sys/netinet/in.h @@ -323,8 +323,8 @@ __END_DECLS * Default local port range, used by IP_PORTRANGE_DEFAULT */ #define IPPORT_EPHEMERALFIRST 10000 -#define IPPORT_EPHEMERALLAST 65535 - +#define IPPORT_EPHEMERALLAST 65535 + /* * Dynamic port range, used by IP_PORTRANGE_HIGH. */ @@ -381,7 +381,7 @@ __END_DECLS (((in_addr_t)(i) & 0xffff0000) == 0xc0a80000)) #define IN_LOCAL_GROUP(i) (((in_addr_t)(i) & 0xffffff00) == 0xe0000000) - + #define IN_ANY_LOCAL(i) (IN_LINKLOCAL(i) || IN_LOCAL_GROUP(i)) #define INADDR_LOOPBACK ((in_addr_t)0x7f000001) diff --git a/sys/netinet/in_mcast.c b/sys/netinet/in_mcast.c index 671dc675dae..b1b9923657e 100644 --- a/sys/netinet/in_mcast.c +++ b/sys/netinet/in_mcast.c @@ -526,7 +526,7 @@ in_getmulti(struct ifnet *ifp, const struct in_addr *group, IN_MULTI_LIST_UNLOCK(); if (inm != NULL) return (0); - + memset(&gsin, 0, sizeof(gsin)); gsin.sin_family = AF_INET; gsin.sin_len = sizeof(struct sockaddr_in); @@ -2207,7 +2207,7 @@ inp_join_group(struct inpcb *inp, struct sockopt *sopt) goto out_inp_unlocked; } if (error) { - CTR1(KTR_IGMPV3, "%s: in_joingroup_locked failed", + CTR1(KTR_IGMPV3, "%s: in_joingroup_locked failed", __func__); goto out_inp_locked; } @@ -2627,7 +2627,7 @@ inp_set_source_filters(struct inpcb *inp, struct sockopt *sopt) int i; INP_WUNLOCK(inp); - + CTR2(KTR_IGMPV3, "%s: loading %lu source list entries", __func__, (unsigned long)msfr.msfr_nsrcs); kss = malloc(sizeof(struct sockaddr_storage) * msfr.msfr_nsrcs, diff --git a/sys/netinet/in_pcb.c b/sys/netinet/in_pcb.c index f519ee0144a..be954c30dde 100644 --- a/sys/netinet/in_pcb.c +++ b/sys/netinet/in_pcb.c @@ -1059,7 +1059,7 @@ in_pcbladdr(struct inpcb *inp, struct in_addr *faddr, struct in_addr *laddr, /* * If we found a route, use the address corresponding to * the outgoing interface. - * + * * Otherwise assume faddr is reachable on a directly connected * network and try to find a corresponding interface to take * the source address from. @@ -1454,13 +1454,13 @@ in_pcbrele_rlocked(struct inpcb *inp) } return (0); } - + KASSERT(inp->inp_socket == NULL, ("%s: inp_socket != NULL", __func__)); #ifdef TCPHPTS if (inp->inp_in_hpts || inp->inp_in_input) { struct tcp_hpts_entry *hpts; /* - * We should not be on the hpts at + * We should not be on the hpts at * this point in any form. we must * get the lock to be sure. */ @@ -1470,7 +1470,7 @@ in_pcbrele_rlocked(struct inpcb *inp) hpts, inp); mtx_unlock(&hpts->p_mtx); hpts = tcp_input_lock(inp); - if (inp->inp_in_input) + if (inp->inp_in_input) panic("Hpts:%p inp:%p at free still on input hpts", hpts, inp); mtx_unlock(&hpts->p_mtx); @@ -1508,7 +1508,7 @@ in_pcbrele_wlocked(struct inpcb *inp) if (inp->inp_in_hpts || inp->inp_in_input) { struct tcp_hpts_entry *hpts; /* - * We should not be on the hpts at + * We should not be on the hpts at * this point in any form. we must * get the lock to be sure. */ @@ -1518,7 +1518,7 @@ in_pcbrele_wlocked(struct inpcb *inp) hpts, inp); mtx_unlock(&hpts->p_mtx); hpts = tcp_input_lock(inp); - if (inp->inp_in_input) + if (inp->inp_in_input) panic("Hpts:%p inp:%p at free still on input hpts", hpts, inp); mtx_unlock(&hpts->p_mtx); @@ -1612,7 +1612,7 @@ in_pcbfree_deferred(epoch_context_t ctx) #endif #ifdef INET inp_freemoptions(imo); -#endif +#endif CURVNET_RESTORE(); } @@ -2731,7 +2731,7 @@ ip_fini(void *xtp) callout_stop(&ipport_tick_callout); } -/* +/* * The ipport_callout should start running at about the time we attach the * inet or inet6 domains. */ @@ -2745,7 +2745,7 @@ ipport_tick_init(const void *unused __unused) EVENTHANDLER_REGISTER(shutdown_pre_sync, ip_fini, NULL, SHUTDOWN_PRI_DEFAULT); } -SYSINIT(ipport_tick_init, SI_SUB_PROTO_DOMAIN, SI_ORDER_MIDDLE, +SYSINIT(ipport_tick_init, SI_SUB_PROTO_DOMAIN, SI_ORDER_MIDDLE, ipport_tick_init, NULL); void diff --git a/sys/netinet/in_pcb.h b/sys/netinet/in_pcb.h index cf4a613be53..b874bc49c63 100644 --- a/sys/netinet/in_pcb.h +++ b/sys/netinet/in_pcb.h @@ -163,22 +163,22 @@ struct in_conninfo { * (h) - Protected by the pcbhash lock for the inpcb * (s) - Protected by another subsystem's locks * (x) - Undefined locking - * + * * Notes on the tcp_hpts: - * + * * First Hpts lock order is * 1) INP_WLOCK() - * 2) HPTS_LOCK() i.e. hpts->pmtx + * 2) HPTS_LOCK() i.e. hpts->pmtx * - * To insert a TCB on the hpts you *must* be holding the INP_WLOCK(). - * You may check the inp->inp_in_hpts flag without the hpts lock. - * The hpts is the only one that will clear this flag holding + * To insert a TCB on the hpts you *must* be holding the INP_WLOCK(). + * You may check the inp->inp_in_hpts flag without the hpts lock. + * The hpts is the only one that will clear this flag holding * only the hpts lock. This means that in your tcp_output() - * routine when you test for the inp_in_hpts flag to be 1 - * it may be transitioning to 0 (by the hpts). - * That's ok since that will just mean an extra call to tcp_output + * routine when you test for the inp_in_hpts flag to be 1 + * it may be transitioning to 0 (by the hpts). + * That's ok since that will just mean an extra call to tcp_output * that most likely will find the call you executed - * (when the mis-match occured) will have put the TCB back + * (when the mis-match occured) will have put the TCB back * on the hpts and it will return. If your * call did not add the inp back to the hpts then you will either * over-send or the cwnd will block you from sending more. @@ -189,7 +189,7 @@ struct in_conninfo { * the INP_WLOCK() or from destroying your TCB where again * you should already have the INP_WLOCK(). * - * The inp_hpts_cpu, inp_hpts_cpu_set, inp_input_cpu and + * The inp_hpts_cpu, inp_hpts_cpu_set, inp_input_cpu and * inp_input_cpu_set fields are controlled completely by * the hpts. Do not ever set these. The inp_hpts_cpu_set * and inp_input_cpu_set fields indicate if the hpts has @@ -243,14 +243,14 @@ struct inpcb { * fits in the pacing window (i&b). */ /* * Note the next fields are protected by a - * different lock (hpts-lock). This means that + * different lock (hpts-lock). This means that * they must correspond in size to the smallest * protectable bit field (uint8_t on x86, and * other platfomrs potentially uint32_t?). Also * since CPU switches can occur at different times the two * fields can *not* be collapsed into a signal bit field. */ -#if defined(__amd64__) || defined(__i386__) +#if defined(__amd64__) || defined(__i386__) volatile uint8_t inp_in_hpts; /* on output hpts (lock b) */ volatile uint8_t inp_in_input; /* on input hpts (lock b) */ #else diff --git a/sys/netinet/in_proto.c b/sys/netinet/in_proto.c index b719ff542c6..75e04912280 100644 --- a/sys/netinet/in_proto.c +++ b/sys/netinet/in_proto.c @@ -146,7 +146,7 @@ struct protosw inetsw[] = { .pr_usrreqs = &tcp_usrreqs }, #ifdef SCTP -{ +{ .pr_type = SOCK_SEQPACKET, .pr_domain = &inetdomain, .pr_protocol = IPPROTO_SCTP, @@ -158,7 +158,7 @@ struct protosw inetsw[] = { .pr_drain = sctp_drain, .pr_usrreqs = &sctp_usrreqs }, -{ +{ .pr_type = SOCK_STREAM, .pr_domain = &inetdomain, .pr_protocol = IPPROTO_SCTP, diff --git a/sys/netinet/in_rmx.c b/sys/netinet/in_rmx.c index 0486752bb20..8ce8c2abddb 100644 --- a/sys/netinet/in_rmx.c +++ b/sys/netinet/in_rmx.c @@ -187,7 +187,7 @@ in_ifadown(struct ifaddr *ifa, int delete) } /* - * inet versions of rt functions. These have fib extensions and + * inet versions of rt functions. These have fib extensions and * for now will just reference the _fib variants. * eventually this order will be reversed, */ diff --git a/sys/netinet/ip_divert.c b/sys/netinet/ip_divert.c index 80bfd86c195..2611a8792be 100644 --- a/sys/netinet/ip_divert.c +++ b/sys/netinet/ip_divert.c @@ -57,7 +57,7 @@ __FBSDID("$FreeBSD$"); #include #include -#include +#include #include #include @@ -252,10 +252,10 @@ divert_packet(struct mbuf *m, bool incoming) */ if (m->m_pkthdr.rcvif) { /* - * Hide the actual interface name in there in the + * Hide the actual interface name in there in the * sin_zero array. XXX This needs to be moved to a * different sockaddr type for divert, e.g. - * sockaddr_div with multiple fields like + * sockaddr_div with multiple fields like * sockaddr_dl. Presently we have only 7 bytes * but that will do for now as most interfaces * are 4 or less + 2 or less bytes for unit. @@ -268,7 +268,7 @@ divert_packet(struct mbuf *m, bool incoming) * and re-uses the sockaddr_in as suggested in the man pages, * this iface name will come along for the ride. * (see div_output for the other half of this.) - */ + */ strlcpy(divsrc.sin_zero, m->m_pkthdr.rcvif->if_xname, sizeof(divsrc.sin_zero)); } diff --git a/sys/netinet/ip_dummynet.h b/sys/netinet/ip_dummynet.h index 9d64b3e9e8b..173debdaccc 100644 --- a/sys/netinet/ip_dummynet.h +++ b/sys/netinet/ip_dummynet.h @@ -277,7 +277,7 @@ the objects used by dummynet: to delay and bandwidth; + dn_profile describes a delay profile; + dn_flow describes the flow status (flow id, statistics) - + + dn_sch describes a scheduler + dn_fs describes a flowset (msk, weight, queue parameters) diff --git a/sys/netinet/ip_fastfwd.c b/sys/netinet/ip_fastfwd.c index 77a08b1a8af..502bd15cb07 100644 --- a/sys/netinet/ip_fastfwd.c +++ b/sys/netinet/ip_fastfwd.c @@ -57,7 +57,7 @@ * * We try to do the least expensive (in CPU ops) checks and operations * first to catch junk with as little overhead as possible. - * + * * We take full advantage of hardware support for IP checksum and * fragmentation offloading. * diff --git a/sys/netinet/ip_fw.h b/sys/netinet/ip_fw.h index 7a01c82ba58..75150517292 100644 --- a/sys/netinet/ip_fw.h +++ b/sys/netinet/ip_fw.h @@ -34,7 +34,7 @@ * The default rule number. By the design of ip_fw, the default rule * is the last one, so its number can also serve as the highest number * allowed for a rule. The ip_fw code relies on both meanings of this - * constant. + * constant. */ #define IPFW_DEFAULT_RULE 65535 @@ -239,7 +239,7 @@ enum ipfw_opcodes { /* arguments (4 byte each) */ O_FORWARD_MAC, /* fwd mac */ O_NAT, /* nope */ O_REASS, /* none */ - + /* * More opcodes. */ @@ -277,7 +277,7 @@ enum ipfw_opcodes { /* arguments (4 byte each) */ O_SETFIB, /* arg1=FIB number */ O_FIB, /* arg1=FIB desired fib number */ - + O_SOCKARG, /* socket argument */ O_CALLRETURN, /* arg1=called rule number */ @@ -485,9 +485,9 @@ struct cfg_redir { u_short pport_cnt; /* number of public ports */ u_short rport_cnt; /* number of remote ports */ int proto; /* protocol: tcp/udp */ - struct alias_link **alink; + struct alias_link **alink; /* num of entry in spool chain */ - u_int16_t spool_cnt; + u_int16_t spool_cnt; /* chain of spool instances */ LIST_HEAD(spool_chain, cfg_spool) spool_chain; }; @@ -504,9 +504,9 @@ struct cfg_nat { int mode; /* aliasing mode */ struct libalias *lib; /* libalias instance */ /* number of entry in spool chain */ - int redir_cnt; + int redir_cnt; /* chain of redir instances */ - LIST_HEAD(redir_chain, cfg_redir) redir_chain; + LIST_HEAD(redir_chain, cfg_redir) redir_chain; }; #endif @@ -537,7 +537,7 @@ struct nat44_cfg_redir { uint16_t pport_cnt; /* number of public ports */ uint16_t rport_cnt; /* number of remote ports */ uint16_t mode; /* type of redirect mode */ - uint16_t spool_cnt; /* num of entry in spool chain */ + uint16_t spool_cnt; /* num of entry in spool chain */ uint16_t spare; uint32_t proto; /* protocol: tcp/udp */ }; @@ -555,7 +555,7 @@ struct nat44_cfg_nat { /* Nat command. */ typedef struct _ipfw_insn_nat { ipfw_insn o; - struct cfg_nat *nat; + struct cfg_nat *nat; } ipfw_insn_nat; /* Apply ipv6 mask on ipv6 addr */ @@ -579,7 +579,7 @@ typedef struct _ipfw_insn_icmp6 { uint32_t d[7]; /* XXX This number si related to the netinet/icmp6.h * define ICMP6_MAXTYPE * as follows: n = ICMP6_MAXTYPE/32 + 1 - * Actually is 203 + * Actually is 203 */ } ipfw_insn_icmp6; @@ -900,7 +900,7 @@ typedef struct _ipfw_obj_tentry { uint32_t key; /* uid/gid/port */ struct in6_addr addr6; /* IPv6 address */ char iface[IF_NAMESIZE]; /* interface name */ - struct tflow_entry flow; + struct tflow_entry flow; } k; union { ipfw_table_value value; /* value data */ diff --git a/sys/netinet/ip_icmp.c b/sys/netinet/ip_icmp.c index 356414fbdc7..cbae3953b01 100644 --- a/sys/netinet/ip_icmp.c +++ b/sys/netinet/ip_icmp.c @@ -563,7 +563,7 @@ icmp_input(struct mbuf **mp, int *offp, int proto) * - The outer IP header has no options. * - The outer IP header, the ICMP header, the inner IP header, * and the first n bytes of the inner payload are contiguous. - * n is at least 8, but might be larger based on + * n is at least 8, but might be larger based on * ICMP_ADVLENPREF. See its definition in ip_icmp.h. */ ctlfunc = inetsw[ip_protox[icp->icmp_ip.ip_p]].pr_ctlinput; @@ -629,7 +629,7 @@ icmp_input(struct mbuf **mp, int *offp, int proto) (struct sockaddr *)&icmpdst, m->m_pkthdr.rcvif); if (ia == NULL) break; - if (ia->ia_ifp == NULL) + if (ia->ia_ifp == NULL) break; icp->icmp_type = ICMP_MASKREPLY; if (V_icmpmaskfake == 0) @@ -937,7 +937,7 @@ done: * * @src: sockaddr with address of redirect originator * @dst: sockaddr with destination in question - * @gateway: new proposed gateway + * @gateway: new proposed gateway * * Returns 0 on success. */ diff --git a/sys/netinet/ip_id.c b/sys/netinet/ip_id.c index d124d541442..41a6e400c76 100644 --- a/sys/netinet/ip_id.c +++ b/sys/netinet/ip_id.c @@ -280,7 +280,7 @@ ipid_sysinit(void) mtx_init(&V_ip_id_mtx, "ip_id_mtx", NULL, MTX_DEF); V_ip_id = counter_u64_alloc(M_WAITOK); - + CPU_FOREACH(i) arc4rand(zpcpu_get_cpu(V_ip_id, i), sizeof(uint64_t), 0); } diff --git a/sys/netinet/ip_input.c b/sys/netinet/ip_input.c index 8991262cc12..691c8392538 100644 --- a/sys/netinet/ip_input.c +++ b/sys/netinet/ip_input.c @@ -639,12 +639,12 @@ passin: return; /* greedy RSVP, snatches any PATH packet of the RSVP protocol and no - * matter if it is destined to another node, or whether it is + * matter if it is destined to another node, or whether it is * a multicast one, RSVP wants it! and prevents it from being forwarded * anywhere else. Also checks if the rsvp daemon is running before * grabbing the packet. */ - if (V_rsvp_on && ip->ip_p==IPPROTO_RSVP) + if (V_rsvp_on && ip->ip_p==IPPROTO_RSVP) goto ours; /* @@ -675,7 +675,7 @@ passin: * insert a workaround. If the packet got here, we already * checked with carp_iamatch() and carp_forus(). */ - checkif = V_ip_checkinterface && (V_ipforwarding == 0) && + checkif = V_ip_checkinterface && (V_ipforwarding == 0) && ifp != NULL && ((ifp->if_flags & IFF_LOOPBACK) == 0) && ifp->if_carp == NULL && (dchg == 0); @@ -689,7 +689,7 @@ passin: * arrived via the correct interface if checking is * enabled. */ - if (IA_SIN(ia)->sin_addr.s_addr == ip->ip_dst.s_addr && + if (IA_SIN(ia)->sin_addr.s_addr == ip->ip_dst.s_addr && (!checkif || ia->ia_ifp == ifp)) { counter_u64_add(ia->ia_ifa.ifa_ipackets, 1); counter_u64_add(ia->ia_ifa.ifa_ibytes, @@ -1282,7 +1282,7 @@ ip_savecontrol(struct inpcb *inp, struct mbuf **mp, struct ip *ip, } bcopy(sdp, sdl2, sdp->sdl_len); } else { -makedummy: +makedummy: sdl2->sdl_len = offsetof(struct sockaddr_dl, sdl_data[0]); sdl2->sdl_family = AF_LINK; @@ -1408,13 +1408,13 @@ rsvp_input(struct mbuf **mp, int *offp, int proto) * of the group to which the RSVP packet is addressed. But in this * case we want to throw the packet away. */ - + if (!V_rsvp_on) { m_freem(m); return (IPPROTO_DONE); } - if (V_ip_rsvpd != NULL) { + if (V_ip_rsvpd != NULL) { *mp = m; rip_input(mp, offp, proto); return (IPPROTO_DONE); diff --git a/sys/netinet/ip_mroute.c b/sys/netinet/ip_mroute.c index ccde0867f49..f7121e598e6 100644 --- a/sys/netinet/ip_mroute.c +++ b/sys/netinet/ip_mroute.c @@ -182,7 +182,7 @@ VNET_DEFINE_STATIC(vifi_t, numvifs); VNET_DEFINE_STATIC(struct vif *, viftable); #define V_viftable VNET(viftable) /* - * No one should be able to "query" this before initialisation happened in + * No one should be able to "query" this before initialisation happened in * vnet_mroute_init(), so we should still be fine. */ SYSCTL_OPAQUE(_net_inet_ip, OID_AUTO, viftable, CTLFLAG_VNET | CTLFLAG_RD, @@ -653,7 +653,7 @@ if_detached_event(void *arg __unused, struct ifnet *ifp) MROUTER_UNLOCK(); } - + /* * Enable multicast forwarding. */ @@ -742,7 +742,7 @@ X_ip_mrouter_done(void) bzero((caddr_t)V_viftable, sizeof(V_viftable)); V_numvifs = 0; V_pim_assert_enabled = 0; - + VIF_UNLOCK(); callout_stop(&V_expire_upcalls_ch); @@ -2833,7 +2833,7 @@ vnet_mroute_uninit(const void *unused __unused) V_nexpire = NULL; } -VNET_SYSUNINIT(vnet_mroute_uninit, SI_SUB_PROTO_MC, SI_ORDER_MIDDLE, +VNET_SYSUNINIT(vnet_mroute_uninit, SI_SUB_PROTO_MC, SI_ORDER_MIDDLE, vnet_mroute_uninit, NULL); static int @@ -2844,7 +2844,7 @@ ip_mroute_modevent(module_t mod, int type, void *unused) case MOD_LOAD: MROUTER_LOCK_INIT(); - if_detach_event_tag = EVENTHANDLER_REGISTER(ifnet_departure_event, + if_detach_event_tag = EVENTHANDLER_REGISTER(ifnet_departure_event, if_detached_event, NULL, EVENTHANDLER_PRI_ANY); if (if_detach_event_tag == NULL) { printf("ip_mroute: unable to register " diff --git a/sys/netinet/ip_options.c b/sys/netinet/ip_options.c index cb9920d86d9..92ce394d08c 100644 --- a/sys/netinet/ip_options.c +++ b/sys/netinet/ip_options.c @@ -75,8 +75,8 @@ SYSCTL_INT(_net_inet_ip, IPCTL_SOURCEROUTE, sourceroute, #define V_ip_dosourceroute VNET(ip_dosourceroute) VNET_DEFINE_STATIC(int, ip_acceptsourceroute); -SYSCTL_INT(_net_inet_ip, IPCTL_ACCEPTSOURCEROUTE, accept_sourceroute, - CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(ip_acceptsourceroute), 0, +SYSCTL_INT(_net_inet_ip, IPCTL_ACCEPTSOURCEROUTE, accept_sourceroute, + CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(ip_acceptsourceroute), 0, "Enable accepting source routed IP packets"); #define V_ip_acceptsourceroute VNET(ip_acceptsourceroute) @@ -208,7 +208,7 @@ ip_dooptions(struct mbuf *m, int pass) * ICMP */ nosourcerouting: - log(LOG_WARNING, + log(LOG_WARNING, "attempted source route from %s " "to %s\n", inet_ntoa_r(ip->ip_src, srcbuf), diff --git a/sys/netinet/ip_reass.c b/sys/netinet/ip_reass.c index a0503cd614c..969dd301065 100644 --- a/sys/netinet/ip_reass.c +++ b/sys/netinet/ip_reass.c @@ -637,7 +637,7 @@ ipreass_cleanup(void *arg __unused, struct ifnet *ifp) /* * Skip processing if IPv4 reassembly is not initialised or * torn down by ipreass_destroy(). - */ + */ if (V_ipq_zone == NULL) { CURVNET_RESTORE(); return; @@ -750,7 +750,7 @@ sysctl_maxfragpackets(SYSCTL_HANDLER_ARGS) max = uma_zone_get_max(V_ipq_zone); if (max == 0) max = -1; - } else + } else max = 0; error = sysctl_handle_int(oidp, &max, 0, req); if (error || !req->newptr) diff --git a/sys/netinet/raw_ip.c b/sys/netinet/raw_ip.c index b331b9bdd53..ed7ed099339 100644 --- a/sys/netinet/raw_ip.c +++ b/sys/netinet/raw_ip.c @@ -160,7 +160,7 @@ rip_inshash(struct inpcb *inp) INP_INFO_WLOCK_ASSERT(pcbinfo); INP_WLOCK_ASSERT(inp); - + if (inp->inp_ip_p != 0 && inp->inp_laddr.s_addr != INADDR_ANY && inp->inp_faddr.s_addr != INADDR_ANY) { @@ -892,7 +892,7 @@ rip_detach(struct socket *so) inp = sotoinpcb(so); KASSERT(inp != NULL, ("rip_detach: inp == NULL")); - KASSERT(inp->inp_faddr.s_addr == INADDR_ANY, + KASSERT(inp->inp_faddr.s_addr == INADDR_ANY, ("rip_detach: not closed")); INP_INFO_WLOCK(&V_ripcbinfo); diff --git a/sys/netinet/siftr.c b/sys/netinet/siftr.c index e93bcf79b22..ba68fa2774f 100644 --- a/sys/netinet/siftr.c +++ b/sys/netinet/siftr.c @@ -235,9 +235,9 @@ struct pkt_node { /* Number of segments currently in the reassembly queue. */ int t_segqlen; /* Flowid for the connection. */ - u_int flowid; + u_int flowid; /* Flow type for the connection. */ - u_int flowtype; + u_int flowtype; /* Link to next pkt_node in the list. */ STAILQ_ENTRY(pkt_node) nodes; }; @@ -1103,7 +1103,7 @@ siftr_chkpkt6(struct mbuf **m, struct ifnet *ifp, int flags, struct inpcb *inp) * Only pkts selected by the tcp port filter * can be inserted into the pkt_queue */ - if ((siftr_port_filter != 0) && + if ((siftr_port_filter != 0) && (siftr_port_filter != ntohs(inp->inp_lport)) && (siftr_port_filter != ntohs(inp->inp_fport))) { goto inp_unlock6; diff --git a/sys/netinet/tcp.h b/sys/netinet/tcp.h index 528f3cd8ded..fe9221a7460 100644 --- a/sys/netinet/tcp.h +++ b/sys/netinet/tcp.h @@ -333,7 +333,7 @@ struct tcp_info { u_int32_t tcpi_snd_rexmitpack; /* Retransmitted packets */ u_int32_t tcpi_rcv_ooopack; /* Out-of-order packets */ u_int32_t tcpi_snd_zerowin; /* Zero-sized windows sent */ - + /* Padding to grow without breaking ABI. */ u_int32_t __tcpi_pad[26]; /* Padding. */ }; diff --git a/sys/netinet/tcp_fastopen.c b/sys/netinet/tcp_fastopen.c index 396b1c9c3d0..7fb05ab50a9 100644 --- a/sys/netinet/tcp_fastopen.c +++ b/sys/netinet/tcp_fastopen.c @@ -386,7 +386,7 @@ void tcp_fastopen_init(void) { unsigned int i; - + V_counter_zone = uma_zcreate("tfo", sizeof(unsigned int), NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, 0); rm_init(&V_tcp_fastopen_keylock, "tfo_keylock"); @@ -450,7 +450,7 @@ tcp_fastopen_destroy(void) struct tcp_fastopen_ccache_bucket *ccb; unsigned int i; - for (i = 0; i < V_tcp_fastopen_ccache.buckets; i++) { + for (i = 0; i < V_tcp_fastopen_ccache.buckets; i++) { ccb = &V_tcp_fastopen_ccache.base[i]; tcp_fastopen_ccache_bucket_trim(ccb, 0); mtx_destroy(&ccb->ccb_mtx); @@ -807,7 +807,7 @@ sysctl_net_inet_tcp_fastopen_ccache_bucket_limit(SYSCTL_HANDLER_ARGS) int error; unsigned int new; unsigned int i; - + new = V_tcp_fastopen_ccache.bucket_limit; error = sysctl_handle_int(oidp, &new, 0, req); if (error == 0 && req->newptr) { @@ -823,7 +823,7 @@ sysctl_net_inet_tcp_fastopen_ccache_bucket_limit(SYSCTL_HANDLER_ARGS) } V_tcp_fastopen_ccache.bucket_limit = new; } - + } return (error); } @@ -860,7 +860,7 @@ sysctl_net_inet_tcp_fastopen_client_enable(SYSCTL_HANDLER_ARGS) ccb->ccb_num_entries)); ccb->ccb_num_entries = 0; /* enable bucket */ CCB_UNLOCK(ccb); - } + } V_tcp_fastopen_client_enable = 1; } } @@ -876,7 +876,7 @@ tcp_fastopen_connect(struct tcpcb *tp) sbintime_t now; uint16_t server_mss; uint64_t psk_cookie; - + psk_cookie = 0; inp = tp->t_inpcb; cce = tcp_fastopen_ccache_lookup(&inp->inp_inc, &ccb); @@ -1032,7 +1032,7 @@ tcp_fastopen_ccache_lookup(struct in_conninfo *inc, ccb = &V_tcp_fastopen_ccache.base[hash & V_tcp_fastopen_ccache.mask]; *ccbp = ccb; CCB_LOCK(ccb); - + /* * Always returns with locked bucket. */ @@ -1055,7 +1055,7 @@ tcp_fastopen_ccache_create(struct tcp_fastopen_ccache_bucket *ccb, struct in_conninfo *inc, uint16_t mss, uint8_t cookie_len, uint8_t *cookie) { struct tcp_fastopen_ccache_entry *cce; - + /* * 1. Create a new entry, or * 2. Reclaim an existing entry, or @@ -1063,7 +1063,7 @@ tcp_fastopen_ccache_create(struct tcp_fastopen_ccache_bucket *ccb, */ CCB_LOCK_ASSERT(ccb); - + cce = NULL; if (ccb->ccb_num_entries < V_tcp_fastopen_ccache.bucket_limit) cce = uma_zalloc(V_tcp_fastopen_ccache.zone, M_NOWAIT); @@ -1106,7 +1106,7 @@ tcp_fastopen_ccache_create(struct tcp_fastopen_ccache_bucket *ccb, cce->cookie_len = 0; cce->disable_time = getsbinuptime(); } - + return (cce); } @@ -1116,7 +1116,7 @@ tcp_fastopen_ccache_bucket_trim(struct tcp_fastopen_ccache_bucket *ccb, { struct tcp_fastopen_ccache_entry *cce, *cce_tmp; unsigned int entries; - + CCB_LOCK(ccb); entries = 0; TAILQ_FOREACH_SAFE(cce, &ccb->ccb_entries, cce_link, cce_tmp) { diff --git a/sys/netinet/tcp_fsm.h b/sys/netinet/tcp_fsm.h index dcc4a4e8aa6..8bd129f613c 100644 --- a/sys/netinet/tcp_fsm.h +++ b/sys/netinet/tcp_fsm.h @@ -97,7 +97,7 @@ static u_char tcp_outflags[TCP_NSTATES] = { TH_FIN|TH_ACK, /* 8, LAST_ACK */ TH_ACK, /* 9, FIN_WAIT_2 */ TH_ACK, /* 10, TIME_WAIT */ -}; +}; #endif #ifdef KPROF diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c index 5050210ca1b..d23a364e2fc 100644 --- a/sys/netinet/tcp_input.c +++ b/sys/netinet/tcp_input.c @@ -369,7 +369,7 @@ cc_ack_received(struct tcpcb *tp, struct tcphdr *th, uint16_t nsegs, #endif } -void +void cc_conn_init(struct tcpcb *tp) { struct hc_metrics_lite metrics; @@ -1687,7 +1687,7 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so, th->th_seq == tp->rcv_nxt && (thflags & (TH_SYN|TH_FIN|TH_RST|TH_URG|TH_ACK)) == TH_ACK && tp->snd_nxt == tp->snd_max && - tiwin && tiwin == tp->snd_wnd && + tiwin && tiwin == tp->snd_wnd && ((tp->t_flags & (TF_NEEDSYN|TF_NEEDFIN)) == 0) && SEGQ_EMPTY(tp) && ((to.to_flags & TOF_TS) == 0 || @@ -1764,7 +1764,7 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so, if (SEQ_GT(tp->snd_una, tp->snd_recover) && SEQ_LEQ(th->th_ack, tp->snd_recover)) tp->snd_recover = th->th_ack - 1; - + /* * Let the congestion control algorithm update * congestion control related information. This @@ -1908,7 +1908,7 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so, goto dropwithreset; } else if (thflags & TH_SYN) { /* non-initial SYN is ignored */ - if ((tcp_timer_active(tp, TT_DELACK) || + if ((tcp_timer_active(tp, TT_DELACK) || tcp_timer_active(tp, TT_REXMT))) goto drop; } else if (!(thflags & (TH_ACK|TH_FIN|TH_RST))) { @@ -1985,7 +1985,7 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so, tp->t_flags2 |= TF2_ECN_PERMIT; TCPSTAT_INC(tcps_ecn_shs); } - + /* * Received in SYN_SENT[*] state. * Transitions: @@ -2300,14 +2300,14 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so, /* * If last ACK falls within this segment's sequence numbers, * record its timestamp. - * NOTE: + * NOTE: * 1) That the test incorporates suggestions from the latest * proposal of the tcplw@cray.com list (Braden 1993/04/26). * 2) That updating only on newer timestamps interferes with * our earlier PAWS tests, so this check should be solely * predicated on the sequence space of this segment. - * 3) That we modify the segment boundary check to be - * Last.ACK.Sent <= SEG.SEQ + SEG.Len + * 3) That we modify the segment boundary check to be + * Last.ACK.Sent <= SEG.SEQ + SEG.Len * instead of RFC1323's * Last.ACK.Sent < SEG.SEQ + SEG.Len, * This modified check allows us to overcome RFC1323's @@ -2376,7 +2376,7 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so, /* * Account for the ACK of our SYN prior to * regular ACK processing below. - */ + */ tp->snd_una++; } if (tp->t_flags & TF_NEEDFIN) { @@ -2511,10 +2511,10 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so, if ((tp->t_flags & TF_SACK_PERMIT) && IN_FASTRECOVERY(tp->t_flags)) { int awnd; - + /* * Compute the amount of data in flight first. - * We can inject new data into the pipe iff + * We can inject new data into the pipe iff * we have less than 1/2 the original window's * worth of data in flight. */ diff --git a/sys/netinet/tcp_log_buf.c b/sys/netinet/tcp_log_buf.c index e37cb639dbe..1e2603680a4 100644 --- a/sys/netinet/tcp_log_buf.c +++ b/sys/netinet/tcp_log_buf.c @@ -648,7 +648,7 @@ restart: KASSERT(bucket_locked || tlb == NULL, ("%s: bucket_locked (%d) and tlb (%p) are " "inconsistent", __func__, bucket_locked, tlb)); - + if (bucket_locked) { TCPID_BUCKET_UNLOCK(tlb); bucket_locked = false; @@ -728,7 +728,7 @@ refind: * Remember that we constructed (struct tcp_log_id_node) so * we can safely cast the id to it for the purposes of finding. */ - KASSERT(tlb == NULL, ("%s:%d tlb unexpectedly non-NULL", + KASSERT(tlb == NULL, ("%s:%d tlb unexpectedly non-NULL", __func__, __LINE__)); tmp_tlb = RB_FIND(tcp_log_id_tree, &tcp_log_id_head, (struct tcp_log_id_bucket *) id); @@ -1351,7 +1351,7 @@ tcp_log_tcpcbfini(struct tcpcb *tp) * There are two ways we could keep logs: per-socket or per-ID. If * we are tracking logs with an ID, then the logs survive the * destruction of the TCPCB. - * + * * If the TCPCB is associated with an ID node, move the logs from the * TCPCB to the ID node. In theory, this is safe, for reasons which I * will now explain for my own benefit when I next need to figure out @@ -1361,7 +1361,7 @@ tcp_log_tcpcbfini(struct tcpcb *tp) * of this node (Rule C). Further, no one can remove this node from * the bucket while we hold the lock (Rule D). Basically, no one can * mess with this node. That leaves two states in which we could be: - * + * * 1. Another thread is currently waiting to acquire the INP lock, with * plans to do something with this node. When we drop the INP lock, * they will have a chance to do that. They will recheck the @@ -1770,7 +1770,7 @@ tcp_log_state_change(struct tcpcb *tp, int state) if (tcp_disable_all_bb_logs) { /* We are prohibited from doing any logs */ tp->t_logstate = TCP_LOG_STATE_OFF; - } + } tp->t_flags2 &= ~(TF2_LOG_AUTO); return (0); @@ -2110,7 +2110,7 @@ tcp_log_expandlogbuf(struct tcp_log_dev_queue *param) sopt.sopt_val = hdr + 1; sopt.sopt_valsize -= sizeof(struct tcp_log_header); sopt.sopt_td = NULL; - + error = tcp_log_logs_to_buf(&sopt, &entry->tldl_entries, (struct tcp_log_buffer **)&end, entry->tldl_count); if (error) { @@ -2380,7 +2380,7 @@ tcp_log_dumpbucketlogs(struct tcp_log_id_bucket *tlb, char *reason) * If this isn't associated with a TCPCB, we can pull it off * the list now. We need to be careful that the expire timer * hasn't already taken ownership (tln_expiretime == SBT_MAX). - * If so, we let the expire timer code free the data. + * If so, we let the expire timer code free the data. */ if (cur_tln->tln_closed) { no_inp: @@ -2618,7 +2618,7 @@ tcp_log_dump_tp_bucket_logbufs(struct tcpcb *tp, char *reason) return; } - /* Turn this over to tcp_log_dumpbucketlogs() to finish the work. */ + /* Turn this over to tcp_log_dumpbucketlogs() to finish the work. */ tcp_log_dumpbucketlogs(tlb, reason); } diff --git a/sys/netinet/tcp_log_buf.h b/sys/netinet/tcp_log_buf.h index 267d0ed045c..5b470a54150 100644 --- a/sys/netinet/tcp_log_buf.h +++ b/sys/netinet/tcp_log_buf.h @@ -305,7 +305,7 @@ struct tcp_log_dev_log_queue { * information when needed. * * Prototype: - * TCP_LOG_EVENT(struct tcpcb *tp, struct tcphdr *th, struct sockbuf *rxbuf, + * TCP_LOG_EVENT(struct tcpcb *tp, struct tcphdr *th, struct sockbuf *rxbuf, * struct sockbuf *txbuf, uint8_t eventid, int errornum, * union tcp_log_stackspecific *stackinfo) * diff --git a/sys/netinet/tcp_lro.c b/sys/netinet/tcp_lro.c index a5ab79113a8..fcd0c36ad83 100644 --- a/sys/netinet/tcp_lro.c +++ b/sys/netinet/tcp_lro.c @@ -443,7 +443,7 @@ tcp_lro_log(struct tcpcb *tp, struct lro_ctrl *lc, union tcp_log_stackspecific log; struct timeval tv; uint32_t cts; - + cts = tcp_get_usecs(&tv); memset(&log, 0, sizeof(union tcp_log_stackspecific)); log.u_bbr.flex8 = frm; @@ -556,9 +556,9 @@ tcp_flush_out_le(struct tcpcb *tp, struct lro_ctrl *lc, struct lro_entry *le, in tcp_lro_log(tp, lc, le, NULL, 7, 0, 0, 0, 0); } } - /* - * Break any chain, this is not set to NULL on the singleton - * case m_nextpkt points to m_head. Other case set them + /* + * Break any chain, this is not set to NULL on the singleton + * case m_nextpkt points to m_head. Other case set them * m_nextpkt to NULL in push_and_replace. */ le->m_head->m_nextpkt = NULL; @@ -646,7 +646,7 @@ tcp_set_le_to_m(struct lro_ctrl *lc, struct lro_entry *le, struct mbuf *m) le->m_tail = m_last(m); le->append_cnt = 0; le->ulp_csum = tcp_lro_rx_csum_fixup(le, l3hdr, th, tcp_data_len, - ~csum); + ~csum); le->append_cnt++; th->th_sum = csum; /* Restore checksum on first packet. */ } @@ -656,7 +656,7 @@ tcp_push_and_replace(struct tcpcb *tp, struct lro_ctrl *lc, struct lro_entry *le { /* * Push up the stack the current le and replace - * it with m. + * it with m. */ struct mbuf *msave; @@ -666,7 +666,7 @@ tcp_push_and_replace(struct tcpcb *tp, struct lro_ctrl *lc, struct lro_entry *le /* Now push out the old le entry */ tcp_flush_out_le(tp, lc, le, locked); /* - * Now to replace the data properly in the le + * Now to replace the data properly in the le * we have to reset the tcp header and * other fields. */ @@ -678,9 +678,9 @@ tcp_push_and_replace(struct tcpcb *tp, struct lro_ctrl *lc, struct lro_entry *le static void tcp_lro_condense(struct tcpcb *tp, struct lro_ctrl *lc, struct lro_entry *le, int locked) { - /* - * Walk through the mbuf chain we - * have on tap and compress/condense + /* + * Walk through the mbuf chain we + * have on tap and compress/condense * as required. */ uint32_t *ts_ptr; @@ -689,9 +689,9 @@ tcp_lro_condense(struct tcpcb *tp, struct lro_ctrl *lc, struct lro_entry *le, in uint16_t tcp_data_len, csum_upd; int l; - /* - * First we must check the lead (m_head) - * we must make sure that it is *not* + /* + * First we must check the lead (m_head) + * we must make sure that it is *not* * something that should be sent up * right away (sack etc). */ @@ -703,7 +703,7 @@ again: return; } th = tcp_lro_get_th(le, le->m_head); - KASSERT(th != NULL, + KASSERT(th != NULL, ("le:%p m:%p th comes back NULL?", le, le->m_head)); l = (th->th_off << 2); l -= sizeof(*th); @@ -729,7 +729,7 @@ again: goto again; } while((m = le->m_head->m_nextpkt) != NULL) { - /* + /* * condense m into le, first * pull m out of the list. */ @@ -738,7 +738,7 @@ again: /* Setup my data */ tcp_data_len = m->m_pkthdr.lro_len; th = tcp_lro_get_th(le, m); - KASSERT(th != NULL, + KASSERT(th != NULL, ("le:%p m:%p th comes back NULL?", le, m)); ts_ptr = (uint32_t *)(th + 1); l = (th->th_off << 2); @@ -871,14 +871,14 @@ tcp_lro_flush(struct lro_ctrl *lc, struct lro_entry *le) #ifdef TCPHPTS struct inpcb *inp = NULL; int need_wakeup = 0, can_queue = 0; - struct epoch_tracker et; + struct epoch_tracker et; /* Now lets lookup the inp first */ CURVNET_SET(lc->ifp->if_vnet); /* * XXXRRS Currently the common input handler for * mbuf queuing cannot handle VLAN Tagged. This needs - * to be fixed and the or condition removed (i.e. the + * to be fixed and the or condition removed (i.e. the * common code should do the right lookup for the vlan * tag and anything else that the vlan_input() does). */ @@ -907,7 +907,7 @@ tcp_lro_flush(struct lro_ctrl *lc, struct lro_entry *le) if (inp && ((inp->inp_flags & (INP_DROPPED|INP_TIMEWAIT)) || (inp->inp_flags2 & INP_FREED))) { /* We don't want this guy */ - INP_WUNLOCK(inp); + INP_WUNLOCK(inp); inp = NULL; } if (inp && (inp->inp_flags2 & INP_SUPPORTS_MBUFQ)) { @@ -916,13 +916,13 @@ tcp_lro_flush(struct lro_ctrl *lc, struct lro_entry *le) if (le->need_wakeup || ((inp->inp_in_input == 0) && ((inp->inp_flags2 & INP_MBUF_QUEUE_READY) == 0))) { - /* + /* * Either the transport is off on a keep-alive * (it has the queue_ready flag clear and its * not already been woken) or the entry has * some urgent thing (FIN or possibly SACK blocks). * This means we need to wake the transport up by - * putting it on the input pacer. + * putting it on the input pacer. */ need_wakeup = 1; if ((inp->inp_flags2 & INP_DONT_SACK_QUEUE) && @@ -949,7 +949,7 @@ tcp_lro_flush(struct lro_ctrl *lc, struct lro_entry *le) inp->inp_flags2, inp->inp_in_input, le->need_wakeup); tcp_queue_pkts(tp, le); if (need_wakeup) { - /* + /* * We must get the guy to wakeup via * hpts. */ @@ -1233,7 +1233,7 @@ tcp_lro_rx2(struct lro_ctrl *lc, struct mbuf *m, uint32_t csum, int use_hash) if (l != 0 && (__predict_false(l != TCPOLEN_TSTAMP_APPA) || (*ts_ptr != ntohl(TCPOPT_NOP<<24|TCPOPT_NOP<<16| TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP)))) { - /* + /* * We have an option besides Timestamps, maybe * it is a sack (most likely) which means we * will probably need to wake up a sleeper (if @@ -1362,7 +1362,7 @@ tcp_lro_rx2(struct lro_ctrl *lc, struct mbuf *m, uint32_t csum, int use_hash) le->p_len = m->m_pkthdr.len - ETHER_HDR_LEN; break; #endif - } + } le->source_port = th->th_sport; le->dest_port = th->th_dport; le->next_seq = seq + tcp_data_len; @@ -1392,7 +1392,7 @@ tcp_lro_rx2(struct lro_ctrl *lc, struct mbuf *m, uint32_t csum, int use_hash) le->m_last_mbuf = m; m->m_nextpkt = NULL; le->m_prev_last = NULL; - /* + /* * We keep the total size here for cross checking when we may need * to flush/wakeup in the MBUF_QUEUE case. */ diff --git a/sys/netinet/tcp_lro.h b/sys/netinet/tcp_lro.h index 1c6d2dd54e1..f2c05ad4aec 100644 --- a/sys/netinet/tcp_lro.h +++ b/sys/netinet/tcp_lro.h @@ -77,12 +77,12 @@ struct lro_entry { uint16_t mbuf_appended; struct timeval mtime; }; -/* - * Note: The mbuf_cnt field tracks our number of mbufs added to the m_next - * list. Each mbuf counted can have data and of course it will - * have an ack as well (by defintion any inbound tcp segment will +/* + * Note: The mbuf_cnt field tracks our number of mbufs added to the m_next + * list. Each mbuf counted can have data and of course it will + * have an ack as well (by defintion any inbound tcp segment will * have an ack value. We use this count to tell us how many ACK's - * are present for our ack-count threshold. If we exceed that or + * are present for our ack-count threshold. If we exceed that or * the data threshold we will wake up the endpoint. */ LIST_HEAD(lro_head, lro_entry); @@ -130,7 +130,7 @@ void tcp_lro_flush_all(struct lro_ctrl *); int tcp_lro_rx(struct lro_ctrl *, struct mbuf *, uint32_t); void tcp_lro_queue_mbuf(struct lro_ctrl *, struct mbuf *); void tcp_lro_reg_mbufq(void); -void tcp_lro_dereg_mbufq(void); +void tcp_lro_dereg_mbufq(void); #define TCP_LRO_NO_ENTRIES -2 #define TCP_LRO_CANNOT -1 diff --git a/sys/netinet/tcp_output.c b/sys/netinet/tcp_output.c index d308f9bf4c1..e563dd9bda0 100644 --- a/sys/netinet/tcp_output.c +++ b/sys/netinet/tcp_output.c @@ -301,7 +301,7 @@ again: if ((tp->t_flags & TF_SACK_PERMIT) && IN_FASTRECOVERY(tp->t_flags) && (p = tcp_sack_output(tp, &sack_bytes_rxmt))) { uint32_t cwin; - + cwin = imax(min(tp->snd_wnd, tp->snd_cwnd) - sack_bytes_rxmt, 0); /* Do not retransmit SACK segments beyond snd_recover */ @@ -412,14 +412,14 @@ after_sack_rexmit: off); /* * Don't remove this (len > 0) check ! - * We explicitly check for len > 0 here (although it - * isn't really necessary), to work around a gcc + * We explicitly check for len > 0 here (although it + * isn't really necessary), to work around a gcc * optimization issue - to force gcc to compute * len above. Without this check, the computation * of len is bungled by the optimizer. */ if (len > 0) { - cwin = tp->snd_cwnd - + cwin = tp->snd_cwnd - (tp->snd_nxt - tp->sack_newdata) - sack_bytes_rxmt; if (cwin < 0) @@ -658,7 +658,7 @@ after_sack_rexmit: } else oldwin = 0; - /* + /* * If the new window size ends up being the same as or less * than the old size when it is scaled, then don't force * a window update. @@ -706,7 +706,7 @@ dontupdate: !tcp_timer_active(tp, TT_PERSIST)) { tcp_timer_activate(tp, TT_REXMT, tp->t_rxtcur); goto just_return; - } + } /* * TCP window updates are not reliable, rather a polling protocol * using ``persist'' packets is used to insure receipt of window @@ -1058,7 +1058,7 @@ send: &len, if_hw_tsomaxsegcount, if_hw_tsomaxsegsize, msb, hw_tls); if (len <= (tp->t_maxseg - optlen)) { - /* + /* * Must have ran out of mbufs for the copy * shorten it to no longer need tso. Lets * not put on sendalot since we are low on @@ -1153,7 +1153,7 @@ send: } else flags |= TH_ECE|TH_CWR; } - + if (tp->t_state == TCPS_ESTABLISHED && (tp->t_flags2 & TF2_ECN_PERMIT)) { /* @@ -1172,18 +1172,18 @@ send: ip->ip_tos |= IPTOS_ECN_ECT0; TCPSTAT_INC(tcps_ecn_ect0); } - + /* * Reply with proper ECN notifications. */ if (tp->t_flags2 & TF2_ECN_SND_CWR) { flags |= TH_CWR; tp->t_flags2 &= ~TF2_ECN_SND_CWR; - } + } if (tp->t_flags2 & TF2_ECN_SND_ECE) flags |= TH_ECE; } - + /* * If we are doing retransmissions, then snd_nxt will * not reflect the first unsent octet. For ACK only @@ -1464,7 +1464,7 @@ out: * In transmit state, time the transmission and arrange for * the retransmit. In persist state, just set snd_max. */ - if ((tp->t_flags & TF_FORCEDATA) == 0 || + if ((tp->t_flags & TF_FORCEDATA) == 0 || !tcp_timer_active(tp, TT_PERSIST)) { tcp_seq startseq = tp->snd_nxt; diff --git a/sys/netinet/tcp_ratelimit.c b/sys/netinet/tcp_ratelimit.c index 28f845221f2..6fcd97b9e1b 100644 --- a/sys/netinet/tcp_ratelimit.c +++ b/sys/netinet/tcp_ratelimit.c @@ -66,45 +66,186 @@ __FBSDID("$FreeBSD$"); * For the purposes of each send, what is the size * of an ethernet frame. */ -#ifndef ETHERNET_SEGMENT_SIZE -#define ETHERNET_SEGMENT_SIZE 1500 -#endif MALLOC_DEFINE(M_TCPPACE, "tcp_hwpace", "TCP Hardware pacing memory"); #ifdef RATELIMIT +/* + * The following preferred table will seem weird to + * the casual viewer. Why do we not have any rates below + * 1Mbps? Why do we have a rate at 1.44Mbps called common? + * Why do the rates cluster in the 1-100Mbps range more + * than others? Why does the table jump around at the beginnign + * and then be more consistently raising? + * + * Let me try to answer those questions. A lot of + * this is dependant on the hardware. We have three basic + * supporters of rate limiting + * + * Chelsio - Supporting 16 configurable rates. + * Mlx - c4 supporting 13 fixed rates. + * Mlx - c5 & c6 supporting 127 configurable rates. + * + * The c4 is why we have a common rate that is available + * in all rate tables. This is a selected rate from the + * c4 table and we assure its available in all ratelimit + * tables. This way the tcp_ratelimit code has an assured + * rate it should always be able to get. This answers a + * couple of the questions above. + * + * So what about the rest, well the table is built to + * try to get the most out of a joint hardware/software + * pacing system. The software pacer will always pick + * a rate higher than the b/w that it is estimating + * + * on the path. This is done for two reasons. + * a) So we can discover more b/w + * and + * b) So we can send a block of MSS's down and then + * have the software timer go off after the previous + * send is completely out of the hardware. + * + * But when we do we don't want to have the delay + * between the last packet sent by the hardware be + * excessively long (to reach our desired rate). + * + * So let me give an example for clarity. + * + * Lets assume that the tcp stack sees that 29,110,000 bps is + * what the bw of the path is. The stack would select the + * rate 31Mbps. 31Mbps means that each send that is done + * by the hardware will cause a 387 micro-second gap between + * the pacets sent at that rate. For 29,110,000 bps we + * would need 412 micro-seconds gap between each send. + * + * Now we pick a MSS size based on the delta between the + * two rates (412 - 387) divided into the rate we really + * wish to send at rounded up. That results in a MSS + * send of 17 mss's at once. The hardware then will + * run out of data in a single 17MSS send in 6,579 micro-seconds. + * On the other hand the software pacer will send more data + * in 7,004 micro-seconds. This means that we will refill + * the hardware 25 microseconds after it would have sent + * next. This is a win since we no are only sending every + * 7ms or so and yet all the packets are spaced on + * the wire with 94% of what they should be and only + * the last packet is delayed extra to make up for the + * difference. Note that the above formula has two + * important caveat. If we are above (b/w wise) over + * 100Mbps we double the result of the MSS calculation. + * The second caveat is if we are 500Mbps or more + * we just send the maximum MSS at once i.e. 45MSS + * + */ #define COMMON_RATE 180500 uint64_t desired_rates[] = { - 62500, /* 500Kbps */ - 180500, /* 1.44Mpbs */ - 375000, /* 3Mbps */ - 500000, /* 4Mbps */ - 625000, /* 5Mbps */ - 750000, /* 6Mbps */ - 1000000, /* 8Mbps */ - 1250000, /* 10Mbps */ - 2500000, /* 20Mbps */ - 3750000, /* 30Mbps */ - 5000000, /* 40Meg */ - 6250000, /* 50Mbps */ - 12500000, /* 100Mbps */ - 25000000, /* 200Mbps */ - 50000000, /* 400Mbps */ - 100000000, /* 800Mbps */ - 12500, /* 100kbps */ - 25000, /* 200kbps */ - 875000, /* 7Mbps */ - 1125000, /* 9Mbps */ - 1875000, /* 15Mbps */ - 3125000, /* 25Mbps */ - 8125000, /* 65Mbps */ - 10000000, /* 80Mbps */ - 18750000, /* 150Mbps */ - 20000000, /* 250Mbps */ - 37500000, /* 350Mbps */ - 62500000, /* 500Mbps */ - 78125000, /* 625Mbps */ - 125000000, /* 1Gbps */ + 122500, /* 1Mbps - rate 1 */ + 180500, /* 1.44Mpbs - rate 2 common rate */ + 375000, /* 3Mbps - rate 3 */ + 625000, /* 5Mbps - rate 4 */ + 875000, /* 7Mbps - rate 5 */ + 1125000, /* 9Mbps - rate 6 */ + 1375000, /* 11Mbps - rate 7 */ + 1625000, /* 13Mbps - rate 8 */ + 2625000, /* 21Mbps - rate 9 */ + 3875000, /* 31Mbps - rate 10 */ + 5125000, /* 41Meg - rate 11 */ + 12500000, /* 100Mbps - rate 12 */ + 25000000, /* 200Mbps - rate 13 */ + 50000000, /* 400Mbps - rate 14 */ + 63750000, /* 51Mbps - rate 15 */ + 100000000, /* 800Mbps - rate 16 */ + 1875000, /* 15Mbps - rate 17 */ + 2125000, /* 17Mbps - rate 18 */ + 2375000, /* 19Mbps - rate 19 */ + 2875000, /* 23Mbps - rate 20 */ + 3125000, /* 25Mbps - rate 21 */ + 3375000, /* 27Mbps - rate 22 */ + 3625000, /* 29Mbps - rate 23 */ + 4125000, /* 33Mbps - rate 24 */ + 4375000, /* 35Mbps - rate 25 */ + 4625000, /* 37Mbps - rate 26 */ + 4875000, /* 39Mbps - rate 27 */ + 5375000, /* 43Mbps - rate 28 */ + 5625000, /* 45Mbps - rate 29 */ + 5875000, /* 47Mbps - rate 30 */ + 6125000, /* 49Mbps - rate 31 */ + 6625000, /* 53Mbps - rate 32 */ + 6875000, /* 55Mbps - rate 33 */ + 7125000, /* 57Mbps - rate 34 */ + 7375000, /* 59Mbps - rate 35 */ + 7625000, /* 61Mbps - rate 36 */ + 7875000, /* 63Mbps - rate 37 */ + 8125000, /* 65Mbps - rate 38 */ + 8375000, /* 67Mbps - rate 39 */ + 8625000, /* 69Mbps - rate 40 */ + 8875000, /* 71Mbps - rate 41 */ + 9125000, /* 73Mbps - rate 42 */ + 9375000, /* 75Mbps - rate 43 */ + 9625000, /* 77Mbps - rate 44 */ + 9875000, /* 79Mbps - rate 45 */ + 10125000, /* 81Mbps - rate 46 */ + 10375000, /* 83Mbps - rate 47 */ + 10625000, /* 85Mbps - rate 48 */ + 10875000, /* 87Mbps - rate 49 */ + 11125000, /* 89Mbps - rate 50 */ + 11375000, /* 91Mbps - rate 51 */ + 11625000, /* 93Mbps - rate 52 */ + 11875000, /* 95Mbps - rate 53 */ + 13125000, /* 105Mbps - rate 54 */ + 13750000, /* 110Mbps - rate 55 */ + 14375000, /* 115Mbps - rate 56 */ + 15000000, /* 120Mbps - rate 57 */ + 15625000, /* 125Mbps - rate 58 */ + 16250000, /* 130Mbps - rate 59 */ + 16875000, /* 135Mbps - rate 60 */ + 17500000, /* 140Mbps - rate 61 */ + 18125000, /* 145Mbps - rate 62 */ + 18750000, /* 150Mbps - rate 64 */ + 20000000, /* 160Mbps - rate 65 */ + 21250000, /* 170Mbps - rate 66 */ + 22500000, /* 180Mbps - rate 67 */ + 23750000, /* 190Mbps - rate 68 */ + 26250000, /* 210Mbps - rate 69 */ + 27500000, /* 220Mbps - rate 70 */ + 28750000, /* 230Mbps - rate 71 */ + 30000000, /* 240Mbps - rate 72 */ + 31250000, /* 250Mbps - rate 73 */ + 34375000, /* 275Mbps - rate 74 */ + 37500000, /* 300Mbps - rate 75 */ + 40625000, /* 325Mbps - rate 76 */ + 43750000, /* 350Mbps - rate 77 */ + 46875000, /* 375Mbps - rate 78 */ + 53125000, /* 425Mbps - rate 79 */ + 56250000, /* 450Mbps - rate 80 */ + 59375000, /* 475Mbps - rate 81 */ + 62500000, /* 500Mbps - rate 82 */ + 68750000, /* 550Mbps - rate 83 */ + 75000000, /* 600Mbps - rate 84 */ + 81250000, /* 650Mbps - rate 85 */ + 87500000, /* 700Mbps - rate 86 */ + 93750000, /* 750Mbps - rate 87 */ + 106250000, /* 850Mbps - rate 88 */ + 112500000, /* 900Mbps - rate 89 */ + 125000000, /* 1Gbps - rate 90 */ + 156250000, /* 1.25Gps - rate 91 */ + 187500000, /* 1.5Gps - rate 92 */ + 218750000, /* 1.75Gps - rate 93 */ + 250000000, /* 2Gbps - rate 94 */ + 281250000, /* 2.25Gps - rate 95 */ + 312500000, /* 2.5Gbps - rate 96 */ + 343750000, /* 2.75Gbps - rate 97 */ + 375000000, /* 3Gbps - rate 98 */ + 500000000, /* 4Gbps - rate 99 */ + 625000000, /* 5Gbps - rate 100 */ + 750000000, /* 6Gbps - rate 101 */ + 875000000, /* 7Gbps - rate 102 */ + 1000000000, /* 8Gbps - rate 103 */ + 1125000000, /* 9Gbps - rate 104 */ + 1250000000, /* 10Gbps - rate 105 */ + 1875000000, /* 15Gbps - rate 106 */ + 2500000000 /* 20Gbps - rate 107 */ }; + #define MAX_HDWR_RATES (sizeof(desired_rates)/sizeof(uint64_t)) #define RS_ORDERED_COUNT 16 /* * Number that are in order @@ -381,16 +522,24 @@ rt_setup_new_rs(struct ifnet *ifp, int *error) * We can do nothing if we cannot * get a query back from the driver. */ + printf("No query functions for %s:%d-- failed\n", + ifp->if_dname, ifp->if_dunit); return (NULL); } rs = malloc(sizeof(struct tcp_rate_set), M_TCPPACE, M_NOWAIT | M_ZERO); if (rs == NULL) { if (error) *error = ENOMEM; + printf("No memory for malloc\n"); return (NULL); } + memset(&rl, 0, sizeof(rl)); rl.flags = RT_NOSUPPORT; ifp->if_ratelimit_query(ifp, &rl); + printf("if:%s:%d responds with flags:0x%x rate count:%d\n", + ifp->if_dname, + ifp->if_dunit, + rl.flags, rl.number_of_rates); if (rl.flags & RT_IS_UNUSABLE) { /* * The interface does not really support @@ -433,7 +582,7 @@ rt_setup_new_rs(struct ifnet *ifp, int *error) mtx_unlock(&rs_mtx); return (rs); } else if ((rl.flags & RT_IS_FIXED_TABLE) == RT_IS_FIXED_TABLE) { - /* Mellanox most likely */ + /* Mellanox C4 likely */ rs->rs_ifp = ifp; rs->rs_if_dunit = ifp->if_dunit; rs->rs_rate_cnt = rl.number_of_rates; @@ -444,7 +593,7 @@ rt_setup_new_rs(struct ifnet *ifp, int *error) rs->rs_disable = 0; rate_table_act = rl.rate_table; } else if ((rl.flags & RT_IS_SELECTABLE) == RT_IS_SELECTABLE) { - /* Chelsio */ + /* Chelsio, C5 and C6 of Mellanox? */ rs->rs_ifp = ifp; rs->rs_if_dunit = ifp->if_dunit; rs->rs_rate_cnt = rl.number_of_rates; @@ -536,6 +685,14 @@ bail: rs->rs_lowest_valid = i; } else { int err; + + if ((rl.flags & RT_IS_SETUP_REQ) && + (ifp->if_ratelimit_query)) { + err = ifp->if_ratelimit_setup(ifp, + rs->rs_rlt[i].rate, i); + if (err) + goto handle_err; + } #ifdef RSS hash_type = M_HASHTYPE_RSS_TCP_IPV4; #else @@ -547,6 +704,7 @@ bail: rs->rs_rlt[i].rate, &rs->rs_rlt[i].tag); if (err) { +handle_err: if (i == (rs->rs_rate_cnt - 1)) { /* * Huh - first rate and we can't get @@ -980,13 +1138,22 @@ tcp_rl_ifnet_link(void *arg __unused, struct ifnet *ifp, int link_state) * We only care on an interface going up that is rate-limit * capable. */ + printf("ifp:%s.%d does not support rate-limit(0x%x) or link_state is not UP(state:%d)\n", + ifp->if_dname, + ifp->if_dunit, + ifp->if_capabilities, + link_state); return; } mtx_lock(&rs_mtx); + printf("Link UP on interface %s.%d\n", + ifp->if_dname, + ifp->if_dunit); CK_LIST_FOREACH(rs, &int_rs, next) { if ((rs->rs_ifp == ifp) && (rs->rs_if_dunit == ifp->if_dunit)) { /* We already have initialized this guy */ + printf("Interface already initialized\n"); mtx_unlock(&rs_mtx); return; } @@ -1087,6 +1254,7 @@ tcp_set_pacing_rate(struct tcpcb *tp, struct ifnet *ifp, *error = EINVAL; rte = NULL; } + *error = 0; return (rte); } @@ -1196,6 +1364,112 @@ tcp_rel_pacing_rate(const struct tcp_hwrate_limit_table *crte, struct tcpcb *tp) in_pcbdetach_txrtlmt(tp->t_inpcb); } +#define ONE_POINT_TWO_MEG 150000 /* 1.2 megabits in bytes */ +#define ONE_HUNDRED_MBPS 12500000 /* 100Mbps in bytes per second */ +#define FIVE_HUNDRED_MBPS 62500000 /* 500Mbps in bytes per second */ +#define MAX_MSS_SENT 43 /* 43 mss = 43 x 1500 = 64,500 bytes */ + +uint32_t +tcp_get_pacing_mss(uint64_t bw, uint32_t segsiz, int can_use_1mss, + const struct tcp_hwrate_limit_table *te) +{ + /* + * We use the google formula to calculate the + * TSO size. I.E. + * bw < 24Meg + * tso = 2mss + * else + * tso = min(bw/1000, 64k) + * + * Note for these calculations we ignore the + * packet overhead (enet hdr, ip hdr and tcp hdr). + */ + uint64_t lentim, res, bytes; + uint32_t new_tso, min_tso_segs; + + bytes = bw / 1000; + if (bytes > (64 * 1000)) + bytes = 64 * 1000; + /* Round up */ + new_tso = (bytes + segsiz - 1) / segsiz; + if (can_use_1mss && (bw < ONE_POINT_TWO_MEG)) + min_tso_segs = 1; + else + min_tso_segs = 2; + if (new_tso < min_tso_segs) + new_tso = min_tso_segs; + if (new_tso > MAX_MSS_SENT) + new_tso = MAX_MSS_SENT; + new_tso *= segsiz; + /* + * If we are not doing hardware pacing + * then we are done. + */ + if (te == NULL) + return(new_tso); + /* + * For hardware pacing we look at the + * rate you are sending at and compare + * that to the rate you have in hardware. + * + * If the hardware rate is slower than your + * software rate then you are in error and + * we will build a queue in our hardware whic + * is probably not desired, in such a case + * just return the non-hardware TSO size. + * + * If the rate in hardware is faster (which + * it should be) then look at how long it + * takes to send one ethernet segment size at + * your b/w and compare that to the time it + * takes to send at the rate you had selected. + * + * If your time is greater (which we hope it is) + * we get the delta between the two, and then + * divide that into your pacing time. This tells + * us how many MSS you can send down at once (rounded up). + * + * Note we also double this value if the b/w is over + * 100Mbps. If its over 500meg we just set you to the + * max (43 segments). + */ + if (te->rate > FIVE_HUNDRED_MBPS) + return (segsiz * MAX_MSS_SENT); + if (te->rate == bw) { + /* We are pacing at exactly the hdwr rate */ + return (segsiz * MAX_MSS_SENT); + } + lentim = ETHERNET_SEGMENT_SIZE * USECS_IN_SECOND; + res = lentim / bw; + if (res > te->time_between) { + uint32_t delta, segs; + + delta = res - te->time_between; + segs = (res + delta - 1)/delta; + if (te->rate > ONE_HUNDRED_MBPS) + segs *= 2; + if (segs < min_tso_segs) + segs = min_tso_segs; + if (segs > MAX_MSS_SENT) + segs = MAX_MSS_SENT; + segs *= segsiz; + if (segs < new_tso) { + /* unexpected ? */ + return(new_tso); + } else { + return (segs); + } + } else { + /* + * Your time is smaller which means + * we will grow a queue on our + * hardware. Send back the non-hardware + * rate. + */ + return (new_tso); + } +} + static eventhandler_tag rl_ifnet_departs; static eventhandler_tag rl_ifnet_arrives; static eventhandler_tag rl_shutdown_start; diff --git a/sys/netinet/tcp_ratelimit.h b/sys/netinet/tcp_ratelimit.h index ebd4c420470..2b62156a868 100644 --- a/sys/netinet/tcp_ratelimit.h +++ b/sys/netinet/tcp_ratelimit.h @@ -88,6 +88,9 @@ CK_LIST_HEAD(head_tcp_rate_set, tcp_rate_set); #define RS_PACING_SUB_OK 0x0010 /* If a rate can't be found get the * next best rate (highest or lowest). */ #ifdef _KERNEL +#ifndef ETHERNET_SEGMENT_SIZE +#define ETHERNET_SEGMENT_SIZE 1514 +#endif #ifdef RATELIMIT #define DETAILED_RATELIMIT_SYSCTL 1 /* * Undefine this if you don't want @@ -135,7 +138,17 @@ tcp_rel_pacing_rate(const struct tcp_hwrate_limit_table *crte, { return; } - -#endif +#endif +/* + * Given a b/w and a segsiz, and optional hardware + * rate limit, return the ideal size to burst + * out at once. Note the parameter can_use_1mss + * dictates if the transport will tolerate a 1mss + * limit, if not it will bottom out at 2mss (think + * delayed ack). + */ +uint32_t +tcp_get_pacing_mss(uint64_t bw, uint32_t segsiz, int can_use_1mss, + const struct tcp_hwrate_limit_table *te); #endif #endif diff --git a/sys/netinet/tcp_reass.c b/sys/netinet/tcp_reass.c index 73bf051f8ad..aec5b4d0f5f 100644 --- a/sys/netinet/tcp_reass.c +++ b/sys/netinet/tcp_reass.c @@ -321,7 +321,7 @@ tcp_reass_flush(struct tcpcb *tp) static void tcp_reass_append(struct tcpcb *tp, struct tseg_qent *last, - struct mbuf *m, struct tcphdr *th, int tlen, + struct mbuf *m, struct tcphdr *th, int tlen, struct mbuf *mlast, int lenofoh) { @@ -350,7 +350,7 @@ tcp_reass_prepend(struct tcpcb *tp, struct tseg_qent *first, struct mbuf *m, str int tlen, struct mbuf *mlast, int lenofoh) { int i; - + #ifdef TCP_REASS_LOGGING tcp_log_reassm(tp, first, NULL, th->th_seq, tlen, TCP_R_LOG_PREPEND, 0); #endif @@ -381,7 +381,7 @@ tcp_reass_prepend(struct tcpcb *tp, struct tseg_qent *first, struct mbuf *m, str #endif } -static void +static void tcp_reass_replace(struct tcpcb *tp, struct tseg_qent *q, struct mbuf *m, tcp_seq seq, int len, struct mbuf *mlast, int mbufoh, uint8_t flags) { @@ -397,7 +397,7 @@ tcp_reass_replace(struct tcpcb *tp, struct tseg_qent *q, struct mbuf *m, m_freem(q->tqe_m); KASSERT(tp->t_segqmbuflen >= q->tqe_mbuf_cnt, ("Tp:%p seg queue goes negative", tp)); - tp->t_segqmbuflen -= q->tqe_mbuf_cnt; + tp->t_segqmbuflen -= q->tqe_mbuf_cnt; q->tqe_mbuf_cnt = mbufoh; q->tqe_m = m; q->tqe_last = mlast; @@ -420,7 +420,7 @@ static void tcp_reass_merge_into(struct tcpcb *tp, struct tseg_qent *ent, struct tseg_qent *q) { - /* + /* * Merge q into ent and free q from the list. */ #ifdef TCP_REASS_LOGGING @@ -473,8 +473,8 @@ tcp_reass_merge_forward(struct tcpcb *tp, struct tseg_qent *ent) tp->t_segqlen--; continue; } - /* - * Trim the q entry to dovetail to this one + /* + * Trim the q entry to dovetail to this one * and then merge q into ent updating max * in the process. */ @@ -493,7 +493,7 @@ tcp_reass_merge_forward(struct tcpcb *tp, struct tseg_qent *ent) #endif } -static int +static int tcp_reass_overhead_of_chain(struct mbuf *m, struct mbuf **mlast) { int len = MSIZE; @@ -571,7 +571,7 @@ tcp_reass(struct tcpcb *tp, struct tcphdr *th, tcp_seq *seq_start, * the rcv_nxt <-> rcv_wnd but thats * already done for us by the caller. */ -#ifdef TCP_REASS_COUNTERS +#ifdef TCP_REASS_COUNTERS counter_u64_add(tcp_zero_input, 1); #endif m_freem(m); @@ -616,7 +616,7 @@ tcp_reass(struct tcpcb *tp, struct tcphdr *th, tcp_seq *seq_start, if (last != NULL) { if ((th->th_flags & TH_FIN) && SEQ_LT((th->th_seq + *tlenp), (last->tqe_start + last->tqe_len))) { - /* + /* * Someone is trying to game us, dump * the segment. */ @@ -656,8 +656,8 @@ tcp_reass(struct tcpcb *tp, struct tcphdr *th, tcp_seq *seq_start, } } if (last->tqe_flags & TH_FIN) { - /* - * We have data after the FIN on the last? + /* + * We have data after the FIN on the last? */ *tlenp = 0; m_freem(m); @@ -669,7 +669,7 @@ tcp_reass(struct tcpcb *tp, struct tcphdr *th, tcp_seq *seq_start, *tlenp = last->tqe_len; return (0); } else if (SEQ_GT(th->th_seq, (last->tqe_start + last->tqe_len))) { - /* + /* * Second common case, we missed * another one and have something more * for the end. @@ -681,8 +681,8 @@ tcp_reass(struct tcpcb *tp, struct tcphdr *th, tcp_seq *seq_start, * new segment |---| */ if (last->tqe_flags & TH_FIN) { - /* - * We have data after the FIN on the last? + /* + * We have data after the FIN on the last? */ *tlenp = 0; m_freem(m); @@ -726,8 +726,8 @@ tcp_reass(struct tcpcb *tp, struct tcphdr *th, tcp_seq *seq_start, counter_u64_add(reass_path3, 1); #endif if (SEQ_LT(th->th_seq, tp->rcv_nxt)) { - /* - * The resend was even before + /* + * The resend was even before * what we have. We need to trim it. * Note TSNH (it should be trimmed * before the call to tcp_reass()). @@ -785,7 +785,7 @@ tcp_reass(struct tcpcb *tp, struct tcphdr *th, tcp_seq *seq_start, } p = TAILQ_PREV(q, tsegqe_head, tqe_q); /** - * Now is this fit just in-between only? + * Now is this fit just in-between only? * i.e.: * p---+ +----q * v v @@ -856,8 +856,8 @@ tcp_reass(struct tcpcb *tp, struct tcphdr *th, tcp_seq *seq_start, } } if (th->th_seq == (p->tqe_start + p->tqe_len)) { - /* - * If dovetails in with this one + /* + * If dovetails in with this one * append it. */ /** @@ -882,7 +882,7 @@ tcp_reass(struct tcpcb *tp, struct tcphdr *th, tcp_seq *seq_start, q = p; } else { /* - * The new data runs over the + * The new data runs over the * top of previously sack'd data (in q). * It may be partially overlapping, or * it may overlap the entire segment. @@ -903,7 +903,7 @@ tcp_reass(struct tcpcb *tp, struct tcphdr *th, tcp_seq *seq_start, #endif tcp_reass_replace(tp, q, m, th->th_seq, *tlenp, mlast, lenofoh, th->th_flags); } else { - /* + /* * We just need to prepend the data * to this. It does not overrun * the end. @@ -924,8 +924,8 @@ tcp_reass(struct tcpcb *tp, struct tcphdr *th, tcp_seq *seq_start, *tlenp = q->tqe_len; goto present; - /* - * When we reach here we can't combine it + /* + * When we reach here we can't combine it * with any existing segment. * * Limit the number of segments that can be queued to reduce the @@ -965,9 +965,9 @@ new_entry: if (tcp_new_limits) { if ((tp->t_segqlen > tcp_reass_queue_guard) && (*tlenp < MSIZE)) { - /* + /* * This is really a lie, we are not full but - * are getting a segment that is above + * are getting a segment that is above * guard threshold. If it is and its below * a mbuf size (256) we drop it if it * can't fill in some place. diff --git a/sys/netinet/tcp_sack.c b/sys/netinet/tcp_sack.c index 80c014f6fa3..c9874a37a1d 100644 --- a/sys/netinet/tcp_sack.c +++ b/sys/netinet/tcp_sack.c @@ -141,7 +141,7 @@ SYSCTL_INT(_net_inet_tcp_sack, OID_AUTO, maxholes, CTLFLAG_VNET | CTLFLAG_RW, VNET_DEFINE(int, tcp_sack_globalmaxholes) = 65536; SYSCTL_INT(_net_inet_tcp_sack, OID_AUTO, globalmaxholes, CTLFLAG_VNET | CTLFLAG_RW, - &VNET_NAME(tcp_sack_globalmaxholes), 0, + &VNET_NAME(tcp_sack_globalmaxholes), 0, "Global maximum number of TCP SACK holes"); VNET_DEFINE(int, tcp_sack_globalholes) = 0; @@ -397,7 +397,7 @@ tcp_clean_dsack_blocks(struct tcpcb *tp) /* * Clean up any DSACK blocks that * are in our queue of sack blocks. - * + * */ num_saved = 0; for (i = 0; i < tp->rcv_numsacks; i++) { @@ -638,18 +638,18 @@ tcp_sack_doack(struct tcpcb *tp, struct tcpopt *to, tcp_seq th_ack) sblkp--; sack_changed = 1; } else { - /* - * We failed to add a new hole based on the current - * sack block. Skip over all the sack blocks that + /* + * We failed to add a new hole based on the current + * sack block. Skip over all the sack blocks that * fall completely to the right of snd_fack and * proceed to trim the scoreboard based on the * remaining sack blocks. This also trims the * scoreboard for th_ack (which is sack_blocks[0]). */ - while (sblkp >= sack_blocks && + while (sblkp >= sack_blocks && SEQ_LT(tp->snd_fack, sblkp->start)) sblkp--; - if (sblkp >= sack_blocks && + if (sblkp >= sack_blocks && SEQ_LT(tp->snd_fack, sblkp->end)) tp->snd_fack = sblkp->end; } diff --git a/sys/netinet/tcp_subr.c b/sys/netinet/tcp_subr.c index 3801ebc0ec2..16a6d3053de 100644 --- a/sys/netinet/tcp_subr.c +++ b/sys/netinet/tcp_subr.c @@ -390,11 +390,11 @@ struct tcp_function_block * find_and_ref_tcp_functions(struct tcp_function_set *fs) { struct tcp_function_block *blk; - - rw_rlock(&tcp_function_lock); + + rw_rlock(&tcp_function_lock); blk = find_tcp_functions_locked(fs); if (blk) - refcount_acquire(&blk->tfb_refcnt); + refcount_acquire(&blk->tfb_refcnt); rw_runlock(&tcp_function_lock); return(blk); } @@ -403,10 +403,10 @@ struct tcp_function_block * find_and_ref_tcp_fb(struct tcp_function_block *blk) { struct tcp_function_block *rblk; - - rw_rlock(&tcp_function_lock); + + rw_rlock(&tcp_function_lock); rblk = find_tcp_fb_locked(blk, NULL); - if (rblk) + if (rblk) refcount_acquire(&rblk->tfb_refcnt); rw_runlock(&tcp_function_lock); return(rblk); @@ -510,7 +510,7 @@ sysctl_net_inet_default_tcp_functions(SYSCTL_HANDLER_ARGS) strcpy(fs.function_set_name, blk->tfb_tcp_block_name); fs.pcbcnt = blk->tfb_refcnt; } - rw_runlock(&tcp_function_lock); + rw_runlock(&tcp_function_lock); error = sysctl_handle_string(oidp, fs.function_set_name, sizeof(fs.function_set_name), req); @@ -521,8 +521,8 @@ sysctl_net_inet_default_tcp_functions(SYSCTL_HANDLER_ARGS) rw_wlock(&tcp_function_lock); blk = find_tcp_functions_locked(&fs); if ((blk == NULL) || - (blk->tfb_flags & TCP_FUNC_BEING_REMOVED)) { - error = ENOENT; + (blk->tfb_flags & TCP_FUNC_BEING_REMOVED)) { + error = ENOENT; goto done; } tcp_func_set_ptr = blk; @@ -564,7 +564,7 @@ sysctl_net_inet_list_available(SYSCTL_HANDLER_ARGS) bufsz -= linesz; outsz = linesz; - rw_rlock(&tcp_function_lock); + rw_rlock(&tcp_function_lock); TAILQ_FOREACH(f, &t_functions, tf_next) { alias = (f->tf_name != f->tf_fb->tfb_tcp_block_name); linesz = snprintf(cp, bufsz, "%-32s%c %-32s %u\n", @@ -866,7 +866,7 @@ register_tcp_functions_as_names(struct tcp_function_block *blk, int wait, (blk->tfb_tcp_do_segment == NULL) || (blk->tfb_tcp_ctloutput == NULL) || (strlen(blk->tfb_tcp_block_name) == 0)) { - /* + /* * These functions are required and you * need a name. */ @@ -878,7 +878,7 @@ register_tcp_functions_as_names(struct tcp_function_block *blk, int wait, blk->tfb_tcp_timer_active || blk->tfb_tcp_timer_stop) { /* - * If you define one timer function you + * If you define one timer function you * must have them all. */ if ((blk->tfb_tcp_timer_stop_all == NULL) || @@ -1481,7 +1481,7 @@ tcp_respond(struct tcpcb *tp, void *ipgen, struct tcphdr *th, struct mbuf *m, m = n; } else { /* - * reuse the mbuf. + * reuse the mbuf. * XXX MRT We inherit the FIB, which is lucky. */ m_freem(m->m_next); @@ -1914,12 +1914,12 @@ tcp_discardcb(struct tcpcb *tp) tcp_timer_stop(tp, TT_2MSL); tcp_timer_stop(tp, TT_DELACK); if (tp->t_fb->tfb_tcp_timer_stop_all) { - /* - * Call the stop-all function of the methods, + /* + * Call the stop-all function of the methods, * this function should call the tcp_timer_stop() * method with each of the function specific timeouts. * That stop will be called via the tfb_tcp_timer_stop() - * which should use the async drain function of the + * which should use the async drain function of the * callout system (see tcp_var.h). */ tp->t_fb->tfb_tcp_timer_stop_all(tp); @@ -1989,7 +1989,7 @@ tcp_discardcb(struct tcpcb *tp) if (tp->t_flags & TF_TOE) tcp_offload_detach(tp); #endif - + tcp_free_sackholes(tp); #ifdef TCPPCAP @@ -2035,7 +2035,7 @@ tcp_timer_discard(void *ptp) struct inpcb *inp; struct tcpcb *tp; struct epoch_tracker et; - + tp = (struct tcpcb *)ptp; CURVNET_SET(tp->t_vnet); NET_EPOCH_ENTER(et); @@ -2448,7 +2448,7 @@ tcp_ctlinput(int cmd, struct sockaddr *sa, void *vip) if (cmd == PRC_MSGSIZE) notify = tcp_mtudisc_notify; else if (V_icmp_may_rst && (cmd == PRC_UNREACH_ADMIN_PROHIB || - cmd == PRC_UNREACH_PORT || cmd == PRC_UNREACH_PROTOCOL || + cmd == PRC_UNREACH_PORT || cmd == PRC_UNREACH_PROTOCOL || cmd == PRC_TIMXCEED_INTRANS) && ip) notify = tcp_drop_syn_sent; @@ -2582,7 +2582,7 @@ tcp6_ctlinput(int cmd, struct sockaddr *sa, void *d) if (cmd == PRC_MSGSIZE) notify = tcp_mtudisc_notify; else if (V_icmp_may_rst && (cmd == PRC_UNREACH_ADMIN_PROHIB || - cmd == PRC_UNREACH_PORT || cmd == PRC_UNREACH_PROTOCOL || + cmd == PRC_UNREACH_PORT || cmd == PRC_UNREACH_PROTOCOL || cmd == PRC_TIMXCEED_INTRANS) && ip6 != NULL) notify = tcp_drop_syn_sent; @@ -2850,7 +2850,7 @@ tcp_drop_syn_sent(struct inpcb *inp, int errno) if (IS_FASTOPEN(tp->t_flags)) tcp_fastopen_disable_path(tp); - + tp = tcp_drop(tp, errno); if (tp != NULL) return (inp); @@ -2887,7 +2887,7 @@ tcp_mtudisc(struct inpcb *inp, int mtuoffer) KASSERT(tp != NULL, ("tcp_mtudisc: tp == NULL")); tcp_mss_update(tp, -1, mtuoffer, NULL, NULL); - + so = inp->inp_socket; SOCKBUF_LOCK(&so->so_snd); /* If the mss is larger than the socket buffer, decrease the mss. */ @@ -3248,7 +3248,7 @@ sysctl_switch_tls(SYSCTL_HANDLER_ARGS) INP_WUNLOCK(inp); } else { struct socket *so; - + so = inp->inp_socket; soref(so); error = ktls_set_tx_mode(so, diff --git a/sys/netinet/tcp_syncache.c b/sys/netinet/tcp_syncache.c index e5f7dde531c..26d1a68a45c 100644 --- a/sys/netinet/tcp_syncache.c +++ b/sys/netinet/tcp_syncache.c @@ -902,7 +902,7 @@ syncache_socket(struct syncache *sc, struct socket *lso, struct mbuf *m) struct sockaddr_in sin; inp->inp_options = (m) ? ip_srcroute(m) : NULL; - + if (inp->inp_options == NULL) { inp->inp_options = sc->sc_ipopts; sc->sc_ipopts = NULL; @@ -946,11 +946,11 @@ syncache_socket(struct syncache *sc, struct socket *lso, struct mbuf *m) if (V_functions_inherit_listen_socket_stack && blk != tp->t_fb) { /* * Our parents t_fb was not the default, - * we need to release our ref on tp->t_fb and + * we need to release our ref on tp->t_fb and * pickup one on the new entry. */ struct tcp_function_block *rblk; - + rblk = find_and_ref_tcp_fb(blk); KASSERT(rblk != NULL, ("cannot find blk %p out of syncache?", blk)); @@ -967,7 +967,7 @@ syncache_socket(struct syncache *sc, struct socket *lso, struct mbuf *m) if (tp->t_fb->tfb_tcp_fb_init) { (*tp->t_fb->tfb_tcp_fb_init)(tp); } - } + } tp->snd_wl1 = sc->sc_irs; tp->snd_max = tp->iss + 1; tp->snd_nxt = tp->iss + 1; @@ -1207,7 +1207,7 @@ syncache_expand(struct in_conninfo *inc, struct tcpopt *to, struct tcphdr *th, /* * Pull out the entry to unlock the bucket row. - * + * * NOTE: We must decrease TCPS_SYN_RECEIVED count here, not * tcp_state_change(). The tcpcb is not existent at this * moment. A new one will be allocated via syncache_socket-> @@ -2172,7 +2172,7 @@ syncookie_generate(struct syncache_head *sch, struct syncache *sc) } static struct syncache * -syncookie_lookup(struct in_conninfo *inc, struct syncache_head *sch, +syncookie_lookup(struct in_conninfo *inc, struct syncache_head *sch, struct syncache *sc, struct tcphdr *th, struct tcpopt *to, struct socket *lso) { @@ -2208,7 +2208,7 @@ syncookie_lookup(struct in_conninfo *inc, struct syncache_head *sch, sc->sc_flags = 0; bcopy(inc, &sc->sc_inc, sizeof(struct in_conninfo)); sc->sc_ipopts = NULL; - + sc->sc_irs = seq; sc->sc_iss = ack; diff --git a/sys/netinet/tcp_timer.c b/sys/netinet/tcp_timer.c index c3fc0c4183d..2209cdd9caf 100644 --- a/sys/netinet/tcp_timer.c +++ b/sys/netinet/tcp_timer.c @@ -131,7 +131,7 @@ SYSCTL_INT(_net_inet_tcp, OID_AUTO, always_keepalive, CTLFLAG_VNET|CTLFLAG_RW, "Assume SO_KEEPALIVE on all TCP connections"); int tcp_fast_finwait2_recycle = 0; -SYSCTL_INT(_net_inet_tcp, OID_AUTO, fast_finwait2_recycle, CTLFLAG_RW, +SYSCTL_INT(_net_inet_tcp, OID_AUTO, fast_finwait2_recycle, CTLFLAG_RW, &tcp_fast_finwait2_recycle, 0, "Recycle closed FIN_WAIT_2 connections faster"); @@ -326,8 +326,8 @@ tcp_timer_2msl(void *xtp) * If in TIME_WAIT state just ignore as this timeout is handled in * tcp_tw_2msl_scan(). * - * If fastrecycle of FIN_WAIT_2, in FIN_WAIT_2 and receiver has closed, - * there's no point in hanging onto FIN_WAIT_2 socket. Just close it. + * If fastrecycle of FIN_WAIT_2, in FIN_WAIT_2 and receiver has closed, + * there's no point in hanging onto FIN_WAIT_2 socket. Just close it. * Ignore fact that there were recent incoming segments. */ if ((inp->inp_flags & INP_TIMEWAIT) != 0) { @@ -336,7 +336,7 @@ tcp_timer_2msl(void *xtp) return; } if (tcp_fast_finwait2_recycle && tp->t_state == TCPS_FIN_WAIT_2 && - tp->t_inpcb && tp->t_inpcb->inp_socket && + tp->t_inpcb && tp->t_inpcb->inp_socket && (tp->t_inpcb->inp_socket->so_rcv.sb_state & SBS_CANTRCVMORE)) { TCPSTAT_INC(tcps_finwait2_drops); if (inp->inp_flags & (INP_TIMEWAIT | INP_DROPPED)) { @@ -344,7 +344,7 @@ tcp_timer_2msl(void *xtp) goto out; } NET_EPOCH_ENTER(et); - tp = tcp_close(tp); + tp = tcp_close(tp); NET_EPOCH_EXIT(et); tcp_inpinfo_lock_del(inp, tp); goto out; @@ -723,7 +723,7 @@ tcp_timer_rexmt(void * xtp) tp->t_pmtud_saved_maxseg = tp->t_maxseg; } - /* + /* * Reduce the MSS to blackhole value or to the default * in an attempt to retransmit. */ @@ -930,7 +930,7 @@ tcp_timer_active(struct tcpcb *tp, uint32_t timer_type) * timer never to run. The flag is needed to assure * a race does not leave it running and cause * the timer to possibly restart itself (keep and persist - * especially do this). + * especially do this). */ int tcp_timer_suspend(struct tcpcb *tp, uint32_t timer_type) @@ -988,7 +988,7 @@ tcp_timers_unsuspend(struct tcpcb *tp, uint32_t timer_type) (tcp_timer_active((tp), TT_PERSIST) == 0) && tp->snd_wnd) { /* We have outstanding data activate a timer */ - tcp_timer_activate(tp, TT_REXMT, + tcp_timer_activate(tp, TT_REXMT, tp->t_rxtcur); } } @@ -1053,7 +1053,7 @@ tcp_timer_stop(struct tcpcb *tp, uint32_t timer_type) break; default: if (tp->t_fb->tfb_tcp_timer_stop) { - /* + /* * XXXrrs we need to look at this with the * stop case below (flags). */ @@ -1067,7 +1067,7 @@ tcp_timer_stop(struct tcpcb *tp, uint32_t timer_type) /* * Can't stop the callout, defer tcpcb actual deletion * to the last one. We do this using the async drain - * function and incrementing the count in + * function and incrementing the count in */ tp->t_timers->tt_draincnt++; } diff --git a/sys/netinet/tcp_timer.h b/sys/netinet/tcp_timer.h index fe3616c2664..01880c52b84 100644 --- a/sys/netinet/tcp_timer.h +++ b/sys/netinet/tcp_timer.h @@ -168,7 +168,7 @@ struct tcp_timer { #define TT_2MSL 0x0010 #define TT_MASK (TT_DELACK|TT_REXMT|TT_PERSIST|TT_KEEP|TT_2MSL) -/* +/* * Suspend flags - used when suspending a timer * from ever running again. */ diff --git a/sys/netinet/tcp_usrreq.c b/sys/netinet/tcp_usrreq.c index 9038a769566..736dc4dab64 100644 --- a/sys/netinet/tcp_usrreq.c +++ b/sys/netinet/tcp_usrreq.c @@ -1713,7 +1713,7 @@ tcp_ctloutput(struct socket *so, struct sockopt *sopt) * Protect the TCP option TCP_FUNCTION_BLK so * that a sub-function can *never* overwrite this. */ - if ((sopt->sopt_dir == SOPT_SET) && + if ((sopt->sopt_dir == SOPT_SET) && (sopt->sopt_name == TCP_FUNCTION_BLK)) { INP_WUNLOCK(inp); error = sooptcopyin(sopt, &fsn, sizeof fsn, @@ -1733,13 +1733,13 @@ tcp_ctloutput(struct socket *so, struct sockopt *sopt) return (0); } if (tp->t_state != TCPS_CLOSED) { - /* + /* * The user has advanced the state * past the initial point, we may not - * be able to switch. + * be able to switch. */ if (blk->tfb_tcp_handoff_ok != NULL) { - /* + /* * Does the stack provide a * query mechanism, if so it may * still be possible? @@ -1758,19 +1758,19 @@ tcp_ctloutput(struct socket *so, struct sockopt *sopt) INP_WUNLOCK(inp); return (ENOENT); } - /* + /* * Release the old refcnt, the * lookup acquired a ref on the * new one already. */ if (tp->t_fb->tfb_tcp_fb_fini) { - /* + /* * Tell the stack to cleanup with 0 i.e. * the tcb is not going away. */ (*tp->t_fb->tfb_tcp_fb_fini)(tp, 0); } -#ifdef TCPHPTS +#ifdef TCPHPTS /* Assure that we are not on any hpts */ tcp_hpts_remove(tp->t_inpcb, HPTS_REMOVE_ALL); #endif @@ -1800,7 +1800,7 @@ tcp_ctloutput(struct socket *so, struct sockopt *sopt) err_out: INP_WUNLOCK(inp); return (error); - } else if ((sopt->sopt_dir == SOPT_GET) && + } else if ((sopt->sopt_dir == SOPT_GET) && (sopt->sopt_name == TCP_FUNCTION_BLK)) { strncpy(fsn.function_set_name, tp->t_fb->tfb_tcp_block_name, TCP_FUNCTION_NAME_LEN_MAX); @@ -2493,7 +2493,7 @@ tcp_usrclosed(struct tcpcb *tp) if (tp->t_state == TCPS_FIN_WAIT_2) { int timeout; - timeout = (tcp_fast_finwait2_recycle) ? + timeout = (tcp_fast_finwait2_recycle) ? tcp_finwait2_timeout : TP_MAXIDLE(tp); tcp_timer_activate(tp, TT_2MSL, timeout); } diff --git a/sys/netinet/tcp_var.h b/sys/netinet/tcp_var.h index 7539dcb7ffa..d8a71eb8854 100644 --- a/sys/netinet/tcp_var.h +++ b/sys/netinet/tcp_var.h @@ -240,7 +240,7 @@ struct tcptemp { /* Minimum map entries limit value, if set */ #define TCP_MIN_MAP_ENTRIES_LIMIT 128 -/* +/* * TODO: We yet need to brave plowing in * to tcp_input() and the pru_usrreq() block. * Right now these go to the old standards which @@ -612,7 +612,7 @@ struct tcpstat { uint64_t tcps_sack_rcv_blocks; /* SACK blocks (options) received */ uint64_t tcps_sack_send_blocks; /* SACK blocks (options) sent */ uint64_t tcps_sack_sboverflow; /* times scoreboard overflowed */ - + /* ECN related stats */ uint64_t tcps_ecn_ce; /* ECN Congestion Experienced */ uint64_t tcps_ecn_ect0; /* ECN Capable Transport */ diff --git a/sys/netinet/udp.h b/sys/netinet/udp.h index 7c08135d02c..263a64fbe58 100644 --- a/sys/netinet/udp.h +++ b/sys/netinet/udp.h @@ -47,7 +47,7 @@ struct udphdr { u_short uh_sum; /* udp checksum */ }; -/* +/* * User-settable options (used with setsockopt). */ #define UDP_ENCAP 1 diff --git a/sys/netinet/udp_usrreq.c b/sys/netinet/udp_usrreq.c index 749fb9d2ae2..79f78813154 100644 --- a/sys/netinet/udp_usrreq.c +++ b/sys/netinet/udp_usrreq.c @@ -641,7 +641,7 @@ udp_input(struct mbuf **mp, int *offp, int proto) UDPLITE_PROBE(receive, NULL, last, ip, last, uh); else UDP_PROBE(receive, NULL, last, ip, last, uh); - if (udp_append(last, ip, m, iphlen, udp_in) == 0) + if (udp_append(last, ip, m, iphlen, udp_in) == 0) INP_RUNLOCK(last); inp_lost: return (IPPROTO_DONE); @@ -741,7 +741,7 @@ udp_input(struct mbuf **mp, int *offp, int proto) UDPLITE_PROBE(receive, NULL, inp, ip, inp, uh); else UDP_PROBE(receive, NULL, inp, ip, inp, uh); - if (udp_append(inp, ip, m, iphlen, udp_in) == 0) + if (udp_append(inp, ip, m, iphlen, udp_in) == 0) INP_RUNLOCK(inp); return (IPPROTO_DONE); @@ -1075,7 +1075,7 @@ udp_ctloutput(struct socket *so, struct sockopt *sopt) break; } break; - } + } return (error); } diff --git a/sys/netinet/udp_var.h b/sys/netinet/udp_var.h index 965bd490fdf..5d04a9da9c1 100644 --- a/sys/netinet/udp_var.h +++ b/sys/netinet/udp_var.h @@ -60,7 +60,7 @@ struct mbuf; typedef void(*udp_tun_func_t)(struct mbuf *, int, struct inpcb *, const struct sockaddr *, void *); typedef void(*udp_tun_icmp_t)(int, struct sockaddr *, void *, void *); - + /* * UDP control block; one per udp. */ diff --git a/sys/netinet/udplite.h b/sys/netinet/udplite.h index 57a1422a940..8cd8d833f1e 100644 --- a/sys/netinet/udplite.h +++ b/sys/netinet/udplite.h @@ -40,7 +40,7 @@ struct udplitehdr { u_short udplite_checksum; /* UDP-Lite checksum */ }; -/* +/* * User-settable options (used with setsockopt). */ #define UDPLITE_SEND_CSCOV 2 /* Sender checksum coverage. */ From b8f8a6b71987a8e9af0186846cd1da8cb6ddc575 Mon Sep 17 00:00:00 2001 From: Randall Stewart Date: Wed, 12 Feb 2020 13:37:53 +0000 Subject: [PATCH 116/144] Opps committed the wrong ratelimit version in the whitespace cleanup.. Restore it to the proper version. Sponsored by: Netfilx Inc. --- sys/netinet/tcp_ratelimit.c | 362 +++++------------------------------- sys/netinet/tcp_ratelimit.h | 17 +- 2 files changed, 45 insertions(+), 334 deletions(-) diff --git a/sys/netinet/tcp_ratelimit.c b/sys/netinet/tcp_ratelimit.c index 6fcd97b9e1b..5a8523a7ef6 100644 --- a/sys/netinet/tcp_ratelimit.c +++ b/sys/netinet/tcp_ratelimit.c @@ -49,11 +49,9 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include -#include +#define TCPSTATES /* for logging */ #include #include -#define TCPSTATES /* for logging */ #include #ifdef INET6 #include @@ -66,186 +64,45 @@ __FBSDID("$FreeBSD$"); * For the purposes of each send, what is the size * of an ethernet frame. */ +#ifndef ETHERNET_SEGMENT_SIZE +#define ETHERNET_SEGMENT_SIZE 1500 +#endif MALLOC_DEFINE(M_TCPPACE, "tcp_hwpace", "TCP Hardware pacing memory"); #ifdef RATELIMIT -/* - * The following preferred table will seem weird to - * the casual viewer. Why do we not have any rates below - * 1Mbps? Why do we have a rate at 1.44Mbps called common? - * Why do the rates cluster in the 1-100Mbps range more - * than others? Why does the table jump around at the beginnign - * and then be more consistently raising? - * - * Let me try to answer those questions. A lot of - * this is dependant on the hardware. We have three basic - * supporters of rate limiting - * - * Chelsio - Supporting 16 configurable rates. - * Mlx - c4 supporting 13 fixed rates. - * Mlx - c5 & c6 supporting 127 configurable rates. - * - * The c4 is why we have a common rate that is available - * in all rate tables. This is a selected rate from the - * c4 table and we assure its available in all ratelimit - * tables. This way the tcp_ratelimit code has an assured - * rate it should always be able to get. This answers a - * couple of the questions above. - * - * So what about the rest, well the table is built to - * try to get the most out of a joint hardware/software - * pacing system. The software pacer will always pick - * a rate higher than the b/w that it is estimating - * - * on the path. This is done for two reasons. - * a) So we can discover more b/w - * and - * b) So we can send a block of MSS's down and then - * have the software timer go off after the previous - * send is completely out of the hardware. - * - * But when we do we don't want to have the delay - * between the last packet sent by the hardware be - * excessively long (to reach our desired rate). - * - * So let me give an example for clarity. - * - * Lets assume that the tcp stack sees that 29,110,000 bps is - * what the bw of the path is. The stack would select the - * rate 31Mbps. 31Mbps means that each send that is done - * by the hardware will cause a 387 micro-second gap between - * the pacets sent at that rate. For 29,110,000 bps we - * would need 412 micro-seconds gap between each send. - * - * Now we pick a MSS size based on the delta between the - * two rates (412 - 387) divided into the rate we really - * wish to send at rounded up. That results in a MSS - * send of 17 mss's at once. The hardware then will - * run out of data in a single 17MSS send in 6,579 micro-seconds. - * On the other hand the software pacer will send more data - * in 7,004 micro-seconds. This means that we will refill - * the hardware 25 microseconds after it would have sent - * next. This is a win since we no are only sending every - * 7ms or so and yet all the packets are spaced on - * the wire with 94% of what they should be and only - * the last packet is delayed extra to make up for the - * difference. Note that the above formula has two - * important caveat. If we are above (b/w wise) over - * 100Mbps we double the result of the MSS calculation. - * The second caveat is if we are 500Mbps or more - * we just send the maximum MSS at once i.e. 45MSS - * - */ #define COMMON_RATE 180500 uint64_t desired_rates[] = { - 122500, /* 1Mbps - rate 1 */ - 180500, /* 1.44Mpbs - rate 2 common rate */ - 375000, /* 3Mbps - rate 3 */ - 625000, /* 5Mbps - rate 4 */ - 875000, /* 7Mbps - rate 5 */ - 1125000, /* 9Mbps - rate 6 */ - 1375000, /* 11Mbps - rate 7 */ - 1625000, /* 13Mbps - rate 8 */ - 2625000, /* 21Mbps - rate 9 */ - 3875000, /* 31Mbps - rate 10 */ - 5125000, /* 41Meg - rate 11 */ - 12500000, /* 100Mbps - rate 12 */ - 25000000, /* 200Mbps - rate 13 */ - 50000000, /* 400Mbps - rate 14 */ - 63750000, /* 51Mbps - rate 15 */ - 100000000, /* 800Mbps - rate 16 */ - 1875000, /* 15Mbps - rate 17 */ - 2125000, /* 17Mbps - rate 18 */ - 2375000, /* 19Mbps - rate 19 */ - 2875000, /* 23Mbps - rate 20 */ - 3125000, /* 25Mbps - rate 21 */ - 3375000, /* 27Mbps - rate 22 */ - 3625000, /* 29Mbps - rate 23 */ - 4125000, /* 33Mbps - rate 24 */ - 4375000, /* 35Mbps - rate 25 */ - 4625000, /* 37Mbps - rate 26 */ - 4875000, /* 39Mbps - rate 27 */ - 5375000, /* 43Mbps - rate 28 */ - 5625000, /* 45Mbps - rate 29 */ - 5875000, /* 47Mbps - rate 30 */ - 6125000, /* 49Mbps - rate 31 */ - 6625000, /* 53Mbps - rate 32 */ - 6875000, /* 55Mbps - rate 33 */ - 7125000, /* 57Mbps - rate 34 */ - 7375000, /* 59Mbps - rate 35 */ - 7625000, /* 61Mbps - rate 36 */ - 7875000, /* 63Mbps - rate 37 */ - 8125000, /* 65Mbps - rate 38 */ - 8375000, /* 67Mbps - rate 39 */ - 8625000, /* 69Mbps - rate 40 */ - 8875000, /* 71Mbps - rate 41 */ - 9125000, /* 73Mbps - rate 42 */ - 9375000, /* 75Mbps - rate 43 */ - 9625000, /* 77Mbps - rate 44 */ - 9875000, /* 79Mbps - rate 45 */ - 10125000, /* 81Mbps - rate 46 */ - 10375000, /* 83Mbps - rate 47 */ - 10625000, /* 85Mbps - rate 48 */ - 10875000, /* 87Mbps - rate 49 */ - 11125000, /* 89Mbps - rate 50 */ - 11375000, /* 91Mbps - rate 51 */ - 11625000, /* 93Mbps - rate 52 */ - 11875000, /* 95Mbps - rate 53 */ - 13125000, /* 105Mbps - rate 54 */ - 13750000, /* 110Mbps - rate 55 */ - 14375000, /* 115Mbps - rate 56 */ - 15000000, /* 120Mbps - rate 57 */ - 15625000, /* 125Mbps - rate 58 */ - 16250000, /* 130Mbps - rate 59 */ - 16875000, /* 135Mbps - rate 60 */ - 17500000, /* 140Mbps - rate 61 */ - 18125000, /* 145Mbps - rate 62 */ - 18750000, /* 150Mbps - rate 64 */ - 20000000, /* 160Mbps - rate 65 */ - 21250000, /* 170Mbps - rate 66 */ - 22500000, /* 180Mbps - rate 67 */ - 23750000, /* 190Mbps - rate 68 */ - 26250000, /* 210Mbps - rate 69 */ - 27500000, /* 220Mbps - rate 70 */ - 28750000, /* 230Mbps - rate 71 */ - 30000000, /* 240Mbps - rate 72 */ - 31250000, /* 250Mbps - rate 73 */ - 34375000, /* 275Mbps - rate 74 */ - 37500000, /* 300Mbps - rate 75 */ - 40625000, /* 325Mbps - rate 76 */ - 43750000, /* 350Mbps - rate 77 */ - 46875000, /* 375Mbps - rate 78 */ - 53125000, /* 425Mbps - rate 79 */ - 56250000, /* 450Mbps - rate 80 */ - 59375000, /* 475Mbps - rate 81 */ - 62500000, /* 500Mbps - rate 82 */ - 68750000, /* 550Mbps - rate 83 */ - 75000000, /* 600Mbps - rate 84 */ - 81250000, /* 650Mbps - rate 85 */ - 87500000, /* 700Mbps - rate 86 */ - 93750000, /* 750Mbps - rate 87 */ - 106250000, /* 850Mbps - rate 88 */ - 112500000, /* 900Mbps - rate 89 */ - 125000000, /* 1Gbps - rate 90 */ - 156250000, /* 1.25Gps - rate 91 */ - 187500000, /* 1.5Gps - rate 92 */ - 218750000, /* 1.75Gps - rate 93 */ - 250000000, /* 2Gbps - rate 94 */ - 281250000, /* 2.25Gps - rate 95 */ - 312500000, /* 2.5Gbps - rate 96 */ - 343750000, /* 2.75Gbps - rate 97 */ - 375000000, /* 3Gbps - rate 98 */ - 500000000, /* 4Gbps - rate 99 */ - 625000000, /* 5Gbps - rate 100 */ - 750000000, /* 6Gbps - rate 101 */ - 875000000, /* 7Gbps - rate 102 */ - 1000000000, /* 8Gbps - rate 103 */ - 1125000000, /* 9Gbps - rate 104 */ - 1250000000, /* 10Gbps - rate 105 */ - 1875000000, /* 15Gbps - rate 106 */ - 2500000000 /* 20Gbps - rate 107 */ + 62500, /* 500Kbps */ + 180500, /* 1.44Mpbs */ + 375000, /* 3Mbps */ + 500000, /* 4Mbps */ + 625000, /* 5Mbps */ + 750000, /* 6Mbps */ + 1000000, /* 8Mbps */ + 1250000, /* 10Mbps */ + 2500000, /* 20Mbps */ + 3750000, /* 30Mbps */ + 5000000, /* 40Meg */ + 6250000, /* 50Mbps */ + 12500000, /* 100Mbps */ + 25000000, /* 200Mbps */ + 50000000, /* 400Mbps */ + 100000000, /* 800Mbps */ + 12500, /* 100kbps */ + 25000, /* 200kbps */ + 875000, /* 7Mbps */ + 1125000, /* 9Mbps */ + 1875000, /* 15Mbps */ + 3125000, /* 25Mbps */ + 8125000, /* 65Mbps */ + 10000000, /* 80Mbps */ + 18750000, /* 150Mbps */ + 20000000, /* 250Mbps */ + 37500000, /* 350Mbps */ + 62500000, /* 500Mbps */ + 78125000, /* 625Mbps */ + 125000000, /* 1Gbps */ }; - #define MAX_HDWR_RATES (sizeof(desired_rates)/sizeof(uint64_t)) #define RS_ORDERED_COUNT 16 /* * Number that are in order @@ -427,7 +284,7 @@ rs_defer_destroy(struct tcp_rate_set *rs) /* Set flag to only defer once. */ rs->rs_flags |= RS_FUNERAL_SCHD; - NET_EPOCH_CALL(rs_destroy, &rs->rs_epoch_ctx); + epoch_call(net_epoch, &rs->rs_epoch_ctx, rs_destroy); } #ifdef INET @@ -522,24 +379,16 @@ rt_setup_new_rs(struct ifnet *ifp, int *error) * We can do nothing if we cannot * get a query back from the driver. */ - printf("No query functions for %s:%d-- failed\n", - ifp->if_dname, ifp->if_dunit); return (NULL); } rs = malloc(sizeof(struct tcp_rate_set), M_TCPPACE, M_NOWAIT | M_ZERO); if (rs == NULL) { if (error) *error = ENOMEM; - printf("No memory for malloc\n"); return (NULL); } - memset(&rl, 0, sizeof(rl)); rl.flags = RT_NOSUPPORT; ifp->if_ratelimit_query(ifp, &rl); - printf("if:%s:%d responds with flags:0x%x rate count:%d\n", - ifp->if_dname, - ifp->if_dunit, - rl.flags, rl.number_of_rates); if (rl.flags & RT_IS_UNUSABLE) { /* * The interface does not really support @@ -582,7 +431,7 @@ rt_setup_new_rs(struct ifnet *ifp, int *error) mtx_unlock(&rs_mtx); return (rs); } else if ((rl.flags & RT_IS_FIXED_TABLE) == RT_IS_FIXED_TABLE) { - /* Mellanox C4 likely */ + /* Mellanox most likely */ rs->rs_ifp = ifp; rs->rs_if_dunit = ifp->if_dunit; rs->rs_rate_cnt = rl.number_of_rates; @@ -593,7 +442,7 @@ rt_setup_new_rs(struct ifnet *ifp, int *error) rs->rs_disable = 0; rate_table_act = rl.rate_table; } else if ((rl.flags & RT_IS_SELECTABLE) == RT_IS_SELECTABLE) { - /* Chelsio, C5 and C6 of Mellanox? */ + /* Chelsio */ rs->rs_ifp = ifp; rs->rs_if_dunit = ifp->if_dunit; rs->rs_rate_cnt = rl.number_of_rates; @@ -685,14 +534,6 @@ bail: rs->rs_lowest_valid = i; } else { int err; - - if ((rl.flags & RT_IS_SETUP_REQ) && - (ifp->if_ratelimit_query)) { - err = ifp->if_ratelimit_setup(ifp, - rs->rs_rlt[i].rate, i); - if (err) - goto handle_err; - } #ifdef RSS hash_type = M_HASHTYPE_RSS_TCP_IPV4; #else @@ -704,7 +545,6 @@ bail: rs->rs_rlt[i].rate, &rs->rs_rlt[i].tag); if (err) { -handle_err: if (i == (rs->rs_rate_cnt - 1)) { /* * Huh - first rate and we can't get @@ -1038,7 +878,7 @@ rt_setup_rate(struct inpcb *inp, struct ifnet *ifp, uint64_t bytes_per_sec, struct epoch_tracker et; int err; - NET_EPOCH_ENTER(et); + epoch_enter_preempt(net_epoch_preempt, &et); use_real_interface: CK_LIST_FOREACH(rs, &int_rs, next) { /* @@ -1071,14 +911,14 @@ use_real_interface: */ if (rs->rs_disable && error) *error = ENODEV; - NET_EPOCH_EXIT(et); + epoch_exit_preempt(net_epoch_preempt, &et); return (NULL); } if ((rs == NULL) || (rs->rs_disable != 0)) { if (rs->rs_disable && error) *error = ENOSPC; - NET_EPOCH_EXIT(et); + epoch_exit_preempt(net_epoch_preempt, &et); return (NULL); } if (rs->rs_flags & RS_IS_DEFF) { @@ -1089,7 +929,7 @@ use_real_interface: if (tifp == NULL) { if (rs->rs_disable && error) *error = ENOTSUP; - NET_EPOCH_EXIT(et); + epoch_exit_preempt(net_epoch_preempt, &et); return (NULL); } goto use_real_interface; @@ -1098,7 +938,7 @@ use_real_interface: ((rs->rs_flows_using + 1) > rs->rs_flow_limit)) { if (error) *error = ENOSPC; - NET_EPOCH_EXIT(et); + epoch_exit_preempt(net_epoch_preempt, &et); return (NULL); } rte = tcp_find_suitable_rate(rs, bytes_per_sec, flags); @@ -1122,7 +962,7 @@ use_real_interface: */ atomic_add_64(&rs->rs_flows_using, 1); } - NET_EPOCH_EXIT(et); + epoch_exit_preempt(net_epoch_preempt, &et); return (rte); } @@ -1138,22 +978,13 @@ tcp_rl_ifnet_link(void *arg __unused, struct ifnet *ifp, int link_state) * We only care on an interface going up that is rate-limit * capable. */ - printf("ifp:%s.%d does not support rate-limit(0x%x) or link_state is not UP(state:%d)\n", - ifp->if_dname, - ifp->if_dunit, - ifp->if_capabilities, - link_state); return; } mtx_lock(&rs_mtx); - printf("Link UP on interface %s.%d\n", - ifp->if_dname, - ifp->if_dunit); CK_LIST_FOREACH(rs, &int_rs, next) { if ((rs->rs_ifp == ifp) && (rs->rs_if_dunit == ifp->if_dunit)) { /* We already have initialized this guy */ - printf("Interface already initialized\n"); mtx_unlock(&rs_mtx); return; } @@ -1254,7 +1085,6 @@ tcp_set_pacing_rate(struct tcpcb *tp, struct ifnet *ifp, *error = EINVAL; rte = NULL; } - *error = 0; return (rte); } @@ -1364,112 +1194,6 @@ tcp_rel_pacing_rate(const struct tcp_hwrate_limit_table *crte, struct tcpcb *tp) in_pcbdetach_txrtlmt(tp->t_inpcb); } -#define ONE_POINT_TWO_MEG 150000 /* 1.2 megabits in bytes */ -#define ONE_HUNDRED_MBPS 12500000 /* 100Mbps in bytes per second */ -#define FIVE_HUNDRED_MBPS 62500000 /* 500Mbps in bytes per second */ -#define MAX_MSS_SENT 43 /* 43 mss = 43 x 1500 = 64,500 bytes */ - -uint32_t -tcp_get_pacing_mss(uint64_t bw, uint32_t segsiz, int can_use_1mss, - const struct tcp_hwrate_limit_table *te) -{ - /* - * We use the google formula to calculate the - * TSO size. I.E. - * bw < 24Meg - * tso = 2mss - * else - * tso = min(bw/1000, 64k) - * - * Note for these calculations we ignore the - * packet overhead (enet hdr, ip hdr and tcp hdr). - */ - uint64_t lentim, res, bytes; - uint32_t new_tso, min_tso_segs; - - bytes = bw / 1000; - if (bytes > (64 * 1000)) - bytes = 64 * 1000; - /* Round up */ - new_tso = (bytes + segsiz - 1) / segsiz; - if (can_use_1mss && (bw < ONE_POINT_TWO_MEG)) - min_tso_segs = 1; - else - min_tso_segs = 2; - if (new_tso < min_tso_segs) - new_tso = min_tso_segs; - if (new_tso > MAX_MSS_SENT) - new_tso = MAX_MSS_SENT; - new_tso *= segsiz; - /* - * If we are not doing hardware pacing - * then we are done. - */ - if (te == NULL) - return(new_tso); - /* - * For hardware pacing we look at the - * rate you are sending at and compare - * that to the rate you have in hardware. - * - * If the hardware rate is slower than your - * software rate then you are in error and - * we will build a queue in our hardware whic - * is probably not desired, in such a case - * just return the non-hardware TSO size. - * - * If the rate in hardware is faster (which - * it should be) then look at how long it - * takes to send one ethernet segment size at - * your b/w and compare that to the time it - * takes to send at the rate you had selected. - * - * If your time is greater (which we hope it is) - * we get the delta between the two, and then - * divide that into your pacing time. This tells - * us how many MSS you can send down at once (rounded up). - * - * Note we also double this value if the b/w is over - * 100Mbps. If its over 500meg we just set you to the - * max (43 segments). - */ - if (te->rate > FIVE_HUNDRED_MBPS) - return (segsiz * MAX_MSS_SENT); - if (te->rate == bw) { - /* We are pacing at exactly the hdwr rate */ - return (segsiz * MAX_MSS_SENT); - } - lentim = ETHERNET_SEGMENT_SIZE * USECS_IN_SECOND; - res = lentim / bw; - if (res > te->time_between) { - uint32_t delta, segs; - - delta = res - te->time_between; - segs = (res + delta - 1)/delta; - if (te->rate > ONE_HUNDRED_MBPS) - segs *= 2; - if (segs < min_tso_segs) - segs = min_tso_segs; - if (segs > MAX_MSS_SENT) - segs = MAX_MSS_SENT; - segs *= segsiz; - if (segs < new_tso) { - /* unexpected ? */ - return(new_tso); - } else { - return (segs); - } - } else { - /* - * Your time is smaller which means - * we will grow a queue on our - * hardware. Send back the non-hardware - * rate. - */ - return (new_tso); - } -} - static eventhandler_tag rl_ifnet_departs; static eventhandler_tag rl_ifnet_arrives; static eventhandler_tag rl_shutdown_start; diff --git a/sys/netinet/tcp_ratelimit.h b/sys/netinet/tcp_ratelimit.h index 2b62156a868..ebd4c420470 100644 --- a/sys/netinet/tcp_ratelimit.h +++ b/sys/netinet/tcp_ratelimit.h @@ -88,9 +88,6 @@ CK_LIST_HEAD(head_tcp_rate_set, tcp_rate_set); #define RS_PACING_SUB_OK 0x0010 /* If a rate can't be found get the * next best rate (highest or lowest). */ #ifdef _KERNEL -#ifndef ETHERNET_SEGMENT_SIZE -#define ETHERNET_SEGMENT_SIZE 1514 -#endif #ifdef RATELIMIT #define DETAILED_RATELIMIT_SYSCTL 1 /* * Undefine this if you don't want @@ -138,17 +135,7 @@ tcp_rel_pacing_rate(const struct tcp_hwrate_limit_table *crte, { return; } -#endif -/* - * Given a b/w and a segsiz, and optional hardware - * rate limit, return the ideal size to burst - * out at once. Note the parameter can_use_1mss - * dictates if the transport will tolerate a 1mss - * limit, if not it will bottom out at 2mss (think - * delayed ack). - */ -uint32_t -tcp_get_pacing_mss(uint64_t bw, uint32_t segsiz, int can_use_1mss, - const struct tcp_hwrate_limit_table *te); + +#endif #endif #endif From ccfb8acd708bf179fae5b45631bb259f4de2fefe Mon Sep 17 00:00:00 2001 From: Mitchell Horne Date: Wed, 12 Feb 2020 13:58:37 +0000 Subject: [PATCH 117/144] RISC-V: un-ifdef vm.kvm_size and vm.kvm_free Fix formatting and add CTLFLAG_MPSAFE. Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D23522 --- sys/riscv/riscv/pmap.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sys/riscv/riscv/pmap.c b/sys/riscv/riscv/pmap.c index ffe077ead4b..6e9c4cb77c3 100644 --- a/sys/riscv/riscv/pmap.c +++ b/sys/riscv/riscv/pmap.c @@ -1436,7 +1436,6 @@ pmap_release(pmap_t pmap) vm_page_free(m); } -#if 0 static int kvm_size(SYSCTL_HANDLER_ARGS) { @@ -1444,8 +1443,9 @@ kvm_size(SYSCTL_HANDLER_ARGS) return sysctl_handle_long(oidp, &ksize, 0, req); } -SYSCTL_PROC(_vm, OID_AUTO, kvm_size, CTLTYPE_LONG|CTLFLAG_RD, - 0, 0, kvm_size, "LU", "Size of KVM"); +SYSCTL_PROC(_vm, OID_AUTO, kvm_size, CTLTYPE_LONG | CTLFLAG_RD | CTLFLAG_MPSAFE, + 0, 0, kvm_size, "LU", + "Size of KVM"); static int kvm_free(SYSCTL_HANDLER_ARGS) @@ -1454,9 +1454,9 @@ kvm_free(SYSCTL_HANDLER_ARGS) return sysctl_handle_long(oidp, &kfree, 0, req); } -SYSCTL_PROC(_vm, OID_AUTO, kvm_free, CTLTYPE_LONG|CTLFLAG_RD, - 0, 0, kvm_free, "LU", "Amount of KVM free"); -#endif /* 0 */ +SYSCTL_PROC(_vm, OID_AUTO, kvm_free, CTLTYPE_LONG | CTLFLAG_RD | CTLFLAG_MPSAFE, + 0, 0, kvm_free, "LU", + "Amount of KVM free"); /* * grow the number of kernel page table entries, if needed From 9ce0b407c2f37fd83b140cb93c582f445baa750d Mon Sep 17 00:00:00 2001 From: Mitchell Horne Date: Wed, 12 Feb 2020 14:06:02 +0000 Subject: [PATCH 118/144] Implement vm.pmap.kernel_maps for RISC-V This is taken from the arm64 version, with the following simplifications: - Our current pmap implementation uses a 3-level paging scheme - The "mode" field has been omitted since RISC-V PTEs don't encode typical mode attributes Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D23594 --- sys/riscv/riscv/pmap.c | 168 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 168 insertions(+) diff --git a/sys/riscv/riscv/pmap.c b/sys/riscv/riscv/pmap.c index 6e9c4cb77c3..89e0a25600d 100644 --- a/sys/riscv/riscv/pmap.c +++ b/sys/riscv/riscv/pmap.c @@ -131,6 +131,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -4487,3 +4488,170 @@ pmap_get_tables(pmap_t pmap, vm_offset_t va, pd_entry_t **l1, pd_entry_t **l2, return (true); } + +/* + * Track a range of the kernel's virtual address space that is contiguous + * in various mapping attributes. + */ +struct pmap_kernel_map_range { + vm_offset_t sva; + pt_entry_t attrs; + int l3pages; + int l2pages; + int l1pages; +}; + +static void +sysctl_kmaps_dump(struct sbuf *sb, struct pmap_kernel_map_range *range, + vm_offset_t eva) +{ + + if (eva <= range->sva) + return; + + sbuf_printf(sb, "0x%016lx-0x%016lx r%c%c%c%c %d %d %d\n", + range->sva, eva, + (range->attrs & PTE_W) == PTE_W ? 'w' : '-', + (range->attrs & PTE_X) == PTE_X ? 'x' : '-', + (range->attrs & PTE_U) == PTE_U ? 'u' : 's', + (range->attrs & PTE_G) == PTE_G ? 'g' : '-', + range->l1pages, range->l2pages, range->l3pages); + + /* Reset to sentinel value. */ + range->sva = 0xfffffffffffffffful; +} + +/* + * Determine whether the attributes specified by a page table entry match those + * being tracked by the current range. + */ +static bool +sysctl_kmaps_match(struct pmap_kernel_map_range *range, pt_entry_t attrs) +{ + + return (range->attrs == attrs); +} + +static void +sysctl_kmaps_reinit(struct pmap_kernel_map_range *range, vm_offset_t va, + pt_entry_t attrs) +{ + + memset(range, 0, sizeof(*range)); + range->sva = va; + range->attrs = attrs; +} + +/* + * Given a leaf PTE, derive the mapping's attributes. If they do not match + * those of the current run, dump the address range and its attributes, and + * begin a new run. + */ +static void +sysctl_kmaps_check(struct sbuf *sb, struct pmap_kernel_map_range *range, + vm_offset_t va, pd_entry_t l1e, pd_entry_t l2e, pt_entry_t l3e) +{ + pt_entry_t attrs; + + /* The PTE global bit is inherited by lower levels. */ + attrs = l1e & PTE_G; + if ((l1e & PTE_RWX) != 0) + attrs |= l1e & (PTE_RWX | PTE_U); + else if (l2e != 0) + attrs |= l2e & PTE_G; + if ((l2e & PTE_RWX) != 0) + attrs |= l2e & (PTE_RWX | PTE_U); + else if (l3e != 0) + attrs |= l3e & (PTE_RWX | PTE_U | PTE_G); + + if (range->sva > va || !sysctl_kmaps_match(range, attrs)) { + sysctl_kmaps_dump(sb, range, va); + sysctl_kmaps_reinit(range, va, attrs); + } +} + +static int +sysctl_kmaps(SYSCTL_HANDLER_ARGS) +{ + struct pmap_kernel_map_range range; + struct sbuf sbuf, *sb; + pd_entry_t l1e, *l2, l2e; + pt_entry_t *l3, l3e; + vm_offset_t sva; + vm_paddr_t pa; + int error, i, j, k; + + error = sysctl_wire_old_buffer(req, 0); + if (error != 0) + return (error); + sb = &sbuf; + sbuf_new_for_sysctl(sb, NULL, PAGE_SIZE, req); + + /* Sentinel value. */ + range.sva = 0xfffffffffffffffful; + + /* + * Iterate over the kernel page tables without holding the kernel pmap + * lock. Kernel page table pages are never freed, so at worst we will + * observe inconsistencies in the output. + */ + sva = VM_MIN_KERNEL_ADDRESS; + for (i = pmap_l1_index(sva); i < Ln_ENTRIES; i++) { + if (i == pmap_l1_index(DMAP_MIN_ADDRESS)) + sbuf_printf(sb, "\nDirect map:\n"); + else if (i == pmap_l1_index(VM_MIN_KERNEL_ADDRESS)) + sbuf_printf(sb, "\nKernel map:\n"); + + l1e = kernel_pmap->pm_l1[i]; + if ((l1e & PTE_V) == 0) { + sysctl_kmaps_dump(sb, &range, sva); + sva += L1_SIZE; + continue; + } + if ((l1e & PTE_RWX) != 0) { + sysctl_kmaps_check(sb, &range, sva, l1e, 0, 0); + range.l1pages++; + sva += L1_SIZE; + continue; + } + pa = PTE_TO_PHYS(l1e); + l2 = (pd_entry_t *)PHYS_TO_DMAP(pa); + + for (j = pmap_l2_index(sva); j < Ln_ENTRIES; j++) { + l2e = l2[j]; + if ((l2e & PTE_V) == 0) { + sysctl_kmaps_dump(sb, &range, sva); + sva += L2_SIZE; + continue; + } + if ((l2e & PTE_RWX) != 0) { + sysctl_kmaps_check(sb, &range, sva, l1e, l2e, 0); + range.l2pages++; + sva += L2_SIZE; + continue; + } + pa = PTE_TO_PHYS(l2e); + l3 = (pd_entry_t *)PHYS_TO_DMAP(pa); + + for (k = pmap_l3_index(sva); k < Ln_ENTRIES; k++, + sva += L3_SIZE) { + l3e = l3[k]; + if ((l3e & PTE_V) == 0) { + sysctl_kmaps_dump(sb, &range, sva); + continue; + } + sysctl_kmaps_check(sb, &range, sva, + l1e, l2e, l3e); + range.l3pages++; + } + } + } + + error = sbuf_finish(sb); + sbuf_delete(sb); + return (error); +} +SYSCTL_OID(_vm_pmap, OID_AUTO, kernel_maps, + CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, + NULL, 0, sysctl_kmaps, "A", + "Dump kernel address layout"); From 348404bce15fb4eb247e7c56d72c3add8e0950d1 Mon Sep 17 00:00:00 2001 From: Randall Stewart Date: Wed, 12 Feb 2020 15:26:56 +0000 Subject: [PATCH 119/144] Lets get the real correct version.. gessh. I need more coffee evidently. Sponsored by: Netflix --- sys/netinet/tcp_ratelimit.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/sys/netinet/tcp_ratelimit.c b/sys/netinet/tcp_ratelimit.c index 5a8523a7ef6..28f845221f2 100644 --- a/sys/netinet/tcp_ratelimit.c +++ b/sys/netinet/tcp_ratelimit.c @@ -49,9 +49,11 @@ __FBSDID("$FreeBSD$"); #include #include #include -#define TCPSTATES /* for logging */ +#include +#include #include #include +#define TCPSTATES /* for logging */ #include #ifdef INET6 #include @@ -284,7 +286,7 @@ rs_defer_destroy(struct tcp_rate_set *rs) /* Set flag to only defer once. */ rs->rs_flags |= RS_FUNERAL_SCHD; - epoch_call(net_epoch, &rs->rs_epoch_ctx, rs_destroy); + NET_EPOCH_CALL(rs_destroy, &rs->rs_epoch_ctx); } #ifdef INET @@ -878,7 +880,7 @@ rt_setup_rate(struct inpcb *inp, struct ifnet *ifp, uint64_t bytes_per_sec, struct epoch_tracker et; int err; - epoch_enter_preempt(net_epoch_preempt, &et); + NET_EPOCH_ENTER(et); use_real_interface: CK_LIST_FOREACH(rs, &int_rs, next) { /* @@ -911,14 +913,14 @@ use_real_interface: */ if (rs->rs_disable && error) *error = ENODEV; - epoch_exit_preempt(net_epoch_preempt, &et); + NET_EPOCH_EXIT(et); return (NULL); } if ((rs == NULL) || (rs->rs_disable != 0)) { if (rs->rs_disable && error) *error = ENOSPC; - epoch_exit_preempt(net_epoch_preempt, &et); + NET_EPOCH_EXIT(et); return (NULL); } if (rs->rs_flags & RS_IS_DEFF) { @@ -929,7 +931,7 @@ use_real_interface: if (tifp == NULL) { if (rs->rs_disable && error) *error = ENOTSUP; - epoch_exit_preempt(net_epoch_preempt, &et); + NET_EPOCH_EXIT(et); return (NULL); } goto use_real_interface; @@ -938,7 +940,7 @@ use_real_interface: ((rs->rs_flows_using + 1) > rs->rs_flow_limit)) { if (error) *error = ENOSPC; - epoch_exit_preempt(net_epoch_preempt, &et); + NET_EPOCH_EXIT(et); return (NULL); } rte = tcp_find_suitable_rate(rs, bytes_per_sec, flags); @@ -962,7 +964,7 @@ use_real_interface: */ atomic_add_64(&rs->rs_flows_using, 1); } - epoch_exit_preempt(net_epoch_preempt, &et); + NET_EPOCH_EXIT(et); return (rte); } From 57d7e4cc2c6f50edf9b1d54567e03066b8eb42c5 Mon Sep 17 00:00:00 2001 From: Ed Maste Date: Wed, 12 Feb 2020 15:59:59 +0000 Subject: [PATCH 120/144] elfcopy: set ELF OS/ABI field when converting from binary PR: 228934 Submitted by: Tiger Gao Reviewed by: markj, jkoshy MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D23504 --- contrib/elftoolchain/elfcopy/main.c | 1 + contrib/elftoolchain/libelftc/elftc.3 | 4 +++- contrib/elftoolchain/libelftc/elftc_bfd_find_target.3 | 4 +++- contrib/elftoolchain/libelftc/elftc_bfdtarget.c | 7 +++++++ contrib/elftoolchain/libelftc/libelftc.h | 1 + 5 files changed, 15 insertions(+), 2 deletions(-) diff --git a/contrib/elftoolchain/elfcopy/main.c b/contrib/elftoolchain/elfcopy/main.c index 7348bbd2815..fa636820e6e 100644 --- a/contrib/elftoolchain/elfcopy/main.c +++ b/contrib/elftoolchain/elfcopy/main.c @@ -1394,6 +1394,7 @@ set_output_target(struct elfcopy *ecp, const char *target_name) ecp->oec = elftc_bfd_target_class(tgt); ecp->oed = elftc_bfd_target_byteorder(tgt); ecp->oem = elftc_bfd_target_machine(tgt); + ecp->abi = elftc_bfd_target_osabi(tgt); } if (ecp->otf == ETF_EFI || ecp->otf == ETF_PE) ecp->oem = elftc_bfd_target_machine(tgt); diff --git a/contrib/elftoolchain/libelftc/elftc.3 b/contrib/elftoolchain/libelftc/elftc.3 index 08b3f5293dc..54c93b4faf0 100644 --- a/contrib/elftoolchain/libelftc/elftc.3 +++ b/contrib/elftoolchain/libelftc/elftc.3 @@ -23,7 +23,7 @@ .\" .\" $Id: elftc.3 3645 2018-10-15 20:17:14Z jkoshy $ .\" -.Dd December 24, 2012 +.Dd February 12, 2020 .Dt ELFTC 3 .Os .Sh NAME @@ -57,6 +57,8 @@ Query the byte order for a binary object descriptor. Query the object format for a binary object descriptor. .It Fn elftc_bfd_target_machine Query the target machine for a binary object descriptor. +.It Fn elftc_bfd_target_osabi +Query the target osabi for a binary object descriptor. .El .It "C++ support" .Bl -tag -compact -width indent diff --git a/contrib/elftoolchain/libelftc/elftc_bfd_find_target.3 b/contrib/elftoolchain/libelftc/elftc_bfd_find_target.3 index 169c4723d94..235841aa013 100644 --- a/contrib/elftoolchain/libelftc/elftc_bfd_find_target.3 +++ b/contrib/elftoolchain/libelftc/elftc_bfd_find_target.3 @@ -23,7 +23,7 @@ .\" .\" $Id: elftc_bfd_find_target.3 3752 2019-06-28 01:12:53Z emaste $ .\" -.Dd June 27, 2019 +.Dd February 12, 2020 .Dt ELFTC_BFD_FIND_TARGET 3 .Os .Sh NAME @@ -48,6 +48,8 @@ .Fn elftc_bfd_target_flavor "Elftc_Bfd_Target *target" .Ft "unsigned int" .Fn elftc_bfd_target_machine "Elftc_Bfd_Target *target" +.Ft "unsigned int" +.Fn elftc_bfd_target_osabi "Elftc_Bfd_Target *target" .Sh DESCRIPTION Function .Fn elftc_bfd_find_target diff --git a/contrib/elftoolchain/libelftc/elftc_bfdtarget.c b/contrib/elftoolchain/libelftc/elftc_bfdtarget.c index a5ae1a67189..e74072647ce 100644 --- a/contrib/elftoolchain/libelftc/elftc_bfdtarget.c +++ b/contrib/elftoolchain/libelftc/elftc_bfdtarget.c @@ -71,3 +71,10 @@ elftc_bfd_target_machine(Elftc_Bfd_Target *tgt) return (tgt->bt_machine); } + +unsigned int +elftc_bfd_target_osabi(Elftc_Bfd_Target *tgt) +{ + + return (tgt->bt_osabi); +} diff --git a/contrib/elftoolchain/libelftc/libelftc.h b/contrib/elftoolchain/libelftc/libelftc.h index 244c029c9fb..2cd1a3301d9 100644 --- a/contrib/elftoolchain/libelftc/libelftc.h +++ b/contrib/elftoolchain/libelftc/libelftc.h @@ -72,6 +72,7 @@ Elftc_Bfd_Target_Flavor elftc_bfd_target_flavor(Elftc_Bfd_Target *_tgt); unsigned int elftc_bfd_target_byteorder(Elftc_Bfd_Target *_tgt); unsigned int elftc_bfd_target_class(Elftc_Bfd_Target *_tgt); unsigned int elftc_bfd_target_machine(Elftc_Bfd_Target *_tgt); +unsigned int elftc_bfd_target_osabi(Elftc_Bfd_Target *_tgt); int elftc_copyfile(int _srcfd, int _dstfd); int elftc_demangle(const char *_mangledname, char *_buffer, size_t _bufsize, unsigned int _flags); From 17f0dc77a4e511cd5b35e50bccf71e236c78c574 Mon Sep 17 00:00:00 2001 From: Kyle Evans Date: Wed, 12 Feb 2020 16:09:01 +0000 Subject: [PATCH 121/144] lualoader: disable autoboot on high-level interpreter errors If we hit an error at this level, we are almost certainly not in any kind of sane state where autoboot can do the right thing. Instead of letting it try and probably failing, disable autoboot so they immediately get kicked into a loader prompt for manual remediation/diagnosis. Reviewed by: tsoome MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D23611 --- stand/common/interp_lua.c | 1 + 1 file changed, 1 insertion(+) diff --git a/stand/common/interp_lua.c b/stand/common/interp_lua.c index f63bad03b48..4953caa35c5 100644 --- a/stand/common/interp_lua.c +++ b/stand/common/interp_lua.c @@ -128,6 +128,7 @@ interp_init(void) errstr = errstr == NULL ? "unknown" : errstr; printf("Startup error in %s:\nLUA ERROR: %s.\n", filename, errstr); lua_pop(luap, 1); + setenv("autoboot_delay", "NO", 1); } } From 8e173ae7f494838227893430bda0c5c4ec8a312c Mon Sep 17 00:00:00 2001 From: Kyle Evans Date: Wed, 12 Feb 2020 16:10:00 +0000 Subject: [PATCH 122/144] interp_lua: fix bogus indentation, NFC --- stand/common/interp_lua.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/stand/common/interp_lua.c b/stand/common/interp_lua.c index 4953caa35c5..ac3a636fa5f 100644 --- a/stand/common/interp_lua.c +++ b/stand/common/interp_lua.c @@ -124,10 +124,10 @@ interp_init(void) filename = LOADER_LUA; if (interp_include(filename) != 0) { - const char *errstr = lua_tostring(luap, -1); - errstr = errstr == NULL ? "unknown" : errstr; - printf("Startup error in %s:\nLUA ERROR: %s.\n", filename, errstr); - lua_pop(luap, 1); + const char *errstr = lua_tostring(luap, -1); + errstr = errstr == NULL ? "unknown" : errstr; + printf("Startup error in %s:\nLUA ERROR: %s.\n", filename, errstr); + lua_pop(luap, 1); setenv("autoboot_delay", "NO", 1); } } @@ -144,7 +144,7 @@ interp_run(const char *line) luap = softc->luap; LDBG("executing line..."); if ((status = luaL_dostring(luap, line)) != 0) { - lua_pop(luap, 1); + lua_pop(luap, 1); /* * The line wasn't executable as lua; run it through parse to * to get consistent parsing of command line arguments, then From ca3de626ec4d47f38ea815a70498cb5ec7209ae0 Mon Sep 17 00:00:00 2001 From: Michael Tuexen Date: Wed, 12 Feb 2020 17:02:15 +0000 Subject: [PATCH 123/144] Mark the socket as disconnected when freeing the association the first time. This issue was found by running syzkaller. MFC after: 1 week --- sys/netinet/sctp_pcb.c | 50 +++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/sys/netinet/sctp_pcb.c b/sys/netinet/sctp_pcb.c index add79e8e9dc..02eb470a566 100644 --- a/sys/netinet/sctp_pcb.c +++ b/sys/netinet/sctp_pcb.c @@ -4744,6 +4744,31 @@ sctp_free_assoc(struct sctp_inpcb *inp, struct sctp_tcb *stcb, int from_inpcbfre else so = inp->sctp_socket; + if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) || + (inp->sctp_flags & SCTP_PCB_FLAGS_IN_TCPPOOL)) { + /* + * For TCP type we need special handling when we are + * connected. We also include the peel'ed off ones to. + */ + if (inp->sctp_flags & SCTP_PCB_FLAGS_CONNECTED) { + inp->sctp_flags &= ~SCTP_PCB_FLAGS_CONNECTED; + inp->sctp_flags |= SCTP_PCB_FLAGS_WAS_CONNECTED; + if (so) { + SOCKBUF_LOCK(&so->so_rcv); + so->so_state &= ~(SS_ISCONNECTING | + SS_ISDISCONNECTING | + SS_ISCONFIRMING | + SS_ISCONNECTED); + so->so_state |= SS_ISDISCONNECTED; + socantrcvmore_locked(so); + socantsendmore(so); + sctp_sowwakeup(inp, so); + sctp_sorwakeup(inp, so); + SCTP_SOWAKEUP(so); + } + } + } + /* * We used timer based freeing if a reader or writer is in the way. * So we first check if we are actually being called from a timer, @@ -4871,31 +4896,6 @@ sctp_free_assoc(struct sctp_inpcb *inp, struct sctp_tcb *stcb, int from_inpcbfre /* nothing around */ so = NULL; - if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) || - (inp->sctp_flags & SCTP_PCB_FLAGS_IN_TCPPOOL)) { - /* - * For TCP type we need special handling when we are - * connected. We also include the peel'ed off ones to. - */ - if (inp->sctp_flags & SCTP_PCB_FLAGS_CONNECTED) { - inp->sctp_flags &= ~SCTP_PCB_FLAGS_CONNECTED; - inp->sctp_flags |= SCTP_PCB_FLAGS_WAS_CONNECTED; - if (so) { - SOCKBUF_LOCK(&so->so_rcv); - so->so_state &= ~(SS_ISCONNECTING | - SS_ISDISCONNECTING | - SS_ISCONFIRMING | - SS_ISCONNECTED); - so->so_state |= SS_ISDISCONNECTED; - socantrcvmore_locked(so); - socantsendmore(so); - sctp_sowwakeup(inp, so); - sctp_sorwakeup(inp, so); - SCTP_SOWAKEUP(so); - } - } - } - /* * Make it invalid too, that way if its about to run it will abort * and return. From 56ccb48fd691a9188ef2b8f7da31bfe32a26026e Mon Sep 17 00:00:00 2001 From: Michael Tuexen Date: Wed, 12 Feb 2020 17:05:10 +0000 Subject: [PATCH 124/144] Don't panic under INVARIANTS when we can't allocate memory for storing a vtag in time wait. This issue was found by running syzkaller. MFC after: 1 week --- sys/netinet/sctp_pcb.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/sys/netinet/sctp_pcb.c b/sys/netinet/sctp_pcb.c index 02eb470a566..27d790ea9fa 100644 --- a/sys/netinet/sctp_pcb.c +++ b/sys/netinet/sctp_pcb.c @@ -4634,9 +4634,6 @@ sctp_add_vtag_to_timewait(uint32_t tag, uint32_t time, uint16_t lport, uint16_t SCTP_MALLOC(twait_block, struct sctp_tagblock *, sizeof(struct sctp_tagblock), SCTP_M_TIMW); if (twait_block == NULL) { -#ifdef INVARIANTS - panic("Can not alloc tagblock"); -#endif return; } memset(twait_block, 0, sizeof(struct sctp_tagblock)); From 9cdfb2d69a52ead18bb061914345a335894b6cdb Mon Sep 17 00:00:00 2001 From: Ed Maste Date: Wed, 12 Feb 2020 17:12:26 +0000 Subject: [PATCH 125/144] Allow fdatasync in capability mode fdatasync is essentially a subset of fsync (and may be exactly fsync, depending on filesystem and development effort) and operates only on a provided fd. MFC after: 1 week Sponsored by: The FreeBSD Foundation --- sys/kern/capabilities.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/sys/kern/capabilities.conf b/sys/kern/capabilities.conf index 0b5aa2f83fd..e67475e8e8d 100644 --- a/sys/kern/capabilities.conf +++ b/sys/kern/capabilities.conf @@ -224,6 +224,7 @@ fstatfs ## Allow further file descriptor-based I/O operations, subject to capability ## rights. ## +fdatasync fsync ftruncate From e5a2b631464c71ffee55bf926e6d898871fddf81 Mon Sep 17 00:00:00 2001 From: Ed Maste Date: Wed, 12 Feb 2020 17:30:09 +0000 Subject: [PATCH 126/144] tag /etc/rmt symlink with pkgbase package For historical reasons the "remote magtape protocol module" rmt gets invoked as /etc/rmt, which is a symlink to /usr/sbin/rmt. Put it in the utilities package, as /usr/sbin/rmt is. Sponsored by: The FreeBSD Foundation --- usr.sbin/rmt/Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/usr.sbin/rmt/Makefile b/usr.sbin/rmt/Makefile index 93fa5a5f129..0cbc67c7088 100644 --- a/usr.sbin/rmt/Makefile +++ b/usr.sbin/rmt/Makefile @@ -7,6 +7,7 @@ MAN= rmt.8 # called from /usr/src/etc/Makefile etc-rmt: rm -f ${DESTDIR}/etc/rmt - ${INSTALL_RSYMLINK} ..${BINDIR}/rmt ${DESTDIR}/etc/rmt + ${INSTALL_RSYMLINK} -T "package=utilities" \ + ..${BINDIR}/rmt ${DESTDIR}/etc/rmt .include From 9c68ef1455f882f5d737dcaa10f67250495902dc Mon Sep 17 00:00:00 2001 From: Ed Maste Date: Wed, 12 Feb 2020 17:37:32 +0000 Subject: [PATCH 127/144] Tag pjdfstest symlink with pkgbase package As with the rest of pjdfstest, tag the symlink with package=tests. The tests -> . symlink seems a little strange but that's independent of pkgbase. Sponsored by: The FreeBSD Foundation --- tests/sys/pjdfstest/tests/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/sys/pjdfstest/tests/Makefile b/tests/sys/pjdfstest/tests/Makefile index 3e0f6a06d5e..27d86cedddd 100644 --- a/tests/sys/pjdfstest/tests/Makefile +++ b/tests/sys/pjdfstest/tests/Makefile @@ -18,7 +18,7 @@ misc.sh: ${PJDFSTEST_SRCDIR}/tests/misc.sh afterinstall: install-tests-symlink install-tests-symlink: .PHONY rm -f ${DESTDIR}${TESTSDIR}/tests - ${INSTALL_SYMLINK} . ${DESTDIR}${TESTSDIR}/tests + ${INSTALL_SYMLINK} -T "package=tests" . ${DESTDIR}${TESTSDIR}/tests TESTS_SUBDIRS= chflags TESTS_SUBDIRS+= chmod From d3a5bf95f2013af081607abd91b5175f6eafa563 Mon Sep 17 00:00:00 2001 From: Brooks Davis Date: Wed, 12 Feb 2020 18:09:20 +0000 Subject: [PATCH 128/144] Make the warning for deprecated NO_ variables an error. Support for NO_CTF, NO_DEBUG_FILES, NO_INSTALLLIB, NO_MAN, NO_PROFILE, and NO_WARNS as deprecated in 2014 with a warning added for each one found. Turn these into error in preperation for removal of compatability support before FreeBSD 13. This was previously committed in r354909 and reverted in r355011 due to unforseen impacts on ports. I've since corrected all amd64 and i386 ports reported in prior runs as well as instance of these variables I found via grep. --- UPDATING | 8 ++++++++ share/mk/bsd.opts.mk | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/UPDATING b/UPDATING index 5eba5632708..87a4cdf4f73 100644 --- a/UPDATING +++ b/UPDATING @@ -26,6 +26,14 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 13.x IS SLOW: disable the most expensive debugging functionality run "ln -s 'abort:false,junk:false' /etc/malloc.conf".) +20200212: + Defining the long deprecated NO_CTF, NO_DEBUG_FILES, NO_INSTALLLIB, + NO_MAN, NO_PROFILE, and NO_WARNS variables is now an error. Update + your Makefiles and scripts to define MK_=no instead as required. + + One exception to this is that program or library Makefiles should + define MAN to empty rather than setting MK_MAN=no. + 20200108: Clang/LLVM is now the default compiler and LLD the default linker for riscv64. diff --git a/share/mk/bsd.opts.mk b/share/mk/bsd.opts.mk index 8c410617a33..961508571b4 100644 --- a/share/mk/bsd.opts.mk +++ b/share/mk/bsd.opts.mk @@ -100,7 +100,7 @@ __DEFAULT_DEPENDENT_OPTIONS = \ PROFILE \ WARNS .if defined(NO_${var}) -.warning "NO_${var} is defined, but deprecated. Please use MK_${var}=no instead." +.error "NO_${var} is defined, but deprecated. Please use MK_${var}=no instead." MK_${var}:=no .endif .endfor From 7ee7e40976b251624153c0d5ee3eb7c4195ab343 Mon Sep 17 00:00:00 2001 From: Alan Somers Date: Wed, 12 Feb 2020 18:11:07 +0000 Subject: [PATCH 129/144] fusefs: fix some memory leaks in the tests. Oddly, most of these were not detected by Coverity. Reported by: Coverity (one of them, anyway) Coverity CID: 1404490 MFC after: 2 weeks --- tests/sys/fs/fusefs/read.cc | 3 +++ tests/sys/fs/fusefs/write.cc | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/tests/sys/fs/fusefs/read.cc b/tests/sys/fs/fusefs/read.cc index a333b9f15a3..22a26c2701f 100644 --- a/tests/sys/fs/fusefs/read.cc +++ b/tests/sys/fs/fusefs/read.cc @@ -778,6 +778,7 @@ TEST_F(Read, cache_block) ASSERT_EQ(bufsize, read(fd, buf, bufsize)) << strerror(errno); ASSERT_EQ(0, memcmp(buf, contents1, bufsize)); leak(fd); + free(contents); } /* Reading with sendfile should work (though it obviously won't be 0-copy) */ @@ -899,6 +900,8 @@ TEST_P(ReadAhead, readahead) { ASSERT_EQ(0, memcmp(rbuf, contents, bufsize)); leak(fd); + free(rbuf); + free(contents); } INSTANTIATE_TEST_CASE_P(RA, ReadAhead, diff --git a/tests/sys/fs/fusefs/write.cc b/tests/sys/fs/fusefs/write.cc index 4b4a2f7c4f3..506fefaa071 100644 --- a/tests/sys/fs/fusefs/write.cc +++ b/tests/sys/fs/fusefs/write.cc @@ -300,6 +300,8 @@ TEST_F(Write, append_to_cached) /* Write the new data. There should be no more read operations */ ASSERT_EQ(BUFSIZE, write(fd, CONTENTS, BUFSIZE)) << strerror(errno); leak(fd); + free(oldbuf); + free(oldcontents); } TEST_F(Write, append_direct_io) @@ -782,6 +784,8 @@ TEST_F(WriteCluster, clustering) << strerror(errno); } close(fd); + free(wbuf2x); + free(wbuf); } /* @@ -825,6 +829,7 @@ TEST_F(WriteCluster, DISABLED_cluster_write_err) << strerror(errno); } close(fd); + free(wbuf); } /* From e953765f1579c4bc45a150d4ff7fdad59ec95010 Mon Sep 17 00:00:00 2001 From: Ed Maste Date: Wed, 12 Feb 2020 18:59:00 +0000 Subject: [PATCH 130/144] Allow getloginclass in capability mode As with e.g. getgroups and getlogin it allows querying current process credential state. Reported by: sigsys@gmail.com via kevans Sponsored by: The FreeBSD Foundation --- sys/kern/capabilities.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/sys/kern/capabilities.conf b/sys/kern/capabilities.conf index e67475e8e8d..0017e218e06 100644 --- a/sys/kern/capabilities.conf +++ b/sys/kern/capabilities.conf @@ -288,6 +288,7 @@ getitimer getgid getgroups getlogin +getloginclass ## ## Allow querying certain trivial global state. From fe16bad415a3ca1538fd3f668b2333098d84d7cf Mon Sep 17 00:00:00 2001 From: Ed Maste Date: Wed, 12 Feb 2020 19:05:10 +0000 Subject: [PATCH 131/144] regen sysent after r357831, r357838 Capability mode changes allowing fdatasync and getloginclass. Sponsored by: The FreeBSD Foundation --- sys/compat/freebsd32/freebsd32_sysent.c | 4 ++-- sys/kern/init_sysent.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sys/compat/freebsd32/freebsd32_sysent.c b/sys/compat/freebsd32/freebsd32_sysent.c index b703c0fa1e3..5f29aec0cc4 100644 --- a/sys/compat/freebsd32/freebsd32_sysent.c +++ b/sys/compat/freebsd32/freebsd32_sysent.c @@ -598,7 +598,7 @@ struct sysent freebsd32_sysent[] = { { AS(pdgetpid_args), (sy_call_t *)sys_pdgetpid, AUE_PDGETPID, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 520 = pdgetpid */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 521 = pdwait4 */ { AS(freebsd32_pselect_args), (sy_call_t *)freebsd32_pselect, AUE_SELECT, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 522 = freebsd32_pselect */ - { AS(getloginclass_args), (sy_call_t *)sys_getloginclass, AUE_GETLOGINCLASS, NULL, 0, 0, 0, SY_THR_STATIC }, /* 523 = getloginclass */ + { AS(getloginclass_args), (sy_call_t *)sys_getloginclass, AUE_GETLOGINCLASS, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 523 = getloginclass */ { AS(setloginclass_args), (sy_call_t *)sys_setloginclass, AUE_SETLOGINCLASS, NULL, 0, 0, 0, SY_THR_STATIC }, /* 524 = setloginclass */ { AS(rctl_get_racct_args), (sy_call_t *)sys_rctl_get_racct, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 525 = rctl_get_racct */ { AS(rctl_get_rules_args), (sy_call_t *)sys_rctl_get_rules, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 526 = rctl_get_rules */ @@ -635,7 +635,7 @@ struct sysent freebsd32_sysent[] = { { AS(freebsd32_utimensat_args), (sy_call_t *)freebsd32_utimensat, AUE_FUTIMESAT, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 547 = freebsd32_utimensat */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 548 = obsolete numa_getaffinity */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 549 = obsolete numa_setaffinity */ - { AS(fdatasync_args), (sy_call_t *)sys_fdatasync, AUE_FSYNC, NULL, 0, 0, 0, SY_THR_STATIC }, /* 550 = fdatasync */ + { AS(fdatasync_args), (sy_call_t *)sys_fdatasync, AUE_FSYNC, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 550 = fdatasync */ { AS(freebsd32_fstat_args), (sy_call_t *)freebsd32_fstat, AUE_FSTAT, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 551 = freebsd32_fstat */ { AS(freebsd32_fstatat_args), (sy_call_t *)freebsd32_fstatat, AUE_FSTATAT, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 552 = freebsd32_fstatat */ { AS(freebsd32_fhstat_args), (sy_call_t *)freebsd32_fhstat, AUE_FHSTAT, NULL, 0, 0, 0, SY_THR_STATIC }, /* 553 = freebsd32_fhstat */ diff --git a/sys/kern/init_sysent.c b/sys/kern/init_sysent.c index edb76ee279a..7ae26621d1e 100644 --- a/sys/kern/init_sysent.c +++ b/sys/kern/init_sysent.c @@ -578,7 +578,7 @@ struct sysent sysent[] = { { AS(pdgetpid_args), (sy_call_t *)sys_pdgetpid, AUE_PDGETPID, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 520 = pdgetpid */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 521 = pdwait4 */ { AS(pselect_args), (sy_call_t *)sys_pselect, AUE_SELECT, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 522 = pselect */ - { AS(getloginclass_args), (sy_call_t *)sys_getloginclass, AUE_GETLOGINCLASS, NULL, 0, 0, 0, SY_THR_STATIC }, /* 523 = getloginclass */ + { AS(getloginclass_args), (sy_call_t *)sys_getloginclass, AUE_GETLOGINCLASS, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 523 = getloginclass */ { AS(setloginclass_args), (sy_call_t *)sys_setloginclass, AUE_SETLOGINCLASS, NULL, 0, 0, 0, SY_THR_STATIC }, /* 524 = setloginclass */ { AS(rctl_get_racct_args), (sy_call_t *)sys_rctl_get_racct, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 525 = rctl_get_racct */ { AS(rctl_get_rules_args), (sy_call_t *)sys_rctl_get_rules, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 526 = rctl_get_rules */ @@ -605,7 +605,7 @@ struct sysent sysent[] = { { AS(utimensat_args), (sy_call_t *)sys_utimensat, AUE_FUTIMESAT, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 547 = utimensat */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 548 = obsolete numa_getaffinity */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 549 = obsolete numa_setaffinity */ - { AS(fdatasync_args), (sy_call_t *)sys_fdatasync, AUE_FSYNC, NULL, 0, 0, 0, SY_THR_STATIC }, /* 550 = fdatasync */ + { AS(fdatasync_args), (sy_call_t *)sys_fdatasync, AUE_FSYNC, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 550 = fdatasync */ { AS(fstat_args), (sy_call_t *)sys_fstat, AUE_FSTAT, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 551 = fstat */ { AS(fstatat_args), (sy_call_t *)sys_fstatat, AUE_FSTATAT, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 552 = fstatat */ { AS(fhstat_args), (sy_call_t *)sys_fhstat, AUE_FHSTAT, NULL, 0, 0, 0, SY_THR_STATIC }, /* 553 = fhstat */ From b30ab6d8fea4029be012f4becdf0f5537957079f Mon Sep 17 00:00:00 2001 From: Kyle Evans Date: Wed, 12 Feb 2020 19:06:34 +0000 Subject: [PATCH 132/144] sys/kern sysent: re-add dependency on capabilities.conf r356868 inadvertently removed this, so changes to capabilities.conf were no longer considered for being outdated. --- sys/kern/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/sys/kern/Makefile b/sys/kern/Makefile index 453a6d8251c..5e14eb2d9ed 100644 --- a/sys/kern/Makefile +++ b/sys/kern/Makefile @@ -3,6 +3,7 @@ # # Makefile for init_sysent +SRCS+= capabilities.conf SYSENT_CONF= GENERATED= init_sysent.c \ syscalls.c \ From 469635f600190be2bd0f95776196cb33d01c71bd Mon Sep 17 00:00:00 2001 From: Mateusz Piotrowski <0mp@FreeBSD.org> Date: Wed, 12 Feb 2020 20:06:41 +0000 Subject: [PATCH 133/144] diff.1: Fix style & document -y as extension to POSIX - Long options must be stylized with the Fl macro as well. Reviewed by: bapt Approved by: bcr (mentor) Differential Revision: https://reviews.freebsd.org/D23642 --- usr.bin/diff/diff.1 | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/usr.bin/diff/diff.1 b/usr.bin/diff/diff.1 index 3dc2cb271eb..47d55a4ddfc 100644 --- a/usr.bin/diff/diff.1 +++ b/usr.bin/diff/diff.1 @@ -30,7 +30,7 @@ .\" @(#)diff.1 8.1 (Berkeley) 6/30/93 .\" $FreeBSD$ .\" -.Dd February 7, 2020 +.Dd February 12, 2020 .Dt DIFF 1 .Os .Sh NAME @@ -184,17 +184,17 @@ .Ar dir1 dir2 .Nm diff .Op Fl aBbditwW -.Op --expand-tabs -.Op --ignore-all-blanks -.Op --ignore-blank-lines -.Op --ignore-case -.Op --minimal -.Op --no-ignore-file-name-case -.Op --strip-trailing-cr -.Op --suppress-common-lines -.Op --tabsize -.Op --text -.Op --width +.Op Fl -expand-tabs +.Op Fl -ignore-all-blanks +.Op Fl -ignore-blank-lines +.Op Fl -ignore-case +.Op Fl -minimal +.Op Fl -no-ignore-file-name-case +.Op Fl -strip-trailing-cr +.Op Fl -suppress-common-lines +.Op Fl -tabsize +.Op Fl -text +.Op Fl -width .Fl y | Fl -side-by-side .Ar file1 file2 .Sh DESCRIPTION @@ -637,7 +637,7 @@ utility is compliant with the specification. .Pp The flags -.Op Fl aDdIiLlNnPpqSsTtwXx +.Op Fl aDdIiLlNnPpqSsTtwXxy are extensions to that specification. .Sh HISTORY A From 9fd552ada109eb579e5829001a95cb11f46fd487 Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Wed, 12 Feb 2020 20:18:29 +0000 Subject: [PATCH 134/144] netipsec: fix a mismatched uma_zfree -> uma_zfree_pcpu PR: 244077 Reported by: lwhsu Fixes: r357805 ("amd64: store per-cpu allocations subtracted by __pcpu") --- sys/netipsec/key.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/netipsec/key.c b/sys/netipsec/key.c index 5d03036bb17..0be84fb93b2 100644 --- a/sys/netipsec/key.c +++ b/sys/netipsec/key.c @@ -3128,7 +3128,7 @@ key_delsav(struct secasvar *sav) if ((sav->flags & SADB_X_EXT_F_CLONED) == 0) { mtx_destroy(sav->lock); free(sav->lock, M_IPSEC_MISC); - uma_zfree(V_key_lft_zone, sav->lft_c); + uma_zfree_pcpu(V_key_lft_zone, sav->lft_c); } free(sav, M_IPSEC_SA); } From 99a7fa92687f38bdc9798e2f79fc911ca06a8cdb Mon Sep 17 00:00:00 2001 From: "Alexander V. Chernikov" Date: Wed, 12 Feb 2020 21:16:30 +0000 Subject: [PATCH 135/144] * Fix flaking lle tests by filtering out non-relevant rtsock messages. * Consistently use RTM_DECLARE_ROOT_TEST() macro. * Temporarily remove iftype validation from IPv6 lle notifications. Reported by: kp --- tests/sys/net/routing/test_rtsock_lladdr.c | 101 +++++---------------- 1 file changed, 24 insertions(+), 77 deletions(-) diff --git a/tests/sys/net/routing/test_rtsock_lladdr.c b/tests/sys/net/routing/test_rtsock_lladdr.c index 978401b2b8b..96980d4b19f 100644 --- a/tests/sys/net/routing/test_rtsock_lladdr.c +++ b/tests/sys/net/routing/test_rtsock_lladdr.c @@ -98,14 +98,18 @@ prepare_route_message(struct rt_msghdr *rtm, int cmd, struct sockaddr *dst, #define DESCRIBE_ROOT_TEST(_msg) config_describe_root_test(tc, _msg) #define CLEANUP_AFTER_TEST config_generic_cleanup(config_setup(tc)) - -ATF_TC_WITH_CLEANUP(rtm_add_v6_ll_lle_success); -ATF_TC_HEAD(rtm_add_v6_ll_lle_success, tc) -{ - - DESCRIBE_ROOT_TEST("Tests addition of link-local IPv6 ND entry"); +#define RTM_DECLARE_ROOT_TEST(_name, _descr) \ +ATF_TC_WITH_CLEANUP(_name); \ +ATF_TC_HEAD(_name, tc) \ +{ \ + DESCRIBE_ROOT_TEST(_descr); \ +} \ +ATF_TC_CLEANUP(_name, tc) \ +{ \ + CLEANUP_AFTER_TEST; \ } +RTM_DECLARE_ROOT_TEST(rtm_add_v6_ll_lle_success, "Tests addition of link-local IPv6 ND entry"); ATF_TC_BODY(rtm_add_v6_ll_lle_success, tc) { DECLARE_TEST_VARS; @@ -134,7 +138,7 @@ ATF_TC_BODY(rtm_add_v6_ll_lle_success, tc) * af=link len=54 sdl_index=3 if_name=tap4242 addr=52:54:00:14:E3:10 */ - rtm = rtsock_read_rtm(c->rtsock_fd, buffer, sizeof(buffer)); + rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); sa = rtsock_find_rtm_sa(rtm, RTA_DST); ret = sa_equal_msg(sa, (struct sockaddr *)&sin6, msg, sizeof(msg)); @@ -145,23 +149,15 @@ ATF_TC_BODY(rtm_add_v6_ll_lle_success, tc) ret = sa_equal_msg_flags(sa, (struct sockaddr *)ðer, msg, sizeof(msg), sa_flags); RTSOCK_ATF_REQUIRE_MSG(rtm, ret != 0, "GATEWAY sa diff: %s", msg); +#if 0 + /* Disable the check until https://reviews.freebsd.org/D22003 merge */ /* Some additional checks to verify kernel has filled in interface data */ struct sockaddr_dl *sdl = (struct sockaddr_dl *)sa; RTSOCK_ATF_REQUIRE_MSG(rtm, sdl->sdl_type > 0, "sdl_type not set"); +#endif } -ATF_TC_CLEANUP(rtm_add_v6_ll_lle_success, tc) -{ - CLEANUP_AFTER_TEST; -} - -ATF_TC_WITH_CLEANUP(rtm_add_v6_gu_lle_success); -ATF_TC_HEAD(rtm_add_v6_gu_lle_success, tc) -{ - - DESCRIBE_ROOT_TEST("Tests addition of global IPv6 ND entry"); -} - +RTM_DECLARE_ROOT_TEST(rtm_add_v6_gu_lle_success, "Tests addition of global IPv6 ND entry"); ATF_TC_BODY(rtm_add_v6_gu_lle_success, tc) { DECLARE_TEST_VARS; @@ -194,7 +190,7 @@ ATF_TC_BODY(rtm_add_v6_gu_lle_success, tc) /* XXX: where is uRPF?! this should fail */ - rtm = rtsock_read_rtm(c->rtsock_fd, buffer, sizeof(buffer)); + rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); sa = rtsock_find_rtm_sa(rtm, RTA_DST); ret = sa_equal_msg(sa, (struct sockaddr *)&sin6, msg, sizeof(msg)); @@ -205,23 +201,15 @@ ATF_TC_BODY(rtm_add_v6_gu_lle_success, tc) ret = sa_equal_msg_flags(sa, (struct sockaddr *)ðer, msg, sizeof(msg), sa_flags); RTSOCK_ATF_REQUIRE_MSG(rtm, ret != 0, "GATEWAY sa diff: %s", msg); +#if 0 + /* Disable the check until https://reviews.freebsd.org/D22003 merge */ /* Some additional checks to verify kernel has filled in interface data */ struct sockaddr_dl *sdl = (struct sockaddr_dl *)sa; RTSOCK_ATF_REQUIRE_MSG(rtm, sdl->sdl_type > 0, "sdl_type not set"); +#endif } -ATF_TC_CLEANUP(rtm_add_v6_gu_lle_success, tc) -{ - CLEANUP_AFTER_TEST; -} - -ATF_TC_WITH_CLEANUP(rtm_add_v4_gu_lle_success); -ATF_TC_HEAD(rtm_add_v4_gu_lle_success, tc) -{ - - DESCRIBE_ROOT_TEST("Tests addition of IPv4 ARP entry"); -} - +RTM_DECLARE_ROOT_TEST(rtm_add_v4_gu_lle_success, "Tests addition of IPv4 ARP entry"); ATF_TC_BODY(rtm_add_v4_gu_lle_success, tc) { DECLARE_TEST_VARS; @@ -250,7 +238,7 @@ ATF_TC_BODY(rtm_add_v4_gu_lle_success, tc) * af=link len=54 sdl_index=3 if_name=tap4242 addr=52:54:00:14:E3:10 */ - rtm = rtsock_read_rtm(c->rtsock_fd, buffer, sizeof(buffer)); + rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); sa = rtsock_find_rtm_sa(rtm, RTA_DST); ret = sa_equal_msg(sa, (struct sockaddr *)&sin, msg, sizeof(msg)); @@ -266,18 +254,7 @@ ATF_TC_BODY(rtm_add_v4_gu_lle_success, tc) */ } -ATF_TC_CLEANUP(rtm_add_v4_gu_lle_success, tc) -{ - CLEANUP_AFTER_TEST; -} - -ATF_TC_WITH_CLEANUP(rtm_del_v6_ll_lle_success); -ATF_TC_HEAD(rtm_del_v6_ll_lle_success, tc) -{ - - DESCRIBE_ROOT_TEST("Tests removal of link-local IPv6 ND entry"); -} - +RTM_DECLARE_ROOT_TEST(rtm_del_v6_ll_lle_success, "Tests removal of link-local IPv6 ND entry"); ATF_TC_BODY(rtm_del_v6_ll_lle_success, tc) { DECLARE_TEST_VARS; @@ -323,18 +300,7 @@ ATF_TC_BODY(rtm_del_v6_ll_lle_success, tc) */ } -ATF_TC_CLEANUP(rtm_del_v6_ll_lle_success, tc) -{ - CLEANUP_AFTER_TEST; -} - -ATF_TC_WITH_CLEANUP(rtm_del_v6_gu_lle_success); -ATF_TC_HEAD(rtm_del_v6_gu_lle_success, tc) -{ - - DESCRIBE_ROOT_TEST("Tests removal of global IPv6 ND entry"); -} - +RTM_DECLARE_ROOT_TEST(rtm_del_v6_gu_lle_success, "Tests removal of global IPv6 ND entry"); ATF_TC_BODY(rtm_del_v6_gu_lle_success, tc) { DECLARE_TEST_VARS; @@ -380,18 +346,7 @@ ATF_TC_BODY(rtm_del_v6_gu_lle_success, tc) */ } -ATF_TC_CLEANUP(rtm_del_v6_gu_lle_success, tc) -{ - CLEANUP_AFTER_TEST; -} - -ATF_TC_WITH_CLEANUP(rtm_del_v4_gu_lle_success); -ATF_TC_HEAD(rtm_del_v4_gu_lle_success, tc) -{ - - DESCRIBE_ROOT_TEST("Tests removal of IPv4 ARP entry"); -} - +RTM_DECLARE_ROOT_TEST(rtm_del_v4_gu_lle_success, "Tests removal of IPv4 ARP entry"); ATF_TC_BODY(rtm_del_v4_gu_lle_success, tc) { DECLARE_TEST_VARS; @@ -413,8 +368,6 @@ ATF_TC_BODY(rtm_del_v4_gu_lle_success, tc) rtsock_send_rtm(c->rtsock_fd, rtm); - rtsock_read_rtm(c->rtsock_fd, buffer, sizeof(buffer)); - /* We successfully added an entry, let's try to remove it. */ prepare_route_message(rtm, RTM_DELETE, (struct sockaddr *)&sin, (struct sockaddr *)ðer); @@ -438,12 +391,6 @@ ATF_TC_BODY(rtm_del_v4_gu_lle_success, tc) */ } -ATF_TC_CLEANUP(rtm_del_v4_gu_lle_success, tc) -{ - CLEANUP_AFTER_TEST; -} - - ATF_TP_ADD_TCS(tp) { ATF_TP_ADD_TC(tp, rtm_add_v6_ll_lle_success); From 6c4a4f1bc2ebeecd8f5bb2d4eaf709df29730dd5 Mon Sep 17 00:00:00 2001 From: Ed Maste Date: Wed, 12 Feb 2020 21:52:10 +0000 Subject: [PATCH 136/144] addr2line: Handle DW_AT_ranges in compile units Based on original submission by Marat Radchenko in ELF Tool Chain ticket #545, rebased and updated by Tiger Gao. PR: 217736 Submitted by: Marat Radchenko Submitted by: Tiger Gao Reviewed by: markj MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D23501 --- contrib/elftoolchain/addr2line/addr2line.c | 147 +++++++++++++++------ 1 file changed, 106 insertions(+), 41 deletions(-) diff --git a/contrib/elftoolchain/addr2line/addr2line.c b/contrib/elftoolchain/addr2line/addr2line.c index e19bd849887..797c2a462fd 100644 --- a/contrib/elftoolchain/addr2line/addr2line.c +++ b/contrib/elftoolchain/addr2line/addr2line.c @@ -65,6 +65,7 @@ struct CU { Dwarf_Signed nsrcfiles; STAILQ_HEAD(, Func) funclist; Dwarf_Die die; + Dwarf_Debug dbg; }; static struct option longopts[] = { @@ -345,7 +346,8 @@ cont_search: collect_func(dbg, ret_die, parent, cu); /* Cleanup */ - dwarf_dealloc(dbg, die, DW_DLA_DIE); + if (die != cu->die) + dwarf_dealloc(dbg, die, DW_DLA_DIE); if (abst_die != NULL) dwarf_dealloc(dbg, abst_die, DW_DLA_DIE); @@ -411,6 +413,102 @@ culookup(Dwarf_Unsigned addr) return (NULL); } +/* + * Check whether addr falls into range(s) of current CU, and save current CU + * to lookup tree if so. + */ +static int +check_range(Dwarf_Debug dbg, Dwarf_Die die, Dwarf_Unsigned addr, + struct CU **cu) +{ + Dwarf_Error de; + Dwarf_Unsigned addr_base, lopc, hipc; + Dwarf_Off ranges_off; + Dwarf_Signed ranges_cnt; + Dwarf_Ranges *ranges; + int i, ret; + bool in_range; + + addr_base = 0; + ranges = NULL; + ranges_cnt = 0; + in_range = false; + + ret = dwarf_attrval_unsigned(die, DW_AT_ranges, &ranges_off, &de); + if (ret == DW_DLV_NO_ENTRY) { + if (dwarf_attrval_unsigned(die, DW_AT_low_pc, &lopc, &de) == + DW_DLV_OK) { + if (lopc == curlopc) + return (DW_DLV_ERROR); + if (dwarf_attrval_unsigned(die, DW_AT_high_pc, &hipc, + &de) == DW_DLV_OK) { + /* + * Check if the address falls into the PC + * range of this CU. + */ + if (handle_high_pc(die, lopc, &hipc) != + DW_DLV_OK) + return (DW_DLV_ERROR); + } else { + /* Assume ~0ULL if DW_AT_high_pc not present */ + hipc = ~0ULL; + } + + if (addr >= lopc && addr < hipc) { + in_range = true; + } + } + } else if (ret == DW_DLV_OK) { + ret = dwarf_get_ranges(dbg, ranges_off, &ranges, + &ranges_cnt, NULL, &de); + if (ret != DW_DLV_OK) + return (ret); + + if (!ranges || ranges_cnt <= 0) + return (DW_DLV_ERROR); + + for (i = 0; i < ranges_cnt; i++) { + if (ranges[i].dwr_type == DW_RANGES_END) + return (DW_DLV_NO_ENTRY); + + if (ranges[i].dwr_type == + DW_RANGES_ADDRESS_SELECTION) { + addr_base = ranges[i].dwr_addr2; + continue; + } + + /* DW_RANGES_ENTRY */ + lopc = ranges[i].dwr_addr1 + addr_base; + hipc = ranges[i].dwr_addr2 + addr_base; + + if (lopc == curlopc) + return (DW_DLV_ERROR); + + if (addr >= lopc && addr < hipc){ + in_range = true; + break; + } + } + } else { + return (DW_DLV_ERROR); + } + + if (in_range) { + if ((*cu = calloc(1, sizeof(struct CU))) == NULL) + err(EXIT_FAILURE, "calloc"); + (*cu)->lopc = lopc; + (*cu)->hipc = hipc; + (*cu)->die = die; + (*cu)->dbg = dbg; + STAILQ_INIT(&(*cu)->funclist); + RB_INSERT(cutree, &cuhead, *cu); + curlopc = lopc; + return (DW_DLV_OK); + } else { + return (DW_DLV_NO_ENTRY); + } +} + static void translate(Dwarf_Debug dbg, Elf *e, const char* addrstr) { @@ -418,10 +516,9 @@ translate(Dwarf_Debug dbg, Elf *e, const char* addrstr) Dwarf_Line *lbuf; Dwarf_Error de; Dwarf_Half tag; - Dwarf_Unsigned lopc, hipc, addr, lineno, plineno; + Dwarf_Unsigned addr, lineno, plineno; Dwarf_Signed lcount; Dwarf_Addr lineaddr, plineaddr; - Dwarf_Off off; struct CU *cu; struct Func *f; const char *funcname; @@ -439,6 +536,7 @@ translate(Dwarf_Debug dbg, Elf *e, const char* addrstr) cu = culookup(addr); if (cu != NULL) { die = cu->die; + dbg = cu->dbg; goto status_ok; } @@ -477,44 +575,11 @@ translate(Dwarf_Debug dbg, Elf *e, const char* addrstr) warnx("could not find DW_TAG_compile_unit die"); goto next_cu; } - if (dwarf_attrval_unsigned(die, DW_AT_low_pc, &lopc, &de) == - DW_DLV_OK) { - if (lopc == curlopc) - goto out; - if (dwarf_attrval_unsigned(die, DW_AT_high_pc, &hipc, - &de) == DW_DLV_OK) { - /* - * Check if the address falls into the PC - * range of this CU. - */ - if (handle_high_pc(die, lopc, &hipc) != - DW_DLV_OK) - goto out; - } else { - /* Assume ~0ULL if DW_AT_high_pc not present */ - hipc = ~0ULL; - } - - if (dwarf_dieoffset(die, &off, &de) != DW_DLV_OK) { - warnx("dwarf_dieoffset failed: %s", - dwarf_errmsg(de)); - goto out; - } - - if (addr >= lopc && addr < hipc) { - if ((cu = calloc(1, sizeof(*cu))) == NULL) - err(EXIT_FAILURE, "calloc"); - cu->off = off; - cu->lopc = lopc; - cu->hipc = hipc; - cu->die = die; - STAILQ_INIT(&cu->funclist); - RB_INSERT(cutree, &cuhead, cu); - - curlopc = lopc; - break; - } - } + ret = check_range(dbg, die, addr, &cu); + if (ret == DW_DLV_OK) + break; + if (ret == DW_DLV_ERROR) + goto out; next_cu: if (die != NULL) { dwarf_dealloc(dbg, die, DW_DLA_DIE); From 6b197e58f60021c7a9ce920548928776062084ed Mon Sep 17 00:00:00 2001 From: Kyle Evans Date: Wed, 12 Feb 2020 22:29:08 +0000 Subject: [PATCH 137/144] efiloader: don't execute hooks when setting currdev/loaddev We still need to set the hooks to prevent improper manipulations thereafter at the loader prompt, but as it is we're actively preventing loaddev from being set correctly in some circumstances (ZFS in particular) and doing more work than needed with currdev -- that hook in particular validates it as a correct device, which we can assume isn't needed in this context. Reviewed by: imp, sigsys@gmail.com Submitted/Diagnosed by: sigsys@gmail.com Differential Revision: https://reviews.freebsd.org/D23390 --- stand/efi/loader/main.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/stand/efi/loader/main.c b/stand/efi/loader/main.c index 4f736b9f30e..700ad6bec5a 100644 --- a/stand/efi/loader/main.c +++ b/stand/efi/loader/main.c @@ -180,8 +180,17 @@ static void set_currdev(const char *devname) { - env_setenv("currdev", EV_VOLATILE, devname, efi_setcurrdev, env_nounset); - env_setenv("loaddev", EV_VOLATILE, devname, env_noset, env_nounset); + /* + * Don't execute hooks here; we may need to try setting these more than + * once here if we're probing for the ZFS pool we're supposed to boot. + * The currdev hook is intended to just validate user input anyways, + * while the loaddev hook makes it immutable once we've determined what + * the proper currdev is. + */ + env_setenv("currdev", EV_VOLATILE | EV_NOHOOK, devname, efi_setcurrdev, + env_nounset); + env_setenv("loaddev", EV_VOLATILE | EV_NOHOOK, devname, env_noset, + env_nounset); } static void From 66c662b00566ec0162e80d39b8f8c17df1327214 Mon Sep 17 00:00:00 2001 From: Vincenzo Maffione Date: Wed, 12 Feb 2020 22:44:18 +0000 Subject: [PATCH 138/144] bhyve: move virtio-net header processing to pci_virtio_net This patch cleans up the API between the net frontends (e1000, virtio-net) and the net backends (tap and netmap). We move the virtio-net header stripping/prepending to the virtio-net code, where this functionality belongs. In this way, the netbe_send() and netbe_recv() signatures can have const struct iov * rather than struct iov *. Reviewed by: grehan, bcr, aleksandr.fedorov@itglobal.com MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D23342 --- usr.sbin/bhyve/net_backends.c | 95 ++++------------- usr.sbin/bhyve/net_backends.h | 5 +- usr.sbin/bhyve/net_utils.c | 20 ++-- usr.sbin/bhyve/pci_e82545.c | 32 ++++-- usr.sbin/bhyve/pci_virtio_net.c | 178 +++++++++++++++++++++++++------- 5 files changed, 197 insertions(+), 133 deletions(-) diff --git a/usr.sbin/bhyve/net_backends.c b/usr.sbin/bhyve/net_backends.c index 00ac5752320..dcb5a27aa4a 100644 --- a/usr.sbin/bhyve/net_backends.c +++ b/usr.sbin/bhyve/net_backends.c @@ -99,7 +99,8 @@ struct net_backend { * vector provided by the caller has 'iovcnt' elements and contains * the packet to send. */ - ssize_t (*send)(struct net_backend *be, struct iovec *iov, int iovcnt); + ssize_t (*send)(struct net_backend *be, const struct iovec *iov, + int iovcnt); /* * Called to receive a packet from the backend. When the function @@ -108,7 +109,8 @@ struct net_backend { * The function returns 0 if the backend doesn't have a new packet to * receive. */ - ssize_t (*recv)(struct net_backend *be, struct iovec *iov, int iovcnt); + ssize_t (*recv)(struct net_backend *be, const struct iovec *iov, + int iovcnt); /* * Ask the backend to enable or disable receive operation in the @@ -238,13 +240,13 @@ error: * Called to send a buffer chain out to the tap device */ static ssize_t -tap_send(struct net_backend *be, struct iovec *iov, int iovcnt) +tap_send(struct net_backend *be, const struct iovec *iov, int iovcnt) { return (writev(be->fd, iov, iovcnt)); } static ssize_t -tap_recv(struct net_backend *be, struct iovec *iov, int iovcnt) +tap_recv(struct net_backend *be, const struct iovec *iov, int iovcnt) { ssize_t ret; @@ -458,7 +460,7 @@ netmap_cleanup(struct net_backend *be) } static ssize_t -netmap_send(struct net_backend *be, struct iovec *iov, +netmap_send(struct net_backend *be, const struct iovec *iov, int iovcnt) { struct netmap_priv *priv = (struct netmap_priv *)be->opaque; @@ -538,7 +540,7 @@ txsync: } static ssize_t -netmap_recv(struct net_backend *be, struct iovec *iov, int iovcnt) +netmap_recv(struct net_backend *be, const struct iovec *iov, int iovcnt) { struct netmap_priv *priv = (struct netmap_priv *)be->opaque; struct netmap_slot *slot = NULL; @@ -749,42 +751,10 @@ netbe_set_cap(struct net_backend *be, uint64_t features, return (ret); } -static __inline struct iovec * -iov_trim(struct iovec *iov, int *iovcnt, unsigned int tlen) -{ - struct iovec *riov; - - /* XXX short-cut: assume first segment is >= tlen */ - assert(iov[0].iov_len >= tlen); - - iov[0].iov_len -= tlen; - if (iov[0].iov_len == 0) { - assert(*iovcnt > 1); - *iovcnt -= 1; - riov = &iov[1]; - } else { - iov[0].iov_base = (void *)((uintptr_t)iov[0].iov_base + tlen); - riov = &iov[0]; - } - - return (riov); -} - ssize_t -netbe_send(struct net_backend *be, struct iovec *iov, int iovcnt) +netbe_send(struct net_backend *be, const struct iovec *iov, int iovcnt) { - assert(be != NULL); - if (be->be_vnet_hdr_len != be->fe_vnet_hdr_len) { - /* - * The frontend uses a virtio-net header, but the backend - * does not. We ignore it (as it must be all zeroes) and - * strip it. - */ - assert(be->be_vnet_hdr_len == 0); - iov = iov_trim(iov, &iovcnt, be->fe_vnet_hdr_len); - } - return (be->send(be, iov, iovcnt)); } @@ -794,46 +764,10 @@ netbe_send(struct net_backend *be, struct iovec *iov, int iovcnt) * the length of the packet just read. Return -1 in case of errors. */ ssize_t -netbe_recv(struct net_backend *be, struct iovec *iov, int iovcnt) +netbe_recv(struct net_backend *be, const struct iovec *iov, int iovcnt) { - /* Length of prepended virtio-net header. */ - unsigned int hlen = be->fe_vnet_hdr_len; - int ret; - assert(be != NULL); - - if (hlen && hlen != be->be_vnet_hdr_len) { - /* - * The frontend uses a virtio-net header, but the backend - * does not. We need to prepend a zeroed header. - */ - struct virtio_net_rxhdr *vh; - - assert(be->be_vnet_hdr_len == 0); - - /* - * Get a pointer to the rx header, and use the - * data immediately following it for the packet buffer. - */ - vh = iov[0].iov_base; - iov = iov_trim(iov, &iovcnt, hlen); - - /* - * The only valid field in the rx packet header is the - * number of buffers if merged rx bufs were negotiated. - */ - memset(vh, 0, hlen); - if (hlen == VNET_HDR_LEN) { - vh->vrh_bufs = 1; - } - } - - ret = be->recv(be, iov, iovcnt); - if (ret > 0) { - ret += hlen; - } - - return (ret); + return (be->recv(be, iov, iovcnt)); } /* @@ -871,3 +805,10 @@ netbe_rx_enable(struct net_backend *be) return be->recv_enable(be); } + +size_t +netbe_get_vnet_hdr_len(struct net_backend *be) +{ + + return (be->be_vnet_hdr_len); +} diff --git a/usr.sbin/bhyve/net_backends.h b/usr.sbin/bhyve/net_backends.h index b27f715164a..de80692f148 100644 --- a/usr.sbin/bhyve/net_backends.h +++ b/usr.sbin/bhyve/net_backends.h @@ -43,8 +43,9 @@ void netbe_cleanup(net_backend_t *be); uint64_t netbe_get_cap(net_backend_t *be); int netbe_set_cap(net_backend_t *be, uint64_t cap, unsigned vnet_hdr_len); -ssize_t netbe_send(net_backend_t *be, struct iovec *iov, int iovcnt); -ssize_t netbe_recv(net_backend_t *be, struct iovec *iov, int iovcnt); +size_t netbe_get_vnet_hdr_len(net_backend_t *be); +ssize_t netbe_send(net_backend_t *be, const struct iovec *iov, int iovcnt); +ssize_t netbe_recv(net_backend_t *be, const struct iovec *iov, int iovcnt); ssize_t netbe_rx_discard(net_backend_t *be); void netbe_rx_disable(net_backend_t *be); void netbe_rx_enable(net_backend_t *be); diff --git a/usr.sbin/bhyve/net_utils.c b/usr.sbin/bhyve/net_utils.c index f3b426de09d..d545d486d51 100644 --- a/usr.sbin/bhyve/net_utils.c +++ b/usr.sbin/bhyve/net_utils.c @@ -44,21 +44,19 @@ int net_parsemac(char *mac_str, uint8_t *mac_addr) { struct ether_addr *ea; - char *tmpstr; char zero_addr[ETHER_ADDR_LEN] = { 0, 0, 0, 0, 0, 0 }; - tmpstr = strsep(&mac_str,"="); + if (mac_str == NULL) + return (EINVAL); - if ((mac_str != NULL) && (!strcmp(tmpstr,"mac"))) { - ea = ether_aton(mac_str); + ea = ether_aton(mac_str); - if (ea == NULL || ETHER_IS_MULTICAST(ea->octet) || - memcmp(ea->octet, zero_addr, ETHER_ADDR_LEN) == 0) { - EPRINTLN("Invalid MAC %s", mac_str); - return (EINVAL); - } else - memcpy(mac_addr, ea->octet, ETHER_ADDR_LEN); - } + if (ea == NULL || ETHER_IS_MULTICAST(ea->octet) || + memcmp(ea->octet, zero_addr, ETHER_ADDR_LEN) == 0) { + EPRINTLN("Invalid MAC %s", mac_str); + return (EINVAL); + } else + memcpy(mac_addr, ea->octet, ETHER_ADDR_LEN); return (0); } diff --git a/usr.sbin/bhyve/pci_e82545.c b/usr.sbin/bhyve/pci_e82545.c index 65d44a6f03a..dca981be85f 100644 --- a/usr.sbin/bhyve/pci_e82545.c +++ b/usr.sbin/bhyve/pci_e82545.c @@ -2328,18 +2328,36 @@ e82545_init(struct vmctx *ctx, struct pci_devinst *pi, char *opts) mac_provided = 0; sc->esc_be = NULL; if (opts != NULL) { - int err; + int err = 0; devname = vtopts = strdup(opts); (void) strsep(&vtopts, ","); - if (vtopts != NULL) { - err = net_parsemac(vtopts, sc->esc_mac.octet); - if (err != 0) { - free(devname); - return (err); + /* + * Parse the list of options in the form + * key1=value1,...,keyN=valueN. + */ + while (vtopts != NULL) { + char *value = vtopts; + char *key; + + key = strsep(&value, "="); + if (value == NULL) + break; + vtopts = value; + (void) strsep(&vtopts, ","); + + if (strcmp(key, "mac") == 0) { + err = net_parsemac(value, sc->esc_mac.octet); + if (err) + break; + mac_provided = 1; } - mac_provided = 1; + } + + if (err) { + free(devname); + return (err); } err = netbe_init(&sc->esc_be, devname, e82545_rx_callback, sc); diff --git a/usr.sbin/bhyve/pci_virtio_net.c b/usr.sbin/bhyve/pci_virtio_net.c index 5da4fe6bbfc..eb35d088d56 100644 --- a/usr.sbin/bhyve/pci_virtio_net.c +++ b/usr.sbin/bhyve/pci_virtio_net.c @@ -117,6 +117,9 @@ struct pci_vtnet_softc { pthread_cond_t tx_cond; int tx_in_progress; + size_t vhdrlen; + size_t be_vhdrlen; + struct virtio_net_config vsc_config; struct virtio_consts vsc_consts; }; @@ -180,6 +183,38 @@ pci_vtnet_reset(void *vsc) pthread_mutex_unlock(&sc->rx_mtx); } +static __inline struct iovec * +iov_trim_hdr(struct iovec *iov, int *iovcnt, unsigned int hlen) +{ + struct iovec *riov; + + if (iov[0].iov_len < hlen) { + /* + * Not enough header space in the first fragment. + * That's not ok for us. + */ + return NULL; + } + + iov[0].iov_len -= hlen; + if (iov[0].iov_len == 0) { + *iovcnt -= 1; + if (*iovcnt == 0) { + /* + * Only space for the header. That's not + * enough for us. + */ + return NULL; + } + riov = &iov[1]; + } else { + iov[0].iov_base = (void *)((uintptr_t)iov[0].iov_base + hlen); + riov = &iov[0]; + } + + return (riov); +} + struct virtio_mrg_rxbuf_info { uint16_t idx; uint16_t pad; @@ -189,31 +224,34 @@ struct virtio_mrg_rxbuf_info { static void pci_vtnet_rx(struct pci_vtnet_softc *sc) { + int prepend_hdr_len = sc->vhdrlen - sc->be_vhdrlen; struct virtio_mrg_rxbuf_info info[VTNET_MAXSEGS]; struct iovec iov[VTNET_MAXSEGS + 1]; struct vqueue_info *vq; - uint32_t cur_iov_bytes; - struct iovec *cur_iov; - uint16_t cur_iov_len; + uint32_t riov_bytes; + struct iovec *riov; + int riov_len; uint32_t ulen; int n_chains; int len; vq = &sc->vsc_queues[VTNET_RXQ]; for (;;) { + struct virtio_net_rxhdr *hdr; + /* * Get a descriptor chain to store the next ingress * packet. In case of mergeable rx buffers, get as * many chains as necessary in order to make room * for a maximum sized LRO packet. */ - cur_iov_bytes = 0; - cur_iov_len = 0; - cur_iov = iov; + riov_bytes = 0; + riov_len = 0; + riov = iov; n_chains = 0; do { - int n = vq_getchain(vq, &info[n_chains].idx, cur_iov, - VTNET_MAXSEGS - cur_iov_len, NULL); + int n = vq_getchain(vq, &info[n_chains].idx, riov, + VTNET_MAXSEGS - riov_len, NULL); if (n == 0) { /* @@ -239,20 +277,42 @@ pci_vtnet_rx(struct pci_vtnet_softc *sc) vq_kick_disable(vq); continue; } - assert(n >= 1 && cur_iov_len + n <= VTNET_MAXSEGS); - cur_iov_len += n; + assert(n >= 1 && riov_len + n <= VTNET_MAXSEGS); + riov_len += n; if (!sc->rx_merge) { n_chains = 1; break; } - info[n_chains].len = (uint32_t)count_iov(cur_iov, n); - cur_iov_bytes += info[n_chains].len; - cur_iov += n; + info[n_chains].len = (uint32_t)count_iov(riov, n); + riov_bytes += info[n_chains].len; + riov += n; n_chains++; - } while (cur_iov_bytes < VTNET_MAX_PKT_LEN && - cur_iov_len < VTNET_MAXSEGS); + } while (riov_bytes < VTNET_MAX_PKT_LEN && + riov_len < VTNET_MAXSEGS); - len = netbe_recv(sc->vsc_be, iov, cur_iov_len); + riov = iov; + hdr = riov[0].iov_base; + if (prepend_hdr_len > 0) { + /* + * The frontend uses a virtio-net header, but the + * backend does not. We need to prepend a zeroed + * header. + */ + riov = iov_trim_hdr(riov, &riov_len, prepend_hdr_len); + if (riov == NULL) { + /* + * The first collected chain is nonsensical, + * as it is not even enough to store the + * virtio-net header. Just drop it. + */ + vq_relchain(vq, info[0].idx, 0); + vq_retchains(vq, n_chains - 1); + continue; + } + memset(hdr, 0, prepend_hdr_len); + } + + len = netbe_recv(sc->vsc_be, riov, riov_len); if (len <= 0) { /* @@ -266,18 +326,18 @@ pci_vtnet_rx(struct pci_vtnet_softc *sc) return; } - ulen = (uint32_t)len; /* avoid too many casts below */ + ulen = (uint32_t)(len + prepend_hdr_len); - /* Publish the used buffers to the guest. */ + /* + * Publish the used buffers to the guest, reporting the + * number of bytes that we wrote. + */ if (!sc->rx_merge) { vq_relchain(vq, info[0].idx, ulen); } else { - struct virtio_net_rxhdr *hdr = iov[0].iov_base; uint32_t iolen; int i = 0; - assert(iov[0].iov_len >= sizeof(*hdr)); - do { iolen = info[i].len; if (iolen > ulen) { @@ -333,6 +393,7 @@ static void pci_vtnet_proctx(struct pci_vtnet_softc *sc, struct vqueue_info *vq) { struct iovec iov[VTNET_MAXSEGS + 1]; + struct iovec *siov = iov; uint16_t idx; ssize_t len; int n; @@ -344,10 +405,34 @@ pci_vtnet_proctx(struct pci_vtnet_softc *sc, struct vqueue_info *vq) n = vq_getchain(vq, &idx, iov, VTNET_MAXSEGS, NULL); assert(n >= 1 && n <= VTNET_MAXSEGS); - len = netbe_send(sc->vsc_be, iov, n); + if (sc->vhdrlen != sc->be_vhdrlen) { + /* + * The frontend uses a virtio-net header, but the backend + * does not. We simply strip the header and ignore it, as + * it should be zero-filled. + */ + siov = iov_trim_hdr(siov, &n, sc->vhdrlen); + } - /* chain is processed, release it and set len */ - vq_relchain(vq, idx, len > 0 ? len : 0); + if (siov == NULL) { + /* The chain is nonsensical. Just drop it. */ + len = 0; + } else { + len = netbe_send(sc->vsc_be, siov, n); + if (len < 0) { + /* + * If send failed, report that 0 bytes + * were read. + */ + len = 0; + } + } + + /* + * Return the processed chain to the guest, reporting + * the number of bytes that we read. + */ + vq_relchain(vq, idx, len); } /* Called on TX kick. */ @@ -466,19 +551,38 @@ pci_vtnet_init(struct vmctx *ctx, struct pci_devinst *pi, char *opts) if (opts != NULL) { char *devname; char *vtopts; - int err; + int err = 0; + /* Get the device name. */ devname = vtopts = strdup(opts); (void) strsep(&vtopts, ","); - if (vtopts != NULL) { - err = net_parsemac(vtopts, sc->vsc_config.mac); - if (err != 0) { - free(devname); - free(sc); - return (err); + /* + * Parse the list of options in the form + * key1=value1,...,keyN=valueN. + */ + while (vtopts != NULL) { + char *value = vtopts; + char *key; + + key = strsep(&value, "="); + if (value == NULL) + break; + vtopts = value; + (void) strsep(&vtopts, ","); + + if (strcmp(key, "mac") == 0) { + err = net_parsemac(value, sc->vsc_config.mac); + if (err) + break; + mac_provided = 1; } - mac_provided = 1; + } + + if (err) { + free(devname); + free(sc); + return (err); } err = netbe_init(&sc->vsc_be, devname, pci_vtnet_rx_callback, @@ -520,6 +624,7 @@ pci_vtnet_init(struct vmctx *ctx, struct pci_devinst *pi, char *opts) sc->resetting = 0; sc->rx_merge = 0; + sc->vhdrlen = sizeof(struct virtio_net_rxhdr) - 2; pthread_mutex_init(&sc->rx_mtx, NULL); /* @@ -574,24 +679,25 @@ static void pci_vtnet_neg_features(void *vsc, uint64_t negotiated_features) { struct pci_vtnet_softc *sc = vsc; - unsigned int rx_vhdrlen; sc->vsc_features = negotiated_features; if (negotiated_features & VIRTIO_NET_F_MRG_RXBUF) { - rx_vhdrlen = sizeof(struct virtio_net_rxhdr); + sc->vhdrlen = sizeof(struct virtio_net_rxhdr); sc->rx_merge = 1; } else { /* * Without mergeable rx buffers, virtio-net header is 2 * bytes shorter than sizeof(struct virtio_net_rxhdr). */ - rx_vhdrlen = sizeof(struct virtio_net_rxhdr) - 2; + sc->vhdrlen = sizeof(struct virtio_net_rxhdr) - 2; sc->rx_merge = 0; } /* Tell the backend to enable some capabilities it has advertised. */ - netbe_set_cap(sc->vsc_be, negotiated_features, rx_vhdrlen); + netbe_set_cap(sc->vsc_be, negotiated_features, sc->vhdrlen); + sc->be_vhdrlen = netbe_get_vnet_hdr_len(sc->vsc_be); + assert(sc->be_vhdrlen == 0 || sc->be_vhdrlen == sc->vhdrlen); } static struct pci_devemu pci_de_vnet = { From 07fb2bc32fcd05fad382fa37d86de31a4ed6cefd Mon Sep 17 00:00:00 2001 From: Dimitry Andric Date: Wed, 12 Feb 2020 23:54:38 +0000 Subject: [PATCH 139/144] Fix typo introduced with r347534 (cap_sysctl additions). This ensures the old libcap_sysctl.so.1 gets cleaned up when running "make delete-old-libs". --- ObsoleteFiles.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc index 747b52f6c07..c922372160e 100644 --- a/ObsoleteFiles.inc +++ b/ObsoleteFiles.inc @@ -757,7 +757,7 @@ OLD_FILES+=usr/share/man/man4/wb.4.gz OLD_FILES+=usr/share/man/man4/xe.4.gz OLD_FILES+=usr/share/man/man4/if_xe.4.gz # 20190513: libcap_sysctl interface change -OLD_FILES+=lib/casper/libcap_sysctl.1 +OLD_FILES+=lib/casper/libcap_sysctl.so.1 # 20190509: tests/sys/opencrypto requires the net/py-dpkt package. OLD_FILES+=usr/tests/sys/opencrypto/dpkt.py OLD_FILES+=usr/tests/sys/opencrypto/dpkt.pyc From a8d238cd6d70c7cc90eaec1533983602a7ea94e8 Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Thu, 13 Feb 2020 01:23:32 +0000 Subject: [PATCH 140/144] Export the current da flags as bitfield Export the current flags. They can be useful to other programs wanting to do special thigns for removable or similar devices. Differential Revision: https://reviews.freebsd.org/D23417 --- sys/cam/scsi/scsi_da.c | 46 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/sys/cam/scsi/scsi_da.c b/sys/cam/scsi/scsi_da.c index cadc438b60e..579fce0f5e4 100644 --- a/sys/cam/scsi/scsi_da.c +++ b/sys/cam/scsi/scsi_da.c @@ -122,6 +122,28 @@ typedef enum { DA_FLAG_CAN_ATA_ZONE = 0x040000, DA_FLAG_TUR_PENDING = 0x080000 } da_flags; +#define DA_FLAG_STRING \ + "\020" \ + "\001PACK_INVALID" \ + "\002NEW_PACK" \ + "\003PACK_LOCKED" \ + "\004PACK_REMOVABLE" \ + "\005UNUSED" \ + "\006NEED_OTAG" \ + "\007WAS_OTAG" \ + "\010RETRY_UA" \ + "\011OPEN" \ + "\012SCTX_INIT" \ + "\013CAN_RC16" \ + "\014PROBED" \ + "\015DIRTY" \ + "\016ANNOUCNED" \ + "\017CAN_ATA_DMA" \ + "\020CAN_ATA_LOG" \ + "\021CAN_ATA_IDLOG" \ + "\022CAN_ATA_SUPACP" \ + "\023CAN_ATA_ZONE" \ + "\024TUR_PENDING" typedef enum { DA_Q_NONE = 0x00, @@ -1442,6 +1464,7 @@ static void dasysctlinit(void *context, int pending); static int dasysctlsofttimeout(SYSCTL_HANDLER_ARGS); static int dacmdsizesysctl(SYSCTL_HANDLER_ARGS); static int dadeletemethodsysctl(SYSCTL_HANDLER_ARGS); +static int daflagssysctl(SYSCTL_HANDLER_ARGS); static int dazonemodesysctl(SYSCTL_HANDLER_ARGS); static int dazonesupsysctl(SYSCTL_HANDLER_ARGS); static int dadeletemaxsysctl(SYSCTL_HANDLER_ARGS); @@ -2316,6 +2339,11 @@ dasysctlinit(void *context, int pending) 0, "DIF protection type"); + SYSCTL_ADD_PROC(&softc->sysctl_ctx, SYSCTL_CHILDREN(softc->sysctl_tree), + OID_AUTO, "flags", CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, + softc, 0, daflagssysctl, "A", + "Flags for drive"); + #ifdef CAM_TEST_FAILURE SYSCTL_ADD_PROC(&softc->sysctl_ctx, SYSCTL_CHILDREN(softc->sysctl_tree), OID_AUTO, "invalidate", CTLTYPE_U64 | CTLFLAG_RW | CTLFLAG_MPSAFE, @@ -2590,6 +2618,24 @@ dadeletemethodchoose(struct da_softc *softc, da_delete_methods default_method) dadeletemethodset(softc, default_method); } +static int +daflagssysctl(SYSCTL_HANDLER_ARGS) +{ + struct sbuf sbuf; + struct da_softc *softc = arg1; + int error; + + sbuf_new_for_sysctl(&sbuf, NULL, 0, req); + if (softc->flags != 0) + sbuf_printf(&sbuf, "0x%b", softc->flags, DA_FLAG_STRING); + else + sbuf_printf(&sbuf, "0"); + error = sbuf_finish(&sbuf); + sbuf_delete(&sbuf); + + return (error); +} + static int dadeletemethodsysctl(SYSCTL_HANDLER_ARGS) { From 0c8ea9e56798e2b9cbdb2ae4a9d423f92cbad209 Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Thu, 13 Feb 2020 01:23:44 +0000 Subject: [PATCH 141/144] Convert rotating and unmapped_io to a DA flag Rotating and unmapped_io are really da flags. Convert them to a flag so it will be reported with the other flags for the device. Deprecate the .rotating and .unmapped_io sysctls in FreeBSD 14 and remove the softc ints. Differential Revision: https://reviews.freebsd.org/D23417 --- sys/cam/scsi/scsi_da.c | 61 +++++++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 27 deletions(-) diff --git a/sys/cam/scsi/scsi_da.c b/sys/cam/scsi/scsi_da.c index 579fce0f5e4..fd5581d8c58 100644 --- a/sys/cam/scsi/scsi_da.c +++ b/sys/cam/scsi/scsi_da.c @@ -106,6 +106,7 @@ typedef enum { DA_FLAG_NEW_PACK = 0x000002, DA_FLAG_PACK_LOCKED = 0x000004, DA_FLAG_PACK_REMOVABLE = 0x000008, + DA_FLAG_ROTATING = 0x000010, DA_FLAG_NEED_OTAG = 0x000020, DA_FLAG_WAS_OTAG = 0x000040, DA_FLAG_RETRY_UA = 0x000080, @@ -120,7 +121,8 @@ typedef enum { DA_FLAG_CAN_ATA_IDLOG = 0x010000, DA_FLAG_CAN_ATA_SUPCAP = 0x020000, DA_FLAG_CAN_ATA_ZONE = 0x040000, - DA_FLAG_TUR_PENDING = 0x080000 + DA_FLAG_TUR_PENDING = 0x080000, + DA_FLAG_UNMAPPEDIO = 0x100000 } da_flags; #define DA_FLAG_STRING \ "\020" \ @@ -128,7 +130,7 @@ typedef enum { "\002NEW_PACK" \ "\003PACK_LOCKED" \ "\004PACK_REMOVABLE" \ - "\005UNUSED" \ + "\005ROTATING" \ "\006NEED_OTAG" \ "\007WAS_OTAG" \ "\010RETRY_UA" \ @@ -143,7 +145,8 @@ typedef enum { "\021CAN_ATA_IDLOG" \ "\022CAN_ATA_SUPACP" \ "\023CAN_ATA_ZONE" \ - "\024TUR_PENDING" + "\024TUR_PENDING" \ + "\025UNMAPPEDIO" typedef enum { DA_Q_NONE = 0x00, @@ -367,8 +370,6 @@ struct da_softc { da_delete_methods delete_method_pref; da_delete_methods delete_method; da_delete_func_t *delete_func; - int unmappedio; - int rotating; int p_type; struct disk_params params; struct disk *disk; @@ -1464,6 +1465,7 @@ static void dasysctlinit(void *context, int pending); static int dasysctlsofttimeout(SYSCTL_HANDLER_ARGS); static int dacmdsizesysctl(SYSCTL_HANDLER_ARGS); static int dadeletemethodsysctl(SYSCTL_HANDLER_ARGS); +static int dabitsysctl(SYSCTL_HANDLER_ARGS); static int daflagssysctl(SYSCTL_HANDLER_ARGS); static int dazonemodesysctl(SYSCTL_HANDLER_ARGS); static int dazonesupsysctl(SYSCTL_HANDLER_ARGS); @@ -2312,24 +2314,6 @@ dasysctlinit(void *context, int pending) 0, "error_inject leaf"); - SYSCTL_ADD_INT(&softc->sysctl_ctx, - SYSCTL_CHILDREN(softc->sysctl_tree), - OID_AUTO, - "unmapped_io", - CTLFLAG_RD, - &softc->unmappedio, - 0, - "Unmapped I/O support"); - - SYSCTL_ADD_INT(&softc->sysctl_ctx, - SYSCTL_CHILDREN(softc->sysctl_tree), - OID_AUTO, - "rotating", - CTLFLAG_RD, - &softc->rotating, - 0, - "Rotating media"); - SYSCTL_ADD_INT(&softc->sysctl_ctx, SYSCTL_CHILDREN(softc->sysctl_tree), OID_AUTO, @@ -2343,6 +2327,14 @@ dasysctlinit(void *context, int pending) OID_AUTO, "flags", CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, softc, 0, daflagssysctl, "A", "Flags for drive"); + SYSCTL_ADD_PROC(&softc->sysctl_ctx, SYSCTL_CHILDREN(softc->sysctl_tree), + OID_AUTO, "rotating", CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, + &softc->flags, DA_FLAG_ROTATING, dabitsysctl, "I", + "Rotating media *DEPRECATED* gone in FreeBSD 14"); + SYSCTL_ADD_PROC(&softc->sysctl_ctx, SYSCTL_CHILDREN(softc->sysctl_tree), + OID_AUTO, "unmapped_io", CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, + &softc->flags, DA_FLAG_UNMAPPEDIO, dabitsysctl, "I", + "Unmapped I/O support *DEPRECATED* gone in FreeBSD 14"); #ifdef CAM_TEST_FAILURE SYSCTL_ADD_PROC(&softc->sysctl_ctx, SYSCTL_CHILDREN(softc->sysctl_tree), @@ -2618,6 +2610,21 @@ dadeletemethodchoose(struct da_softc *softc, da_delete_methods default_method) dadeletemethodset(softc, default_method); } +static int +dabitsysctl(SYSCTL_HANDLER_ARGS) +{ + int flags = (intptr_t)arg1; + int test = arg2; + int tmpout, error; + + tmpout = !!(flags & test); + error = SYSCTL_OUT(req, &tmpout, sizeof(tmpout)); + if (error || !req->newptr) + return (error); + + return (EPERM); +} + static int daflagssysctl(SYSCTL_HANDLER_ARGS) { @@ -2775,7 +2782,7 @@ daregister(struct cam_periph *periph, void *arg) softc->unmap_gran_align = 0; softc->ws_max_blks = WS16_MAX_BLKS; softc->trim_max_ranges = ATA_TRIM_MAX_RANGES; - softc->rotating = 1; + softc->flags |= DA_FLAG_ROTATING; periph->softc = softc; @@ -2908,7 +2915,7 @@ daregister(struct cam_periph *periph, void *arg) if ((softc->quirks & DA_Q_NO_SYNC_CACHE) == 0) softc->disk->d_flags |= DISKFLAG_CANFLUSHCACHE; if ((cpi.hba_misc & PIM_UNMAPPED) != 0) { - softc->unmappedio = 1; + softc->flags |= DA_FLAG_UNMAPPEDIO; softc->disk->d_flags |= DISKFLAG_UNMAPPED_BIO; } cam_strvis(softc->disk->d_descr, cgd->inq_data.vendor, @@ -5188,7 +5195,7 @@ dadone_probebdc(struct cam_periph *periph, union ccb *done_ccb) SVPD_BDC_RATE_NON_ROTATING) { cam_iosched_set_sort_queue( softc->cam_iosched, 0); - softc->rotating = 0; + softc->flags &= ~DA_FLAG_ROTATING; } if (softc->disk->d_rotation_rate != old_rate) { disk_attr_changed(softc->disk, @@ -5298,7 +5305,7 @@ dadone_probeata(struct cam_periph *periph, union ccb *done_ccb) softc->disk->d_rotation_rate = ata_params->media_rotation_rate; if (softc->disk->d_rotation_rate == ATA_RATE_NON_ROTATING) { cam_iosched_set_sort_queue(softc->cam_iosched, 0); - softc->rotating = 0; + softc->flags &= ~DA_FLAG_ROTATING; } if (softc->disk->d_rotation_rate != old_rate) { disk_attr_changed(softc->disk, From 0ded0d125666740a6f7d303eeebe178b539bd0df Mon Sep 17 00:00:00 2001 From: Ryan Moeller Date: Thu, 13 Feb 2020 01:42:13 +0000 Subject: [PATCH 142/144] Add myself (freqlabs) as a src committer Approved by: mav (mentor) MFC after: 3 days --- share/misc/committers-src.dot | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/share/misc/committers-src.dot b/share/misc/committers-src.dot index 2a1a1127315..4c377c98077 100644 --- a/share/misc/committers-src.dot +++ b/share/misc/committers-src.dot @@ -175,6 +175,7 @@ fabient [label="Fabien Thomas\nfabient@FreeBSD.org\n2009/03/16"] fanf [label="Tony Finch\nfanf@FreeBSD.org\n2002/05/05"] fjoe [label="Max Khon\nfjoe@FreeBSD.org\n2001/08/06"] flz [label="Florent Thoumie\nflz@FreeBSD.org\n2006/03/30"] +freqlabs [label="Ryan Moeller\nfreqlabs@FreeBSD.org\n2020/02/10"] fsu [label="Fedor Uporov\nfsu@FreeBSD.org\n2017/08/28"] gabor [label="Gabor Kovesdan\ngabor@FreeBSD.org\n2010/02/02"] gad [label="Garance A. Drosehn\ngad@FreeBSD.org\n2000/10/27"] @@ -716,6 +717,7 @@ markm -> sheldonh mav -> ae mav -> eugen +mav -> freqlabs mav -> ram mdf -> gleb @@ -731,6 +733,8 @@ mlaier -> dhartmei mlaier -> thompsa mlaier -> eri +mmacy -> freqlabs + msmith -> cokane msmith -> jasone msmith -> scottl From efb17c5a545ed0c6468730c78dcd8904d1c47f81 Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Thu, 13 Feb 2020 03:37:11 +0000 Subject: [PATCH 143/144] Use INT instead of string for the ints. Because the string "I" was right, the old code appeared to work. This was a cut and paste error. Noticed by: rpokala@ --- sys/cam/scsi/scsi_da.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sys/cam/scsi/scsi_da.c b/sys/cam/scsi/scsi_da.c index fd5581d8c58..9f20d192ffb 100644 --- a/sys/cam/scsi/scsi_da.c +++ b/sys/cam/scsi/scsi_da.c @@ -2328,11 +2328,11 @@ dasysctlinit(void *context, int pending) softc, 0, daflagssysctl, "A", "Flags for drive"); SYSCTL_ADD_PROC(&softc->sysctl_ctx, SYSCTL_CHILDREN(softc->sysctl_tree), - OID_AUTO, "rotating", CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, + OID_AUTO, "rotating", CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE, &softc->flags, DA_FLAG_ROTATING, dabitsysctl, "I", "Rotating media *DEPRECATED* gone in FreeBSD 14"); SYSCTL_ADD_PROC(&softc->sysctl_ctx, SYSCTL_CHILDREN(softc->sysctl_tree), - OID_AUTO, "unmapped_io", CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, + OID_AUTO, "unmapped_io", CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE, &softc->flags, DA_FLAG_UNMAPPEDIO, dabitsysctl, "I", "Unmapped I/O support *DEPRECATED* gone in FreeBSD 14"); From 73f2f4cbfcdf9be8ed09d6afbb22007ea42b7d90 Mon Sep 17 00:00:00 2001 From: Dimitry Andric Date: Thu, 13 Feb 2020 11:00:20 +0000 Subject: [PATCH 144/144] Cleanup gsched tool and geom_sched.so library after r356185. --- ObsoleteFiles.inc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc index c922372160e..b63b075be67 100644 --- a/ObsoleteFiles.inc +++ b/ObsoleteFiles.inc @@ -54,6 +54,10 @@ OLD_FILES+=usr/include/ssp/string.h OLD_FILES+=usr/include/ssp/unistd.h OLD_DIRS+=usr/include/ssp +# 20191229: GEOM_SCHED class and gsched tool removed +OLD_FILES+=sbin/gsched +OLD_LIBS+=lib/geom/geom_sched.so + # 20191222: new clang import which bumps version from 9.0.0 to 9.0.1. OLD_FILES+=usr/lib/clang/9.0.0/include/cuda_wrappers/algorithm OLD_FILES+=usr/lib/clang/9.0.0/include/cuda_wrappers/complex

l?Pu^9XMYxK3SQ!wy{u|^$g<$h2ei@< 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≤@yLV?`!?*| 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%0AK;pF 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�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�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±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 delta 120986 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 za