diff --git a/include/package-defaults.mk b/include/package-defaults.mk index 75442925f1..c3496767cf 100644 --- a/include/package-defaults.mk +++ b/include/package-defaults.mk @@ -5,6 +5,12 @@ # See /LICENSE for more information. # +ifneq ($(PKG_NAME),toolchain) + PKG_FIXUP_DEPENDS = $(if $(filter kmod-%,$(1)),$(2),+libc $(filter-out +libc,$(2))) +else + PKG_FIXUP_DEPENDS = $(2) +endif + define Package/Default CONFIGFILE:= SECTION:=opt diff --git a/include/package-dumpinfo.mk b/include/package-dumpinfo.mk index a297f2336e..2bf78c3f18 100644 --- a/include/package-dumpinfo.mk +++ b/include/package-dumpinfo.mk @@ -30,7 +30,7 @@ $(if $(MENU),Menu: $(MENU) )$(if $(DEFAULT),Default: $(DEFAULT) )$(if $(findstring $(PREREQ_CHECK),1),Prereq-Check: 1 )Version: $(VERSION) -Depends: $(DEPENDS) +Depends: $(call PKG_FIXUP_DEPENDS,$(1),$(DEPENDS)) Menu-Depends: $(MDEPENDS) Provides: $(PROVIDES) $(if $(VARIANT),Build-Variant: $(VARIANT) diff --git a/include/package-ipkg.mk b/include/package-ipkg.mk index e0a8118ae6..e9bac7a23b 100644 --- a/include/package-ipkg.mk +++ b/include/package-ipkg.mk @@ -47,6 +47,44 @@ dep_val=$(word 2,$(call dep_split,$(1))) strip_deps=$(strip $(subst +,,$(filter-out @%,$(1)))) filter_deps=$(foreach dep,$(call strip_deps,$(1)),$(if $(findstring :,$(dep)),$(call dep_if,$(dep)),$(dep))) +define AddDependency + $$(if $(1),$$(if $(2),$$(foreach pkg,$(1),$$(IPKG_$$(pkg))): $$(foreach pkg,$(2),$$(IPKG_$$(pkg))))) +endef + +define FixupReverseDependencies + DEPS := $$(filter %:$(1),$$(IDEPEND)) + DEPS := $$(patsubst %:$(1),%,$$(DEPS)) + DEPS := $$(filter $$(DEPS),$$(IPKGS)) + $(call AddDependency,$$(DEPS),$(1)) +endef + +define FixupDependencies + DEPS := $$(filter $(1):%,$$(IDEPEND)) + DEPS := $$(patsubst $(1):%,%,$$(DEPS)) + DEPS := $$(filter $$(DEPS),$$(IPKGS)) + $(call AddDependency,$(1),$$(DEPS)) +endef + +ifneq ($(PKG_NAME),toolchain) + define CheckDependencies + @( \ + rm -f $(PKG_INFO_DIR)/$(1).missing; \ + ( \ + export READELF=$(TARGET_CROSS)readelf XARGS="$(XARGS)"; \ + $(SCRIPT_DIR)/gen-dependencies.sh "$$(IDIR_$(1))"; \ + ) | while read FILE; do \ + grep -q "$$$$FILE" $(PKG_INFO_DIR)/$(1).provides || \ + echo "$$$$FILE" >> $(PKG_INFO_DIR)/$(1).missing; \ + done; \ + if [ -f "$(PKG_INFO_DIR)/$(1).missing" ]; then \ + echo "Package $(1) is missing dependencies for the following libraries:"; \ + cat "$(PKG_INFO_DIR)/$(1).missing"; \ + false; \ + fi; \ + ) + endef +endif + ifeq ($(DUMP),) define BuildTarget/ipkg IPKG_$(1):=$(PACKAGE_DIR)/$(1)_$(VERSION)_$(PKGARCH).ipk @@ -57,7 +95,8 @@ ifeq ($(DUMP),) ifeq ($(if $(VARIANT),$(BUILD_VARIANT)),$(VARIANT)) ifdef Package/$(1)/install ifneq ($(CONFIG_PACKAGE_$(1))$(SDK)$(DEVELOPER),) - compile: $$(IPKG_$(1)) $(STAGING_DIR_ROOT)/stamp/.$(1)_installed + IPKGS += $(1) + compile: $$(IPKG_$(1)) $(PKG_INFO_DIR)/$(1).provides $(STAGING_DIR_ROOT)/stamp/.$(1)_installed ifeq ($(CONFIG_PACKAGE_$(1)),y) install: $$(INFO_$(1)) @@ -70,7 +109,11 @@ ifeq ($(DUMP),) endif endif + DEPENDS:=$(call PKG_FIXUP_DEPENDS,$(1),$(DEPENDS)) IDEPEND_$(1):=$$(call filter_deps,$$(DEPENDS)) + IDEPEND += $$(patsubst %,$(1):%,$$(IDEPEND_$(1))) + $(FixupDependencies) + $(FixupReverseDependencies) $(eval $(call BuildIPKGVariable,$(1),conffiles)) $(eval $(call BuildIPKGVariable,$(1),preinst)) @@ -87,11 +130,22 @@ ifeq ($(DUMP),) rm -rf $(STAGING_DIR_ROOT)/tmp-$(1) touch $$@ - $$(IPKG_$(1)): $(STAMP_BUILT) + $(PKG_INFO_DIR)/$(1).provides: $$(IPKG_$(1)) + $$(IPKG_$(1)): $(STAMP_BUILT) $(INCLUDE_DIR)/package-ipkg.mk @rm -rf $(PACKAGE_DIR)/$(1)_* $$(IDIR_$(1)) - mkdir -p $(PACKAGE_DIR) $$(IDIR_$(1))/CONTROL + mkdir -p $(PACKAGE_DIR) $$(IDIR_$(1))/CONTROL $(PKG_INFO_DIR) $(call Package/$(1)/install,$$(IDIR_$(1))) -find $$(IDIR_$(1)) -name 'CVS' -o -name '.svn' -o -name '.#*' -o -name '*~'| $(XARGS) rm -rf + @( \ + find $$(IDIR_$(1)) -name lib\*.so\* | awk -F/ '{ print $$$$NF }'; \ + for file in $$(patsubst %,$(PKG_INFO_DIR)/%.provides,$$(IDEPEND_$(1))); do \ + if [ -f "$$$$file" ]; then \ + cat $$$$file; \ + fi; \ + done; \ + ) | sort -u > $(PKG_INFO_DIR)/$(1).provides + $(CheckDependencies) + $(RSTRIP) $$(IDIR_$(1)) ( \ echo "Package: $(1)"; \ diff --git a/include/package.mk b/include/package.mk index e39a6598e0..10de8c41f0 100644 --- a/include/package.mk +++ b/include/package.mk @@ -11,6 +11,7 @@ PKG_BUILD_DIR ?= $(BUILD_DIR)/$(PKG_NAME)$(if $(PKG_VERSION),-$(PKG_VERSION)) PKG_INSTALL_DIR ?= $(PKG_BUILD_DIR)/ipkg-install PKG_MD5SUM ?= unknown PKG_BUILD_PARALLEL ?= +PKG_INFO_DIR := $(STAGING_DIR)/pkginfo ifeq ($(strip $(PKG_BUILD_PARALLEL)),0) PKG_JOBS?=-j1 diff --git a/package/Makefile b/package/Makefile index 7d2c42d8b8..5d942ca783 100644 --- a/package/Makefile +++ b/package/Makefile @@ -38,7 +38,7 @@ ifdef CONFIG_USE_MKLIBS file -r -N -F '' {} + | \ awk ' /shared object/ { print $$1 }' >> $(TMP_DIR)/mklibs-progs mkdir -p $(TMP_DIR)/mklibs-out - $(STAGING_DIR_HOST)/bin/mklibs.py -D \ + $(STAGING_DIR_HOST)/bin/mklibs -D \ -d $(TMP_DIR)/mklibs-out \ --sysroot $(STAGING_DIR_ROOT) \ -L /lib \ diff --git a/package/base-files/Makefile b/package/base-files/Makefile index 88167b788b..ff48f5d318 100644 --- a/package/base-files/Makefile +++ b/package/base-files/Makefile @@ -23,19 +23,15 @@ ifneq ($(DUMP),1) ifneq ($(wildcard $(PLATFORM_DIR)/base-files-$(PROFILE) $(PLATFORM_SUBDIR)/base-files-$(PROFILE)),) TARGET:=$(TARGET)-$(PROFILE) endif - LIBGCC_VERSION:=$(GCC_VERSION) ifneq ($(findstring $(ARCH) , mips64 x86_64 ),) LIB_SUFFIX:=64 endif -else - LIBC_VERSION:= - LIBGCC_VERSION:= endif define Package/base-files SECTION:=base CATEGORY:=Base system - DEPENDS:=+netifd + DEPENDS:=+netifd +libc TITLE:=Base filesystem for OpenWrt URL:=http://openwrt.org/ VERSION:=$(PKG_RELEASE)-$(REVISION) @@ -62,269 +58,6 @@ define Package/base-files/description This package contains a base filesystem and system scripts for OpenWrt. endef -define Package/gcc/Default - SECTION:=libs - CATEGORY:=Base system - URL:=http://gcc.gnu.org/ - VERSION:=$(LIBGCC_VERSION)-$(PKG_RELEASE) -endef - - -define Package/libgcc -$(call Package/gcc/Default) - TITLE:=GCC support library - DEPENDS+=@!(TARGET_avr32||TARGET_coldfire) -endef - -define Package/libgcc/config - menu "Configuration" - depends EXTERNAL_TOOLCHAIN && PACKAGE_libgcc - - config LIBGCC_ROOT_DIR - string - prompt "libgcc shared library base directory" - depends EXTERNAL_TOOLCHAIN && PACKAGE_libgcc - default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN - default "/" if NATIVE_TOOLCHAIN - - config LIBGCC_FILE_SPEC - string - prompt "libgcc shared library files (use wildcards)" - depends EXTERNAL_TOOLCHAIN && PACKAGE_libgcc - default "./lib/libgcc_s.so.*" - - endmenu -endef - - -define Package/libssp -$(call Package/gcc/Default) - DEPENDS+=@SSP_SUPPORT - TITLE:=GCC support library -endef - -define Package/libssp/config - menu "Configuration" - depends EXTERNAL_TOOLCHAIN && PACKAGE_libssp - - config LIBSPP_ROOT_DIR - string - prompt "libssp shared library base directory" - depends EXTERNAL_TOOLCHAIN && PACKAGE_libssp - default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN - default "/" if NATIVE_TOOLCHAIN - - config LIBSSP_FILE_SPEC - string - prompt "libssp shared library files (use wildcards)" - depends EXTERNAL_TOOLCHAIN && PACKAGE_libssp - default "./lib/libssp.so.*" - - endmenu -endef - - -define Package/libstdcpp -$(call Package/gcc/Default) - NAME:=libstdc++ - TITLE:=GNU Standard C++ Library v3 - DEPENDS+=@INSTALL_LIBSTDCPP -endef - -define Package/libstdcpp/config - menu "Configuration" - depends EXTERNAL_TOOLCHAIN && PACKAGE_libstdcpp - - config LIBSTDCPP_ROOT_DIR - string - prompt "libstdcpp shared library base directory" - depends EXTERNAL_TOOLCHAIN && PACKAGE_libstdcpp - default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN - default "/" if NATIVE_TOOLCHAIN - - config LIBSTDCPP_FILE_SPEC - string - prompt "libstdc++ shared library files (use wildcards)" - depends EXTERNAL_TOOLCHAIN && PACKAGE_libstdcpp - default "./lib/libstdc++.so.*" - - endmenu -endef - - -define Package/libc/Default - SECTION:=libs - CATEGORY:=Base system - VERSION:=$(LIBC_VERSION)-$(PKG_RELEASE) -ifneq ($(TARGET_avr32)$(TARGET_coldfire),) - DEPENDS:=+libgcc -endif - URL:=$(LIBC_URL) - PKG_FLAGS:=hold essential -endef - - -define Package/libc -$(call Package/libc/Default) - TITLE:=C library -endef - -define Package/libc/config - menu "Configuration" - depends EXTERNAL_TOOLCHAIN && PACKAGE_libc - - config LIBC_ROOT_DIR - string - prompt "libc shared library base directory" - depends EXTERNAL_TOOLCHAIN && PACKAGE_libc - default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN - default "/" if NATIVE_TOOLCHAIN - - config LIBC_FILE_SPEC - string - prompt "libc shared library files (use wildcards)" - depends EXTERNAL_TOOLCHAIN && PACKAGE_libc - default "./lib/ld{-*.so,-linux*.so.*} ./lib/lib{anl,c,cidn,crypt,dl,m,nsl,nss_dns,nss_files,resolv,util}{-*.so,.so.*}" - - endmenu -endef - - -define Package/libpthread -$(call Package/libc/Default) - TITLE:=POSIX thread library -endef - -define Package/libpthread/config - menu "Configuration" - depends EXTERNAL_TOOLCHAIN && PACKAGE_libpthread - - config LIBPTHREAD_ROOT_DIR - string - prompt "libpthread shared library base directory" - depends EXTERNAL_TOOLCHAIN && PACKAGE_libpthread - default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN - default "/" if NATIVE_TOOLCHAIN - - config LIBPTHREAD_FILE_SPEC - string - prompt "libpthread shared library files (use wildcards)" - depends EXTERNAL_TOOLCHAIN && PACKAGE_libpthread - default "./lib/libpthread{-*.so,.so.*}" - - endmenu -endef - - -define Package/librt -$(call Package/libc/Default) - TITLE:=POSIX.1b RealTime extension library - DEPENDS:=+libpthread -endef - -define Package/librt/config - menu "Configuration" - depends EXTERNAL_TOOLCHAIN && PACKAGE_librt - - config LIBRT_ROOT_DIR - string - prompt "librt shared library base directory" - depends EXTERNAL_TOOLCHAIN && PACKAGE_librt - default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN - default "/" if NATIVE_TOOLCHAIN - - config LIBRT_FILE_SPEC - string - prompt "librt shared library files (use wildcards)" - depends EXTERNAL_TOOLCHAIN && PACKAGE_librt - default "./lib/librt{-*.so,.so.*}" - - endmenu -endef - - -define Package/libgfortran -$(call Package/gcc/Default) - TITLE:=GFortran support library - DEPENDS+=@!(TARGET_avr32||TARGET_coldfire) @INSTALL_GFORTRAN -endef - -define Package/libgfortran/config - menu "Configuration" - depends EXTERNAL_TOOLCHAIN && PACKAGE_libgfortran - - config LIBGFORTRAN_ROOT_DIR - string - prompt "libgfortran shared library base directory" - depends EXTERNAL_TOOLCHAIN && PACKAGE_libgfortran - default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN - default "/" if NATIVE_TOOLCHAIN - - config LIBGFORTRAN_FILE_SPEC - string - prompt "libgfortran shared library files (use wildcards)" - depends EXTERNAL_TOOLCHAIN && PACKAGE_libgfortran - default "./usr/lib/libgfortran.so.*" - - endmenu -endef - -define Package/ldd -$(call Package/libc/Default) - SECTION:=utils - CATEGORY:=Utilities - TITLE:=LDD trace utility -endef - -define Package/ldd/config - menu "Configuration" - depends EXTERNAL_TOOLCHAIN && PACKAGE_ldd - - config LDD_ROOT_DIR - string - prompt "ldd trace utility base directory" - depends EXTERNAL_TOOLCHAIN && PACKAGE_ldd - default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN - default "/" if NATIVE_TOOLCHAIN - - config LDD_FILE_SPEC - string - prompt "ldd trace utility file" - depends EXTERNAL_TOOLCHAIN && PACKAGE_ldd - default "./usr/bin/ldd" - - endmenu -endef - - -define Package/ldconfig -$(call Package/libc/Default) - SECTION:=utils - CATEGORY:=Utilities - TITLE:=Shared library path configuration -endef - -define Package/ldconfig/config - menu "Configuration" - depends EXTERNAL_TOOLCHAIN && PACKAGE_ldconfig - - config LDCONFIG_ROOT_DIR - string - prompt "ldconfig base directory" - depends EXTERNAL_TOOLCHAIN && PACKAGE_ldconfig - default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN - default "/" if NATIVE_TOOLCHAIN - - config LDCONFIG_FILE_SPEC - string - prompt "ldconfig file" - depends EXTERNAL_TOOLCHAIN && PACKAGE_ldconfig - default "./sbin/ldconfig" - - endmenu -endef - - ifneq ($(CONFIG_PREINITOPT),) define ImageConfigOptions mkdir -p $(1)/lib/preinit @@ -347,76 +80,9 @@ define Build/Prepare mkdir -p $(PKG_BUILD_DIR) endef -LIBGCC_A=$(wildcard $(TOOLCHAIN_DIR)/lib/gcc/*/*/libgcc_pic.a) -LIBGCC_MAP=$(wildcard $(TOOLCHAIN_DIR)/lib/gcc/*/*/libgcc.map) -LIBGCC_SO=$(wildcard $(TOOLCHAIN_DIR)/lib/libgcc_s.so.*) -ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) - ifneq ($(if $(CONFIG_USE_UCLIBC),$(CONFIG_GCC_VERSION_LINARO)),) - BUILD_LIBGCC:=$(if $(CONFIG_avr32)$(CONFIG_m68k)$(CONFIG_powerpc),,$(PKG_BUILD_DIR)/libgcc_s.so.*) - endif -endif - -ifneq ($(BUILD_LIBGCC),) - define Build/Compile/uClibc - $(SCRIPT_DIR)/relink-lib.sh \ - "$(TARGET_CROSS)" \ - "$(wildcard $(TOOLCHAIN_DIR)/lib/libc_so.a)" \ - "$(wildcard $(TOOLCHAIN_DIR)/lib/libc_so.a)" \ - "$(patsubst $(TOOLCHAIN_DIR)/lib/%,$(PKG_BUILD_DIR)/%,$(wildcard $(TOOLCHAIN_DIR)/lib/libuClibc-*.so))" \ - -Wl,-init,__uClibc_init -Wl,-soname=libc.so.0 \ - $(BUILD_LIBGCC) - $(SCRIPT_DIR)/relink-lib.sh \ - "$(TARGET_CROSS)" \ - "$(wildcard $(TOOLCHAIN_DIR)/lib/libcrypt-*.so)" \ - "$(wildcard $(TOOLCHAIN_DIR)/lib/libcrypt_pic.a)" \ - "$(patsubst $(TOOLCHAIN_DIR)/lib/%,$(PKG_BUILD_DIR)/%,$(wildcard $(TOOLCHAIN_DIR)/lib/libcrypt-*.so))" \ - $(BUILD_LIBGCC) \ - -Wl,-soname=libcrypt.so.0 - $(SCRIPT_DIR)/relink-lib.sh \ - "$(TARGET_CROSS)" \ - "$(wildcard $(TOOLCHAIN_DIR)/lib/libm-*.so)" \ - "$(wildcard $(TOOLCHAIN_DIR)/lib/libm_pic.a)" \ - "$(patsubst $(TOOLCHAIN_DIR)/lib/%,$(PKG_BUILD_DIR)/%,$(wildcard $(TOOLCHAIN_DIR)/lib/libm-*.so))" \ - $(BUILD_LIBGCC) \ - -Wl,-soname=libm.so.0 - $(SCRIPT_DIR)/relink-lib.sh \ - "$(TARGET_CROSS)" \ - "$(wildcard $(TOOLCHAIN_DIR)/lib/libpthread-*.so)" \ - "$(wildcard $(TOOLCHAIN_DIR)/lib/libpthread_so.a)" \ - "$(patsubst $(TOOLCHAIN_DIR)/lib/%,$(PKG_BUILD_DIR)/%,$(wildcard $(TOOLCHAIN_DIR)/lib/libpthread-*.so))" \ - -Wl,-z,nodelete,-z,initfirst,-init=__pthread_initialize_minimal_internal \ - -ldl -lc $(BUILD_LIBGCC) \ - -Wl,-soname=libpthread.so.0 - endef - define Build/Compile/libgcc - $(SCRIPT_DIR)/relink-lib.sh \ - "$(TARGET_CROSS)" \ - "$(LIBGCC_SO)" \ - "$(LIBGCC_A)" \ - "$(patsubst $(TOOLCHAIN_DIR)/lib/%,$(PKG_BUILD_DIR)/%,$(LIBGCC_SO))" \ - -Wl,--version-script=$(LIBGCC_MAP) -Wl,-soname=libgcc_s.so.1 - endef -else - define Build/Compile/uClibc - $(CP) \ - $(TOOLCHAIN_DIR)/lib/libuClibc-*.so \ - $(TOOLCHAIN_DIR)/lib/libcrypt-*.so \ - $(TOOLCHAIN_DIR)/lib/libm-*.so \ - $(TOOLCHAIN_DIR)/lib/libpthread-*.so \ - $(PKG_BUILD_DIR)/ - endef - ifneq ($(LIBGCC_SO),) - define Build/Compile/libgcc - $(CP) $(LIBGCC_SO) $(PKG_BUILD_DIR)/ - endef - endif -endif +define Build/Compile -define Build/Compile/Default - $(call Build/Compile/libgcc) - $(call Build/Compile/$(LIBC)) endef -Build/Compile = $(Build/Compile/Default) define Package/base-files/install $(CP) ./files/* $(1)/ @@ -484,215 +150,8 @@ define Package/base-files/install done endef -ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) - - define Package/libgcc/install - $(INSTALL_DIR) $(1)/lib - $(CP) $(TOOLCHAIN_DIR)/lib/libgcc_s.so.* $(1)/lib/ - endef - - define Package/libgfortran/install - $(INSTALL_DIR) $(1)/usr/lib - $(CP) $(TOOLCHAIN_DIR)/lib/libgfortran.so.* $(1)/usr/lib/ - endef - - define Package/libssp/install - $(INSTALL_DIR) $(1)/lib - $(CP) $(TOOLCHAIN_DIR)/lib/libssp.so.* $(1)/lib/ - endef - - define Package/libstdcpp/install - $(INSTALL_DIR) $(1)/usr/lib - $(CP) $(TOOLCHAIN_DIR)/lib/libstdc++.so.* $(1)/usr/lib/ - endef - - use_libutil=$(if $(CONFIG_EGLIBC_OPTION_EGLIBC_UTMP),libutil) - use_libnsl=$(if $(CONFIG_EGLIBC_OPTION_EGLIBC_NIS),libnsl) - use_nsswitch=$(if $(CONFIG_EGLIBC_OPTION_EGLIBC_NSSWITCH),libnss_dns libnss_files) - - define Package/eglibc/install - $(CP) ./eglibc-files/* $(1)/ - rm -f $(1)/etc/localtime - ln -sf /tmp/localtime $(1)/etc/localtime - $(INSTALL_DIR) $(1)/lib - $(CP) \ - $(TOOLCHAIN_DIR)/lib/ld*.so.* \ - $(TOOLCHAIN_DIR)/lib/ld-$(LIBC_SO_VERSION).so \ - $(1)/lib/ - for file in libanl libc libcidn libcrypt libdl libm $(use_libnsl) $(use_nsswitch) libresolv $(use_libutil); do \ - for file in $(TOOLCHAIN_DIR)/lib/$$$$file.so.* $(TOOLCHAIN_DIR)/lib/$$$$file-$(LIBC_SO_VERSION).so; do \ - if [ -e "$$$$file" ]; then \ - $(CP) $$$$file $(1)/lib/; \ - fi; \ - done; \ - done - endef - - define Package/uClibc/install - $(INSTALL_DIR) $(1)/lib - $(CP) \ - $(TOOLCHAIN_DIR)/lib/ld*-uClibc.so.* \ - $(TOOLCHAIN_DIR)/lib/ld*-uClibc-$(LIBC_SO_VERSION).so \ - $(1)/lib/ - $(CP) \ - $(TOOLCHAIN_DIR)/lib/libc.so.* \ - $(TOOLCHAIN_DIR)/lib/libuClibc-$(LIBC_SO_VERSION).so \ - $(1)/lib/ - for file in libcrypt libdl libm libutil; do \ - $(CP) \ - $(TOOLCHAIN_DIR)/lib/$$$$file.so.* \ - $(TOOLCHAIN_DIR)/lib/$$$$file-$(LIBC_SO_VERSION).so \ - $(1)/lib/; \ - done - - $(CP) \ - $(PKG_BUILD_DIR)/libuClibc-* \ - $(PKG_BUILD_DIR)/libm-* \ - $(PKG_BUILD_DIR)/libcrypt-* \ - $(1)/lib/ - endef - - define Package/libc/install - $(call Package/$(LIBC)/install,$1) - endef - - define Package/libc/install_lib - $(CP) $(filter-out %/libdl_pic.a %/libpthread_pic.a %/libresolv_pic.a,$(wildcard $(TOOLCHAIN_DIR)/lib/lib*.a)) $(1)/lib/ - $(if $(wildcard $(TOOLCHAIN_DIR)/lib/libc_so.a),$(CP) $(TOOLCHAIN_DIR)/lib/libc_so.a $(1)/lib/libc_pic.a) - $(if $(LIBGCC_MAP), \ - $(CP) $(LIBGCC_A) $(1)/lib/libgcc_s_pic.a; \ - $(CP) $(LIBGCC_MAP) $(1)/lib/libgcc_s_pic.map \ - ) - endef - - define Package/libpthread/install - $(INSTALL_DIR) $(1)/lib - $(CP) \ - $(TOOLCHAIN_DIR)/lib/libpthread.so.* \ - $(if $(BUILD_LIBGCC),\ - $(PKG_BUILD_DIR)/libpthread-$(LIBC_SO_VERSION).so, \ - $(TOOLCHAIN_DIR)/lib/libpthread-$(LIBC_SO_VERSION).so \ - ) \ - $(1)/lib/ - endef - - define Package/libpthread/install_lib - $(if $(wildcard $(TOOLCHAIN_DIR)/lib/libpthread_so.a),$(CP) $(TOOLCHAIN_DIR)/lib/libpthread_so.a $(1)/lib/libpthread_pic.a) - endef - - define Package/librt/install - $(INSTALL_DIR) $(1)/lib - $(CP) \ - $(TOOLCHAIN_DIR)/lib/librt.so.* \ - $(TOOLCHAIN_DIR)/lib/librt-$(LIBC_SO_VERSION).so \ - $(1)/lib/ - endef - - define Package/ldd/install - $(INSTALL_DIR) $(1)/usr/bin/ - $(CP) $(TOOLCHAIN_DIR)/bin/ldd $(1)/usr/bin/ - endef - - define Package/ldconfig/install - $(INSTALL_DIR) $(1)/sbin/ - $(CP) $(TOOLCHAIN_DIR)/sbin/ldconfig $(1)/sbin/ - endef - -else - - define Package/libgcc/install - for file in $(call qstrip,$(CONFIG_LIBGCC_FILE_SPEC)); do \ - dir=`dirname $$$$file` ; \ - $(INSTALL_DIR) $(1)/$$$$dir ; \ - $(CP) $(call qstrip,$(CONFIG_LIBGCC_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \ - done ; \ - exit 0 - endef - - define Package/libgfortran/install - for file in $(call qstrip,$(CONFIG_LIBGFORTRAN_FILE_SPEC)); do \ - dir=`dirname $$$$file` ; \ - $(INSTALL_DIR) $(1)/$$$$dir ; \ - $(CP) $(call qstrip,$(CONFIG_LIBGFORTRAN_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \ - done - endef - - define Package/libssp/install - for file in $(call qstrip,$(CONFIG_LIBSSP_FILE_SPEC)); do \ - dir=`dirname $$$$file` ; \ - $(INSTALL_DIR) $(1)/$$$$dir ; \ - $(CP) $(call qstrip,$(CONFIG_LIBSSP_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \ - done ; \ - exit 0 - endef - - define Package/libstdcpp/install - for file in $(call qstrip,$(CONFIG_LIBSTDCPP_FILE_SPEC)); do \ - dir=`dirname $$$$file` ; \ - $(INSTALL_DIR) $(1)/$$$$dir ; \ - $(CP) $(call qstrip,$(CONFIG_LIBSTDCPP_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \ - done ; \ - exit 0 - endef - - define Package/libc/install - for file in $(call qstrip,$(CONFIG_LIBC_FILE_SPEC)); do \ - dir=`dirname $$$$file` ; \ - $(INSTALL_DIR) $(1)/$$$$dir ; \ - $(CP) $(call qstrip,$(CONFIG_LIBC_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \ - done ; \ - exit 0 - endef - - define Package/libpthread/install - for file in $(call qstrip,$(CONFIG_LIBPTHREAD_FILE_SPEC)); do \ - dir=`dirname $$$$file` ; \ - $(INSTALL_DIR) $(1)/$$$$dir ; \ - $(CP) $(call qstrip,$(CONFIG_LIBPTHREAD_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \ - done ; \ - exit 0 - endef - - define Package/librt/install - for file in $(call qstrip,$(CONFIG_LIBRT_FILE_SPEC)); do \ - dir=`dirname $$$$file` ; \ - $(INSTALL_DIR) $(1)/$$$$dir ; \ - $(CP) $(call qstrip,$(CONFIG_LIBRT_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \ - done ; \ - exit 0 - endef - - define Package/ldd/install - for file in $(call qstrip,$(CONFIG_LDD_FILE_SPEC)); do \ - dir=`dirname $$$$file` ; \ - $(INSTALL_DIR) $(1)/$$$$dir ; \ - $(CP) $(call qstrip,$(CONFIG_LDD_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \ - done ; \ - exit 0 - endef - - define Package/ldconfig/install - for file in $(call qstrip,$(CONFIG_LDCONFIG_FILE_SPEC)); do \ - dir=`dirname $$$$file` ; \ - $(INSTALL_DIR) $(1)/$$$$dir ; \ - $(CP) $(call qstrip,$(CONFIG_LDCONFIG_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \ - done ; \ - exit 0 - endef - -endif - ifneq ($(DUMP),1) -include $(PLATFORM_DIR)/base-files.mk endif $(eval $(call BuildPackage,base-files)) -$(eval $(call BuildPackage,libc)) -$(eval $(call BuildPackage,libgcc)) -$(eval $(call BuildPackage,libssp)) -$(eval $(call BuildPackage,libstdcpp)) -$(eval $(call BuildPackage,libpthread)) -$(eval $(call BuildPackage,librt)) -$(eval $(call BuildPackage,libgfortran)) -$(eval $(call BuildPackage,ldd)) -$(eval $(call BuildPackage,ldconfig)) diff --git a/package/busybox/Config.in b/package/busybox/Config.in index a954a25c8a..88d1aa213a 100644 --- a/package/busybox/Config.in +++ b/package/busybox/Config.in @@ -19,10 +19,6 @@ config BUSYBOX_CONFIG_HUSH default y if NOMMU default n if !NOMMU -config BUSYBOX_USE_LIBRPC - bool - default y if BUSYBOX_CONFIG_FEATURE_HAVE_RPC - source "package/busybox/config/Config.in" endif diff --git a/package/busybox/Makefile b/package/busybox/Makefile index af27df071b..ef7f51877b 100644 --- a/package/busybox/Makefile +++ b/package/busybox/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=busybox PKG_VERSION:=1.19.4 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_FLAGS:=essential PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 @@ -17,7 +17,7 @@ PKG_SOURCE_URL:=http://www.busybox.net/downloads \ http://distfiles.gentoo.org/distfiles/ PKG_MD5SUM:=9c0cae5a0379228e7b55e5b29528df8e -PKG_BUILD_DEPENDS:=BUSYBOX_USE_LIBRPC:librpc +PKG_BUILD_DEPENDS:=BUSYBOX_CONFIG_FEATURE_HAVE_RPC:librpc PKG_BUILD_PARALLEL:=1 include $(INCLUDE_DIR)/package.mk @@ -37,7 +37,7 @@ define Package/busybox MAINTAINER:=Nicolas Thill TITLE:=Core utilities for embedded Linux URL:=http://busybox.net/ - DEPENDS:=+BUSYBOX_USE_LIBRPC:librpc + DEPENDS:=+BUSYBOX_CONFIG_FEATURE_HAVE_RPC:librpc MENU:=1 endef @@ -66,7 +66,7 @@ ifdef CONFIG_GCC_VERSION_LLVM endif LDLIBS:=m crypt -ifdef CONFIG_BUSYBOX_USE_LIBRPC +ifdef CONFIG_BUSYBOX_CONFIG_FEATURE_HAVE_RPC TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include export LDFLAGS=$(TARGET_LDFLAGS) LDLIBS += rpc diff --git a/package/busybox/patches/251-ash_fix-redir-substitution.patch b/package/busybox/patches/251-ash_fix-redir-substitution.patch new file mode 100644 index 0000000000..cb2ae94e04 --- /dev/null +++ b/package/busybox/patches/251-ash_fix-redir-substitution.patch @@ -0,0 +1,12 @@ +--- a/shell/ash.c ++++ b/shell/ash.c +@@ -6846,8 +6846,7 @@ evalvar(char *p, int flags, struct strli + patloc = expdest - (char *)stackblock(); + if (NULL == subevalvar(p, /* varname: */ NULL, patloc, subtype, + startloc, varflags, +-//TODO: | EXP_REDIR too? All other such places do it too +- /* quotes: */ flags & (EXP_FULL | EXP_CASE), ++ /* quotes: */ flags & (EXP_FULL | EXP_CASE | EXP_REDIR), + var_str_list) + ) { + int amount = expdest - ( diff --git a/package/e2fsprogs/Makefile b/package/e2fsprogs/Makefile index e58d26adef..94d031fb21 100644 --- a/package/e2fsprogs/Makefile +++ b/package/e2fsprogs/Makefile @@ -8,8 +8,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=e2fsprogs -PKG_VERSION:=1.42.2 -PKG_MD5SUM:=04f4561a54ad0419248316a00c016baa +PKG_VERSION:=1.42.3 +PKG_MD5SUM:=73431146f58d40fe1375aba2060f0da8 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz @@ -30,7 +30,7 @@ $(call Package/e2fsprogs/Default) SECTION:=utils CATEGORY:=Utilities TITLE:=Ext2/3/4 filesystem utilities - DEPENDS:=+libblkid +libuuid +libext2fs +libpthread +libcom_err + DEPENDS:=+libblkid +libuuid +libext2fs endef define Package/e2fsprogs/description @@ -41,6 +41,7 @@ endef define Package/libext2fs $(call Package/e2fsprogs/Default) + DEPENDS:=+libcom_err SECTION:=libs CATEGORY:=Libraries TITLE:=ext2/3/4 filesystem library @@ -52,6 +53,7 @@ endef define Package/libcom_err $(call Package/e2fsprogs/Default) + DEPENDS:=+libpthread SECTION:=libs CATEGORY:=Libraries TITLE:=Common error description library diff --git a/package/e2fsprogs/patches/001-link-against-libuuid.patch b/package/e2fsprogs/patches/001-link-against-libuuid.patch index 4b4220c552..e0564dc355 100644 --- a/package/e2fsprogs/patches/001-link-against-libuuid.patch +++ b/package/e2fsprogs/patches/001-link-against-libuuid.patch @@ -1,6 +1,6 @@ --- a/configure +++ b/configure -@@ -5014,7 +5014,7 @@ if test "${ac_cv_lib_blkid_blkid_get_cac +@@ -5038,7 +5038,7 @@ if test "${ac_cv_lib_blkid_blkid_get_cac $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS diff --git a/package/ebtables/Makefile b/package/ebtables/Makefile index de66679021..17c6b37b8f 100644 --- a/package/ebtables/Makefile +++ b/package/ebtables/Makefile @@ -30,6 +30,7 @@ endef define Package/ebtables-utils $(call Package/ebtables) + DEPENDS += ebtables TITLE:=ebtables save/restore utilities endef diff --git a/package/fuse/Makefile b/package/fuse/Makefile index 33a40ecfc2..40edd909c0 100644 --- a/package/fuse/Makefile +++ b/package/fuse/Makefile @@ -65,7 +65,7 @@ $(call Package/fuse/Default) SECTION:=libs CATEGORY:=Libraries TITLE+= (library) - DEPENDS:=+kmod-fuse + DEPENDS:=+kmod-fuse +libpthread SUBMENU:=Filesystem endef diff --git a/package/libubox/Makefile b/package/libubox/Makefile index 0fae4cbef2..2d3c1ee606 100644 --- a/package/libubox/Makefile +++ b/package/libubox/Makefile @@ -26,7 +26,7 @@ define Package/libblobmsg-json SECTION:=libs CATEGORY:=Libraries TITLE:=blobmsg <-> json conversion library - DEPENDS:=+libjson + DEPENDS:=+libjson +libubox endef define Package/jshn diff --git a/package/mac80211/patches/572-ath9k_ani_cleanup_weak_signal_detect.patch b/package/mac80211/patches/572-ath9k_ani_cleanup_weak_signal_detect.patch new file mode 100644 index 0000000000..2e071817f7 --- /dev/null +++ b/package/mac80211/patches/572-ath9k_ani_cleanup_weak_signal_detect.patch @@ -0,0 +1,192 @@ +--- a/drivers/net/wireless/ath/ath9k/ani.c ++++ b/drivers/net/wireless/ath/ath9k/ani.c +@@ -185,7 +185,7 @@ static void ath9k_hw_ani_ofdm_err_trigge + } + rssi = BEACON_RSSI(ah); + if (rssi > aniState->rssiThrHigh) { +- if (!aniState->ofdmWeakSigDetectOff) { ++ if (aniState->ofdmWeakSigDetect) { + if (ath9k_hw_ani_control(ah, + ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION, + false)) { +@@ -200,7 +200,7 @@ static void ath9k_hw_ani_ofdm_err_trigge + return; + } + } else if (rssi > aniState->rssiThrLow) { +- if (aniState->ofdmWeakSigDetectOff) ++ if (!aniState->ofdmWeakSigDetect) + ath9k_hw_ani_control(ah, + ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION, + true); +@@ -211,7 +211,7 @@ static void ath9k_hw_ani_ofdm_err_trigge + } else { + if ((conf->channel->band == IEEE80211_BAND_2GHZ) && + !conf_is_ht(conf)) { +- if (!aniState->ofdmWeakSigDetectOff) ++ if (aniState->ofdmWeakSigDetect) + ath9k_hw_ani_control(ah, + ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION, + false); +@@ -296,7 +296,7 @@ static void ath9k_hw_set_ofdm_nil(struct + BEACON_RSSI(ah) <= aniState->rssiThrHigh) + weak_sig = true; + +- if (!aniState->ofdmWeakSigDetectOff != weak_sig) ++ if (aniState->ofdmWeakSigDetect != weak_sig) + ath9k_hw_ani_control(ah, + ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION, + entry_ofdm->ofdm_weak_signal_on); +@@ -401,7 +401,7 @@ static void ath9k_hw_ani_lower_immunity_ + if (rssi > aniState->rssiThrHigh) { + /* XXX: Handle me */ + } else if (rssi > aniState->rssiThrLow) { +- if (aniState->ofdmWeakSigDetectOff) { ++ if (!aniState->ofdmWeakSigDetect) { + if (ath9k_hw_ani_control(ah, + ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION, + true)) +@@ -509,9 +509,9 @@ static void ath9k_ani_reset_old(struct a + if (aniState->spurImmunityLevel != 0) + ath9k_hw_ani_control(ah, ATH9K_ANI_SPUR_IMMUNITY_LEVEL, + aniState->spurImmunityLevel); +- if (aniState->ofdmWeakSigDetectOff) ++ if (!aniState->ofdmWeakSigDetect) + ath9k_hw_ani_control(ah, ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION, +- !aniState->ofdmWeakSigDetectOff); ++ aniState->ofdmWeakSigDetect); + if (aniState->cckWeakSigThreshold) + ath9k_hw_ani_control(ah, ATH9K_ANI_CCK_WEAK_SIGNAL_THR, + aniState->cckWeakSigThreshold); +@@ -887,8 +887,7 @@ void ath9k_hw_ani_init(struct ath_hw *ah + + ani->rssiThrHigh = ATH9K_ANI_RSSI_THR_HIGH; + ani->rssiThrLow = ATH9K_ANI_RSSI_THR_LOW; +- ani->ofdmWeakSigDetectOff = +- !ATH9K_ANI_USE_OFDM_WEAK_SIG; ++ ani->ofdmWeakSigDetect = ATH9K_ANI_USE_OFDM_WEAK_SIG; + ani->cckNoiseImmunityLevel = ATH9K_ANI_CCK_DEF_LEVEL; + ani->ofdmNoiseImmunityLevel = ATH9K_ANI_OFDM_DEF_LEVEL; + ani->update_ani = false; +--- a/drivers/net/wireless/ath/ath9k/ani.h ++++ b/drivers/net/wireless/ath/ath9k/ani.h +@@ -122,7 +122,7 @@ struct ar5416AniState { + u8 mrcCCKOff; + u8 spurImmunityLevel; + u8 firstepLevel; +- u8 ofdmWeakSigDetectOff; ++ u8 ofdmWeakSigDetect; + u8 cckWeakSigThreshold; + bool update_ani; + u32 listenTime; +--- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c ++++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c +@@ -1042,12 +1042,12 @@ static bool ar5008_hw_ani_control_old(st + REG_CLR_BIT(ah, AR_PHY_SFCORR_LOW, + AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW); + +- if (!on != aniState->ofdmWeakSigDetectOff) { ++ if (on != aniState->ofdmWeakSigDetect) { + if (on) + ah->stats.ast_ani_ofdmon++; + else + ah->stats.ast_ani_ofdmoff++; +- aniState->ofdmWeakSigDetectOff = !on; ++ aniState->ofdmWeakSigDetect = on; + } + break; + } +@@ -1114,10 +1114,10 @@ static bool ar5008_hw_ani_control_old(st + + ath_dbg(common, ANI, "ANI parameters:\n"); + ath_dbg(common, ANI, +- "noiseImmunityLevel=%d, spurImmunityLevel=%d, ofdmWeakSigDetectOff=%d\n", ++ "noiseImmunityLevel=%d, spurImmunityLevel=%d, ofdmWeakSigDetect=%d\n", + aniState->noiseImmunityLevel, + aniState->spurImmunityLevel, +- !aniState->ofdmWeakSigDetectOff); ++ aniState->ofdmWeakSigDetect); + ath_dbg(common, ANI, + "cckWeakSigThreshold=%d, firstepLevel=%d, listenTime=%d\n", + aniState->cckWeakSigThreshold, +@@ -1206,18 +1206,18 @@ static bool ar5008_hw_ani_control_new(st + REG_CLR_BIT(ah, AR_PHY_SFCORR_LOW, + AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW); + +- if (!on != aniState->ofdmWeakSigDetectOff) { ++ if (on != aniState->ofdmWeakSigDetect) { + ath_dbg(common, ANI, + "** ch %d: ofdm weak signal: %s=>%s\n", + chan->channel, +- !aniState->ofdmWeakSigDetectOff ? ++ aniState->ofdmWeakSigDetect ? + "on" : "off", + on ? "on" : "off"); + if (on) + ah->stats.ast_ani_ofdmon++; + else + ah->stats.ast_ani_ofdmoff++; +- aniState->ofdmWeakSigDetectOff = !on; ++ aniState->ofdmWeakSigDetect = on; + } + break; + } +@@ -1367,7 +1367,7 @@ static bool ar5008_hw_ani_control_new(st + ath_dbg(common, ANI, + "ANI parameters: SI=%d, ofdmWS=%s FS=%d MRCcck=%s listenTime=%d ofdmErrs=%d cckErrs=%d\n", + aniState->spurImmunityLevel, +- !aniState->ofdmWeakSigDetectOff ? "on" : "off", ++ aniState->ofdmWeakSigDetect ? "on" : "off", + aniState->firstepLevel, + !aniState->mrcCCKOff ? "on" : "off", + aniState->listenTime, +@@ -1456,7 +1456,7 @@ static void ar5008_hw_ani_cache_ini_regs + /* these levels just got reset to defaults by the INI */ + aniState->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL_NEW; + aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_NEW; +- aniState->ofdmWeakSigDetectOff = !ATH9K_ANI_USE_OFDM_WEAK_SIG; ++ aniState->ofdmWeakSigDetect = ATH9K_ANI_USE_OFDM_WEAK_SIG; + aniState->mrcCCKOff = true; /* not available on pre AR9003 */ + } + +--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c ++++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c +@@ -821,18 +821,18 @@ static bool ar9003_hw_ani_control(struct + REG_CLR_BIT(ah, AR_PHY_SFCORR_LOW, + AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW); + +- if (!on != aniState->ofdmWeakSigDetectOff) { ++ if (on != aniState->ofdmWeakSigDetect) { + ath_dbg(common, ANI, + "** ch %d: ofdm weak signal: %s=>%s\n", + chan->channel, +- !aniState->ofdmWeakSigDetectOff ? ++ aniState->ofdmWeakSigDetect ? + "on" : "off", + on ? "on" : "off"); + if (on) + ah->stats.ast_ani_ofdmon++; + else + ah->stats.ast_ani_ofdmoff++; +- aniState->ofdmWeakSigDetectOff = !on; ++ aniState->ofdmWeakSigDetect = on; + } + break; + } +@@ -998,7 +998,7 @@ static bool ar9003_hw_ani_control(struct + ath_dbg(common, ANI, + "ANI parameters: SI=%d, ofdmWS=%s FS=%d MRCcck=%s listenTime=%d ofdmErrs=%d cckErrs=%d\n", + aniState->spurImmunityLevel, +- !aniState->ofdmWeakSigDetectOff ? "on" : "off", ++ aniState->ofdmWeakSigDetect ? "on" : "off", + aniState->firstepLevel, + !aniState->mrcCCKOff ? "on" : "off", + aniState->listenTime, +@@ -1109,7 +1109,7 @@ static void ar9003_hw_ani_cache_ini_regs + /* these levels just got reset to defaults by the INI */ + aniState->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL_NEW; + aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_NEW; +- aniState->ofdmWeakSigDetectOff = !ATH9K_ANI_USE_OFDM_WEAK_SIG; ++ aniState->ofdmWeakSigDetect = ATH9K_ANI_USE_OFDM_WEAK_SIG; + aniState->mrcCCKOff = !ATH9K_ANI_ENABLE_MRC_CCK; + } + diff --git a/package/mac80211/patches/573-ath9k_ani_fix_mode_checks.patch b/package/mac80211/patches/573-ath9k_ani_fix_mode_checks.patch new file mode 100644 index 0000000000..7596996141 --- /dev/null +++ b/package/mac80211/patches/573-ath9k_ani_fix_mode_checks.patch @@ -0,0 +1,49 @@ +--- a/drivers/net/wireless/ath/ath9k/ani.c ++++ b/drivers/net/wireless/ath/ath9k/ani.c +@@ -176,7 +176,7 @@ static void ath9k_hw_ani_ofdm_err_trigge + } + } + +- if (ah->opmode == NL80211_IFTYPE_AP) { ++ if (ah->opmode != NL80211_IFTYPE_STATION) { + if (aniState->firstepLevel < HAL_FIRST_STEP_MAX) { + ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL, + aniState->firstepLevel + 1); +@@ -236,7 +236,7 @@ static void ath9k_hw_ani_cck_err_trigger + return; + } + } +- if (ah->opmode == NL80211_IFTYPE_AP) { ++ if (ah->opmode != NL80211_IFTYPE_STATION) { + if (aniState->firstepLevel < HAL_FIRST_STEP_MAX) { + ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL, + aniState->firstepLevel + 1); +@@ -335,8 +335,7 @@ static void ath9k_hw_set_cck_nil(struct + BEACON_RSSI(ah), aniState->rssiThrLow, + aniState->rssiThrHigh); + +- if ((ah->opmode == NL80211_IFTYPE_STATION || +- ah->opmode == NL80211_IFTYPE_ADHOC) && ++ if (ah->opmode == NL80211_IFTYPE_STATION && + BEACON_RSSI(ah) <= aniState->rssiThrLow && + immunityLevel > ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI) + immunityLevel = ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI; +@@ -390,7 +389,7 @@ static void ath9k_hw_ani_lower_immunity_ + + aniState = &ah->curchan->ani; + +- if (ah->opmode == NL80211_IFTYPE_AP) { ++ if (ah->opmode != NL80211_IFTYPE_STATION) { + if (aniState->firstepLevel > 0) { + if (ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL, + aniState->firstepLevel - 1)) +@@ -474,8 +473,7 @@ static void ath9k_ani_reset_old(struct a + + aniState = &ah->curchan->ani; + +- if (ah->opmode != NL80211_IFTYPE_STATION +- && ah->opmode != NL80211_IFTYPE_ADHOC) { ++ if (ah->opmode != NL80211_IFTYPE_STATION) { + ath_dbg(common, ANI, "Reset ANI state opmode %u\n", ah->opmode); + ah->stats.ast_ani_reset++; + diff --git a/package/mac80211/patches/574-ath9k_remove_old_ani.patch b/package/mac80211/patches/574-ath9k_remove_old_ani.patch new file mode 100644 index 0000000000..e90e48c7d2 --- /dev/null +++ b/package/mac80211/patches/574-ath9k_remove_old_ani.patch @@ -0,0 +1,627 @@ +--- a/drivers/net/wireless/ath/ath9k/ani.c ++++ b/drivers/net/wireless/ath/ath9k/ani.c +@@ -104,11 +104,6 @@ static const struct ani_cck_level_entry + #define ATH9K_ANI_CCK_DEF_LEVEL \ + 2 /* default level - matches the INI settings */ + +-static bool use_new_ani(struct ath_hw *ah) +-{ +- return AR_SREV_9300_20_OR_LATER(ah) || modparam_force_new_ani; +-} +- + static void ath9k_hw_update_mibstats(struct ath_hw *ah, + struct ath9k_mib_stats *stats) + { +@@ -131,11 +126,6 @@ static void ath9k_ani_restart(struct ath + aniState = &ah->curchan->ani; + aniState->listenTime = 0; + +- if (!use_new_ani(ah)) { +- ofdm_base = AR_PHY_COUNTMAX - ah->config.ofdm_trig_high; +- cck_base = AR_PHY_COUNTMAX - ah->config.cck_trig_high; +- } +- + ath_dbg(common, ANI, "Writing ofdmbase=%u cckbase=%u\n", + ofdm_base, cck_base); + +@@ -154,110 +144,6 @@ static void ath9k_ani_restart(struct ath + aniState->cckPhyErrCount = 0; + } + +-static void ath9k_hw_ani_ofdm_err_trigger_old(struct ath_hw *ah) +-{ +- struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf; +- struct ar5416AniState *aniState; +- int32_t rssi; +- +- aniState = &ah->curchan->ani; +- +- if (aniState->noiseImmunityLevel < HAL_NOISE_IMMUNE_MAX) { +- if (ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL, +- aniState->noiseImmunityLevel + 1)) { +- return; +- } +- } +- +- if (aniState->spurImmunityLevel < HAL_SPUR_IMMUNE_MAX) { +- if (ath9k_hw_ani_control(ah, ATH9K_ANI_SPUR_IMMUNITY_LEVEL, +- aniState->spurImmunityLevel + 1)) { +- return; +- } +- } +- +- if (ah->opmode != NL80211_IFTYPE_STATION) { +- if (aniState->firstepLevel < HAL_FIRST_STEP_MAX) { +- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL, +- aniState->firstepLevel + 1); +- } +- return; +- } +- rssi = BEACON_RSSI(ah); +- if (rssi > aniState->rssiThrHigh) { +- if (aniState->ofdmWeakSigDetect) { +- if (ath9k_hw_ani_control(ah, +- ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION, +- false)) { +- ath9k_hw_ani_control(ah, +- ATH9K_ANI_SPUR_IMMUNITY_LEVEL, 0); +- return; +- } +- } +- if (aniState->firstepLevel < HAL_FIRST_STEP_MAX) { +- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL, +- aniState->firstepLevel + 1); +- return; +- } +- } else if (rssi > aniState->rssiThrLow) { +- if (!aniState->ofdmWeakSigDetect) +- ath9k_hw_ani_control(ah, +- ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION, +- true); +- if (aniState->firstepLevel < HAL_FIRST_STEP_MAX) +- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL, +- aniState->firstepLevel + 1); +- return; +- } else { +- if ((conf->channel->band == IEEE80211_BAND_2GHZ) && +- !conf_is_ht(conf)) { +- if (aniState->ofdmWeakSigDetect) +- ath9k_hw_ani_control(ah, +- ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION, +- false); +- if (aniState->firstepLevel > 0) +- ath9k_hw_ani_control(ah, +- ATH9K_ANI_FIRSTEP_LEVEL, 0); +- return; +- } +- } +-} +- +-static void ath9k_hw_ani_cck_err_trigger_old(struct ath_hw *ah) +-{ +- struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf; +- struct ar5416AniState *aniState; +- int32_t rssi; +- +- aniState = &ah->curchan->ani; +- if (aniState->noiseImmunityLevel < HAL_NOISE_IMMUNE_MAX) { +- if (ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL, +- aniState->noiseImmunityLevel + 1)) { +- return; +- } +- } +- if (ah->opmode != NL80211_IFTYPE_STATION) { +- if (aniState->firstepLevel < HAL_FIRST_STEP_MAX) { +- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL, +- aniState->firstepLevel + 1); +- } +- return; +- } +- rssi = BEACON_RSSI(ah); +- if (rssi > aniState->rssiThrLow) { +- if (aniState->firstepLevel < HAL_FIRST_STEP_MAX) +- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL, +- aniState->firstepLevel + 1); +- } else { +- if ((conf->channel->band == IEEE80211_BAND_2GHZ) && +- !conf_is_ht(conf)) { +- if (aniState->firstepLevel > 0) +- ath9k_hw_ani_control(ah, +- ATH9K_ANI_FIRSTEP_LEVEL, 0); +- } +- } +-} +- + /* Adjust the OFDM Noise Immunity Level */ + static void ath9k_hw_set_ofdm_nil(struct ath_hw *ah, u8 immunityLevel) + { +@@ -309,11 +195,6 @@ static void ath9k_hw_ani_ofdm_err_trigge + if (!DO_ANI(ah)) + return; + +- if (!use_new_ani(ah)) { +- ath9k_hw_ani_ofdm_err_trigger_old(ah); +- return; +- } +- + aniState = &ah->curchan->ani; + + if (aniState->ofdmNoiseImmunityLevel < ATH9K_ANI_OFDM_MAX_LEVEL) +@@ -371,70 +252,12 @@ static void ath9k_hw_ani_cck_err_trigger + if (!DO_ANI(ah)) + return; + +- if (!use_new_ani(ah)) { +- ath9k_hw_ani_cck_err_trigger_old(ah); +- return; +- } +- + aniState = &ah->curchan->ani; + + if (aniState->cckNoiseImmunityLevel < ATH9K_ANI_CCK_MAX_LEVEL) + ath9k_hw_set_cck_nil(ah, aniState->cckNoiseImmunityLevel + 1); + } + +-static void ath9k_hw_ani_lower_immunity_old(struct ath_hw *ah) +-{ +- struct ar5416AniState *aniState; +- int32_t rssi; +- +- aniState = &ah->curchan->ani; +- +- if (ah->opmode != NL80211_IFTYPE_STATION) { +- if (aniState->firstepLevel > 0) { +- if (ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL, +- aniState->firstepLevel - 1)) +- return; +- } +- } else { +- rssi = BEACON_RSSI(ah); +- if (rssi > aniState->rssiThrHigh) { +- /* XXX: Handle me */ +- } else if (rssi > aniState->rssiThrLow) { +- if (!aniState->ofdmWeakSigDetect) { +- if (ath9k_hw_ani_control(ah, +- ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION, +- true)) +- return; +- } +- if (aniState->firstepLevel > 0) { +- if (ath9k_hw_ani_control(ah, +- ATH9K_ANI_FIRSTEP_LEVEL, +- aniState->firstepLevel - 1)) +- return; +- } +- } else { +- if (aniState->firstepLevel > 0) { +- if (ath9k_hw_ani_control(ah, +- ATH9K_ANI_FIRSTEP_LEVEL, +- aniState->firstepLevel - 1)) +- return; +- } +- } +- } +- +- if (aniState->spurImmunityLevel > 0) { +- if (ath9k_hw_ani_control(ah, ATH9K_ANI_SPUR_IMMUNITY_LEVEL, +- aniState->spurImmunityLevel - 1)) +- return; +- } +- +- if (aniState->noiseImmunityLevel > 0) { +- ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL, +- aniState->noiseImmunityLevel - 1); +- return; +- } +-} +- + /* + * only lower either OFDM or CCK errors per turn + * we lower the other one next time +@@ -445,11 +268,6 @@ static void ath9k_hw_ani_lower_immunity( + + aniState = &ah->curchan->ani; + +- if (!use_new_ani(ah)) { +- ath9k_hw_ani_lower_immunity_old(ah); +- return; +- } +- + /* lower OFDM noise immunity */ + if (aniState->ofdmNoiseImmunityLevel > 0 && + (aniState->ofdmsTurn || aniState->cckNoiseImmunityLevel == 0)) { +@@ -462,71 +280,6 @@ static void ath9k_hw_ani_lower_immunity( + ath9k_hw_set_cck_nil(ah, aniState->cckNoiseImmunityLevel - 1); + } + +-static void ath9k_ani_reset_old(struct ath_hw *ah, bool is_scanning) +-{ +- struct ar5416AniState *aniState; +- struct ath9k_channel *chan = ah->curchan; +- struct ath_common *common = ath9k_hw_common(ah); +- +- if (!DO_ANI(ah)) +- return; +- +- aniState = &ah->curchan->ani; +- +- if (ah->opmode != NL80211_IFTYPE_STATION) { +- ath_dbg(common, ANI, "Reset ANI state opmode %u\n", ah->opmode); +- ah->stats.ast_ani_reset++; +- +- if (ah->opmode == NL80211_IFTYPE_AP) { +- /* +- * ath9k_hw_ani_control() will only process items set on +- * ah->ani_function +- */ +- if (IS_CHAN_2GHZ(chan)) +- ah->ani_function = (ATH9K_ANI_SPUR_IMMUNITY_LEVEL | +- ATH9K_ANI_FIRSTEP_LEVEL); +- else +- ah->ani_function = 0; +- } +- +- ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL, 0); +- ath9k_hw_ani_control(ah, ATH9K_ANI_SPUR_IMMUNITY_LEVEL, 0); +- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL, 0); +- ath9k_hw_ani_control(ah, ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION, +- !ATH9K_ANI_USE_OFDM_WEAK_SIG); +- ath9k_hw_ani_control(ah, ATH9K_ANI_CCK_WEAK_SIGNAL_THR, +- ATH9K_ANI_CCK_WEAK_SIG_THR); +- +- ath9k_ani_restart(ah); +- return; +- } +- +- if (aniState->noiseImmunityLevel != 0) +- ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL, +- aniState->noiseImmunityLevel); +- if (aniState->spurImmunityLevel != 0) +- ath9k_hw_ani_control(ah, ATH9K_ANI_SPUR_IMMUNITY_LEVEL, +- aniState->spurImmunityLevel); +- if (!aniState->ofdmWeakSigDetect) +- ath9k_hw_ani_control(ah, ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION, +- aniState->ofdmWeakSigDetect); +- if (aniState->cckWeakSigThreshold) +- ath9k_hw_ani_control(ah, ATH9K_ANI_CCK_WEAK_SIGNAL_THR, +- aniState->cckWeakSigThreshold); +- if (aniState->firstepLevel != 0) +- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL, +- aniState->firstepLevel); +- +- ath9k_ani_restart(ah); +- +- ENABLE_REGWRITE_BUFFER(ah); +- +- REG_WRITE(ah, AR_PHY_ERR_MASK_1, AR_PHY_ERR_OFDM_TIMING); +- REG_WRITE(ah, AR_PHY_ERR_MASK_2, AR_PHY_ERR_CCK_TIMING); +- +- REGWRITE_BUFFER_FLUSH(ah); +-} +- + /* + * Restore the ANI parameters in the HAL and reset the statistics. + * This routine should be called for every hardware reset and for +@@ -541,9 +294,6 @@ void ath9k_ani_reset(struct ath_hw *ah, + if (!DO_ANI(ah)) + return; + +- if (!use_new_ani(ah)) +- return ath9k_ani_reset_old(ah, is_scanning); +- + BUG_ON(aniState == NULL); + ah->stats.ast_ani_reset++; + +@@ -640,11 +390,6 @@ static bool ath9k_hw_ani_read_counters(s + return false; + } + +- if (!use_new_ani(ah)) { +- ofdm_base = AR_PHY_COUNTMAX - ah->config.ofdm_trig_high; +- cck_base = AR_PHY_COUNTMAX - ah->config.cck_trig_high; +- } +- + aniState->listenTime += listenTime; + + ath9k_hw_update_mibstats(ah, &ah->ah_mibStats); +@@ -652,26 +397,6 @@ static bool ath9k_hw_ani_read_counters(s + phyCnt1 = REG_READ(ah, AR_PHY_ERR_1); + phyCnt2 = REG_READ(ah, AR_PHY_ERR_2); + +- if (!use_new_ani(ah) && (phyCnt1 < ofdm_base || phyCnt2 < cck_base)) { +- if (phyCnt1 < ofdm_base) { +- ath_dbg(common, ANI, +- "phyCnt1 0x%x, resetting counter value to 0x%x\n", +- phyCnt1, ofdm_base); +- REG_WRITE(ah, AR_PHY_ERR_1, ofdm_base); +- REG_WRITE(ah, AR_PHY_ERR_MASK_1, +- AR_PHY_ERR_OFDM_TIMING); +- } +- if (phyCnt2 < cck_base) { +- ath_dbg(common, ANI, +- "phyCnt2 0x%x, resetting counter value to 0x%x\n", +- phyCnt2, cck_base); +- REG_WRITE(ah, AR_PHY_ERR_2, cck_base); +- REG_WRITE(ah, AR_PHY_ERR_MASK_2, +- AR_PHY_ERR_CCK_TIMING); +- } +- return false; +- } +- + ofdmPhyErrCnt = phyCnt1 - ofdm_base; + ah->stats.ast_ani_ofdmerrs += + ofdmPhyErrCnt - aniState->ofdmPhyErrCount; +@@ -810,9 +535,6 @@ void ath9k_hw_proc_mib_event(struct ath_ + if (((phyCnt1 & AR_MIBCNT_INTRMASK) == AR_MIBCNT_INTRMASK) || + ((phyCnt2 & AR_MIBCNT_INTRMASK) == AR_MIBCNT_INTRMASK)) { + +- if (!use_new_ani(ah)) +- ath9k_hw_ani_read_counters(ah); +- + /* NB: always restart to insure the h/w counters are reset */ + ath9k_ani_restart(ah); + } +@@ -843,45 +565,28 @@ void ath9k_hw_ani_init(struct ath_hw *ah + + ath_dbg(common, ANI, "Initialize ANI\n"); + +- if (use_new_ani(ah)) { +- ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH_NEW; +- ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW_NEW; ++ ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH_NEW; ++ ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW_NEW; + +- ah->config.cck_trig_high = ATH9K_ANI_CCK_TRIG_HIGH_NEW; +- ah->config.cck_trig_low = ATH9K_ANI_CCK_TRIG_LOW_NEW; +- } else { +- ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH_OLD; +- ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW_OLD; +- +- ah->config.cck_trig_high = ATH9K_ANI_CCK_TRIG_HIGH_OLD; +- ah->config.cck_trig_low = ATH9K_ANI_CCK_TRIG_LOW_OLD; +- } ++ ah->config.cck_trig_high = ATH9K_ANI_CCK_TRIG_HIGH_NEW; ++ ah->config.cck_trig_low = ATH9K_ANI_CCK_TRIG_LOW_NEW; + + for (i = 0; i < ARRAY_SIZE(ah->channels); i++) { + struct ath9k_channel *chan = &ah->channels[i]; + struct ar5416AniState *ani = &chan->ani; + +- if (use_new_ani(ah)) { +- ani->spurImmunityLevel = +- ATH9K_ANI_SPUR_IMMUNE_LVL_NEW; ++ ani->spurImmunityLevel = ++ ATH9K_ANI_SPUR_IMMUNE_LVL_NEW; + +- ani->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_NEW; ++ ani->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_NEW; + +- if (AR_SREV_9300_20_OR_LATER(ah)) +- ani->mrcCCKOff = +- !ATH9K_ANI_ENABLE_MRC_CCK; +- else +- ani->mrcCCKOff = true; +- +- ani->ofdmsTurn = true; +- } else { +- ani->spurImmunityLevel = +- ATH9K_ANI_SPUR_IMMUNE_LVL_OLD; +- ani->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_OLD; ++ if (AR_SREV_9300_20_OR_LATER(ah)) ++ ani->mrcCCKOff = ++ !ATH9K_ANI_ENABLE_MRC_CCK; ++ else ++ ani->mrcCCKOff = true; + +- ani->cckWeakSigThreshold = +- ATH9K_ANI_CCK_WEAK_SIG_THR; +- } ++ ani->ofdmsTurn = true; + + ani->rssiThrHigh = ATH9K_ANI_RSSI_THR_HIGH; + ani->rssiThrLow = ATH9K_ANI_RSSI_THR_LOW; +@@ -895,13 +600,8 @@ void ath9k_hw_ani_init(struct ath_hw *ah + * since we expect some ongoing maintenance on the tables, let's sanity + * check here default level should not modify INI setting. + */ +- if (use_new_ani(ah)) { +- ah->aniperiod = ATH9K_ANI_PERIOD_NEW; +- ah->config.ani_poll_interval = ATH9K_ANI_POLLINTERVAL_NEW; +- } else { +- ah->aniperiod = ATH9K_ANI_PERIOD_OLD; +- ah->config.ani_poll_interval = ATH9K_ANI_POLLINTERVAL_OLD; +- } ++ ah->aniperiod = ATH9K_ANI_PERIOD_NEW; ++ ah->config.ani_poll_interval = ATH9K_ANI_POLLINTERVAL_NEW; + + if (ah->config.enable_ani) + ah->proc_phyerr |= HAL_PROCESS_ANI; +--- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c ++++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c +@@ -995,141 +995,6 @@ static u32 ar5008_hw_compute_pll_control + return pll; + } + +-static bool ar5008_hw_ani_control_old(struct ath_hw *ah, +- enum ath9k_ani_cmd cmd, +- int param) +-{ +- struct ar5416AniState *aniState = &ah->curchan->ani; +- struct ath_common *common = ath9k_hw_common(ah); +- +- switch (cmd & ah->ani_function) { +- case ATH9K_ANI_NOISE_IMMUNITY_LEVEL:{ +- u32 level = param; +- +- if (level >= ARRAY_SIZE(ah->totalSizeDesired)) { +- ath_dbg(common, ANI, "level out of range (%u > %zu)\n", +- level, ARRAY_SIZE(ah->totalSizeDesired)); +- return false; +- } +- +- REG_RMW_FIELD(ah, AR_PHY_DESIRED_SZ, +- AR_PHY_DESIRED_SZ_TOT_DES, +- ah->totalSizeDesired[level]); +- REG_RMW_FIELD(ah, AR_PHY_AGC_CTL1, +- AR_PHY_AGC_CTL1_COARSE_LOW, +- ah->coarse_low[level]); +- REG_RMW_FIELD(ah, AR_PHY_AGC_CTL1, +- AR_PHY_AGC_CTL1_COARSE_HIGH, +- ah->coarse_high[level]); +- REG_RMW_FIELD(ah, AR_PHY_FIND_SIG, +- AR_PHY_FIND_SIG_FIRPWR, +- ah->firpwr[level]); +- +- if (level > aniState->noiseImmunityLevel) +- ah->stats.ast_ani_niup++; +- else if (level < aniState->noiseImmunityLevel) +- ah->stats.ast_ani_nidown++; +- aniState->noiseImmunityLevel = level; +- break; +- } +- case ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION:{ +- u32 on = param ? 1 : 0; +- +- if (on) +- REG_SET_BIT(ah, AR_PHY_SFCORR_LOW, +- AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW); +- else +- REG_CLR_BIT(ah, AR_PHY_SFCORR_LOW, +- AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW); +- +- if (on != aniState->ofdmWeakSigDetect) { +- if (on) +- ah->stats.ast_ani_ofdmon++; +- else +- ah->stats.ast_ani_ofdmoff++; +- aniState->ofdmWeakSigDetect = on; +- } +- break; +- } +- case ATH9K_ANI_CCK_WEAK_SIGNAL_THR:{ +- static const int weakSigThrCck[] = { 8, 6 }; +- u32 high = param ? 1 : 0; +- +- REG_RMW_FIELD(ah, AR_PHY_CCK_DETECT, +- AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK, +- weakSigThrCck[high]); +- if (high != aniState->cckWeakSigThreshold) { +- if (high) +- ah->stats.ast_ani_cckhigh++; +- else +- ah->stats.ast_ani_ccklow++; +- aniState->cckWeakSigThreshold = high; +- } +- break; +- } +- case ATH9K_ANI_FIRSTEP_LEVEL:{ +- static const int firstep[] = { 0, 4, 8 }; +- u32 level = param; +- +- if (level >= ARRAY_SIZE(firstep)) { +- ath_dbg(common, ANI, "level out of range (%u > %zu)\n", +- level, ARRAY_SIZE(firstep)); +- return false; +- } +- REG_RMW_FIELD(ah, AR_PHY_FIND_SIG, +- AR_PHY_FIND_SIG_FIRSTEP, +- firstep[level]); +- if (level > aniState->firstepLevel) +- ah->stats.ast_ani_stepup++; +- else if (level < aniState->firstepLevel) +- ah->stats.ast_ani_stepdown++; +- aniState->firstepLevel = level; +- break; +- } +- case ATH9K_ANI_SPUR_IMMUNITY_LEVEL:{ +- static const int cycpwrThr1[] = { 2, 4, 6, 8, 10, 12, 14, 16 }; +- u32 level = param; +- +- if (level >= ARRAY_SIZE(cycpwrThr1)) { +- ath_dbg(common, ANI, "level out of range (%u > %zu)\n", +- level, ARRAY_SIZE(cycpwrThr1)); +- return false; +- } +- REG_RMW_FIELD(ah, AR_PHY_TIMING5, +- AR_PHY_TIMING5_CYCPWR_THR1, +- cycpwrThr1[level]); +- if (level > aniState->spurImmunityLevel) +- ah->stats.ast_ani_spurup++; +- else if (level < aniState->spurImmunityLevel) +- ah->stats.ast_ani_spurdown++; +- aniState->spurImmunityLevel = level; +- break; +- } +- case ATH9K_ANI_PRESENT: +- break; +- default: +- ath_dbg(common, ANI, "invalid cmd %u\n", cmd); +- return false; +- } +- +- ath_dbg(common, ANI, "ANI parameters:\n"); +- ath_dbg(common, ANI, +- "noiseImmunityLevel=%d, spurImmunityLevel=%d, ofdmWeakSigDetect=%d\n", +- aniState->noiseImmunityLevel, +- aniState->spurImmunityLevel, +- aniState->ofdmWeakSigDetect); +- ath_dbg(common, ANI, +- "cckWeakSigThreshold=%d, firstepLevel=%d, listenTime=%d\n", +- aniState->cckWeakSigThreshold, +- aniState->firstepLevel, +- aniState->listenTime); +- ath_dbg(common, ANI, "ofdmPhyErrCount=%d, cckPhyErrCount=%d\n\n", +- aniState->ofdmPhyErrCount, +- aniState->cckPhyErrCount); +- +- return true; +-} +- + static bool ar5008_hw_ani_control_new(struct ath_hw *ah, + enum ath9k_ani_cmd cmd, + int param) +@@ -1545,11 +1410,8 @@ void ar5008_hw_attach_phy_ops(struct ath + priv_ops->do_getnf = ar5008_hw_do_getnf; + priv_ops->set_radar_params = ar5008_hw_set_radar_params; + +- if (modparam_force_new_ani) { +- priv_ops->ani_control = ar5008_hw_ani_control_new; +- priv_ops->ani_cache_ini_regs = ar5008_hw_ani_cache_ini_regs; +- } else +- priv_ops->ani_control = ar5008_hw_ani_control_old; ++ priv_ops->ani_control = ar5008_hw_ani_control_new; ++ priv_ops->ani_cache_ini_regs = ar5008_hw_ani_cache_ini_regs; + + if (AR_SREV_9100(ah) || AR_SREV_9160_10_OR_LATER(ah)) + priv_ops->compute_pll_control = ar9160_hw_compute_pll_control; +--- a/drivers/net/wireless/ath/ath9k/ar9002_hw.c ++++ b/drivers/net/wireless/ath/ath9k/ar9002_hw.c +@@ -21,10 +21,6 @@ + #include "ar9002_initvals.h" + #include "ar9002_phy.h" + +-int modparam_force_new_ani; +-module_param_named(force_new_ani, modparam_force_new_ani, int, 0444); +-MODULE_PARM_DESC(force_new_ani, "Force new ANI for AR5008, AR9001, AR9002"); +- + /* General hardware code for the A5008/AR9001/AR9002 hadware families */ + + static void ar9002_hw_init_mode_regs(struct ath_hw *ah) +--- a/drivers/net/wireless/ath/ath9k/hw.h ++++ b/drivers/net/wireless/ath/ath9k/hw.h +@@ -1021,14 +1021,7 @@ void ar9002_hw_attach_ops(struct ath_hw + void ar9003_hw_attach_ops(struct ath_hw *ah); + + void ar9002_hw_load_ani_reg(struct ath_hw *ah, struct ath9k_channel *chan); +-/* +- * ANI work can be shared between all families but a next +- * generation implementation of ANI will be used only for AR9003 only +- * for now as the other families still need to be tested with the same +- * next generation ANI. Feel free to start testing it though for the +- * older families (AR5008, AR9001, AR9002) by using modparam_force_new_ani. +- */ +-extern int modparam_force_new_ani; ++ + void ath9k_ani_reset(struct ath_hw *ah, bool is_scanning); + void ath9k_hw_proc_mib_event(struct ath_hw *ah); + void ath9k_hw_ani_monitor(struct ath_hw *ah, struct ath9k_channel *chan); diff --git a/package/mac80211/patches/575-ath9k_ani_cleanup.patch b/package/mac80211/patches/575-ath9k_ani_cleanup.patch new file mode 100644 index 0000000000..1cd85b3d3f --- /dev/null +++ b/package/mac80211/patches/575-ath9k_ani_cleanup.patch @@ -0,0 +1,320 @@ +--- a/drivers/net/wireless/ath/ath9k/ani.c ++++ b/drivers/net/wireless/ath/ath9k/ani.c +@@ -117,8 +117,6 @@ static void ath9k_hw_update_mibstats(str + static void ath9k_ani_restart(struct ath_hw *ah) + { + struct ar5416AniState *aniState; +- struct ath_common *common = ath9k_hw_common(ah); +- u32 ofdm_base = 0, cck_base = 0; + + if (!DO_ANI(ah)) + return; +@@ -126,13 +124,10 @@ static void ath9k_ani_restart(struct ath + aniState = &ah->curchan->ani; + aniState->listenTime = 0; + +- ath_dbg(common, ANI, "Writing ofdmbase=%u cckbase=%u\n", +- ofdm_base, cck_base); +- + ENABLE_REGWRITE_BUFFER(ah); + +- REG_WRITE(ah, AR_PHY_ERR_1, ofdm_base); +- REG_WRITE(ah, AR_PHY_ERR_2, cck_base); ++ REG_WRITE(ah, AR_PHY_ERR_1, 0); ++ REG_WRITE(ah, AR_PHY_ERR_2, 0); + REG_WRITE(ah, AR_PHY_ERR_MASK_1, AR_PHY_ERR_OFDM_TIMING); + REG_WRITE(ah, AR_PHY_ERR_MASK_2, AR_PHY_ERR_CCK_TIMING); + +@@ -375,9 +370,6 @@ static bool ath9k_hw_ani_read_counters(s + { + struct ath_common *common = ath9k_hw_common(ah); + struct ar5416AniState *aniState = &ah->curchan->ani; +- u32 ofdm_base = 0; +- u32 cck_base = 0; +- u32 ofdmPhyErrCnt, cckPhyErrCnt; + u32 phyCnt1, phyCnt2; + int32_t listenTime; + +@@ -397,15 +389,12 @@ static bool ath9k_hw_ani_read_counters(s + phyCnt1 = REG_READ(ah, AR_PHY_ERR_1); + phyCnt2 = REG_READ(ah, AR_PHY_ERR_2); + +- ofdmPhyErrCnt = phyCnt1 - ofdm_base; +- ah->stats.ast_ani_ofdmerrs += +- ofdmPhyErrCnt - aniState->ofdmPhyErrCount; +- aniState->ofdmPhyErrCount = ofdmPhyErrCnt; +- +- cckPhyErrCnt = phyCnt2 - cck_base; +- ah->stats.ast_ani_cckerrs += +- cckPhyErrCnt - aniState->cckPhyErrCount; +- aniState->cckPhyErrCount = cckPhyErrCnt; ++ ah->stats.ast_ani_ofdmerrs += phyCnt1 - aniState->ofdmPhyErrCount; ++ aniState->ofdmPhyErrCount = phyCnt1; ++ ++ ah->stats.ast_ani_cckerrs += phyCnt2 - aniState->cckPhyErrCount; ++ aniState->cckPhyErrCount = phyCnt2; ++ + return true; + } + +@@ -565,20 +554,19 @@ void ath9k_hw_ani_init(struct ath_hw *ah + + ath_dbg(common, ANI, "Initialize ANI\n"); + +- ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH_NEW; +- ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW_NEW; ++ ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH; ++ ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW; + +- ah->config.cck_trig_high = ATH9K_ANI_CCK_TRIG_HIGH_NEW; +- ah->config.cck_trig_low = ATH9K_ANI_CCK_TRIG_LOW_NEW; ++ ah->config.cck_trig_high = ATH9K_ANI_CCK_TRIG_HIGH; ++ ah->config.cck_trig_low = ATH9K_ANI_CCK_TRIG_LOW; + + for (i = 0; i < ARRAY_SIZE(ah->channels); i++) { + struct ath9k_channel *chan = &ah->channels[i]; + struct ar5416AniState *ani = &chan->ani; + +- ani->spurImmunityLevel = +- ATH9K_ANI_SPUR_IMMUNE_LVL_NEW; ++ ani->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL; + +- ani->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_NEW; ++ ani->firstepLevel = ATH9K_ANI_FIRSTEP_LVL; + + if (AR_SREV_9300_20_OR_LATER(ah)) + ani->mrcCCKOff = +@@ -600,8 +588,8 @@ void ath9k_hw_ani_init(struct ath_hw *ah + * since we expect some ongoing maintenance on the tables, let's sanity + * check here default level should not modify INI setting. + */ +- ah->aniperiod = ATH9K_ANI_PERIOD_NEW; +- ah->config.ani_poll_interval = ATH9K_ANI_POLLINTERVAL_NEW; ++ ah->aniperiod = ATH9K_ANI_PERIOD; ++ ah->config.ani_poll_interval = ATH9K_ANI_POLLINTERVAL; + + if (ah->config.enable_ani) + ah->proc_phyerr |= HAL_PROCESS_ANI; +--- a/drivers/net/wireless/ath/ath9k/ani.h ++++ b/drivers/net/wireless/ath/ath9k/ani.h +@@ -24,42 +24,34 @@ + #define BEACON_RSSI(ahp) (ahp->stats.avgbrssi) + + /* units are errors per second */ +-#define ATH9K_ANI_OFDM_TRIG_HIGH_OLD 500 +-#define ATH9K_ANI_OFDM_TRIG_HIGH_NEW 3500 ++#define ATH9K_ANI_OFDM_TRIG_HIGH 3500 + #define ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI 1000 + + /* units are errors per second */ +-#define ATH9K_ANI_OFDM_TRIG_LOW_OLD 200 +-#define ATH9K_ANI_OFDM_TRIG_LOW_NEW 400 ++#define ATH9K_ANI_OFDM_TRIG_LOW 400 + #define ATH9K_ANI_OFDM_TRIG_LOW_ABOVE_INI 900 + + /* units are errors per second */ +-#define ATH9K_ANI_CCK_TRIG_HIGH_OLD 200 +-#define ATH9K_ANI_CCK_TRIG_HIGH_NEW 600 ++#define ATH9K_ANI_CCK_TRIG_HIGH 600 + + /* units are errors per second */ +-#define ATH9K_ANI_CCK_TRIG_LOW_OLD 100 +-#define ATH9K_ANI_CCK_TRIG_LOW_NEW 300 ++#define ATH9K_ANI_CCK_TRIG_LOW 300 + + #define ATH9K_ANI_NOISE_IMMUNE_LVL 4 + #define ATH9K_ANI_USE_OFDM_WEAK_SIG true + #define ATH9K_ANI_CCK_WEAK_SIG_THR false + +-#define ATH9K_ANI_SPUR_IMMUNE_LVL_OLD 7 +-#define ATH9K_ANI_SPUR_IMMUNE_LVL_NEW 3 ++#define ATH9K_ANI_SPUR_IMMUNE_LVL 3 + +-#define ATH9K_ANI_FIRSTEP_LVL_OLD 0 +-#define ATH9K_ANI_FIRSTEP_LVL_NEW 2 ++#define ATH9K_ANI_FIRSTEP_LVL 2 + + #define ATH9K_ANI_RSSI_THR_HIGH 40 + #define ATH9K_ANI_RSSI_THR_LOW 7 + +-#define ATH9K_ANI_PERIOD_OLD 100 +-#define ATH9K_ANI_PERIOD_NEW 300 ++#define ATH9K_ANI_PERIOD 300 + + /* in ms */ +-#define ATH9K_ANI_POLLINTERVAL_OLD 100 +-#define ATH9K_ANI_POLLINTERVAL_NEW 1000 ++#define ATH9K_ANI_POLLINTERVAL 1000 + + #define HAL_NOISE_IMMUNE_MAX 4 + #define HAL_SPUR_IMMUNE_MAX 7 +--- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c ++++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c +@@ -1101,7 +1101,7 @@ static bool ar5008_hw_ani_control_new(st + * from INI file & cap value + */ + value = firstep_table[level] - +- firstep_table[ATH9K_ANI_FIRSTEP_LVL_NEW] + ++ firstep_table[ATH9K_ANI_FIRSTEP_LVL] + + aniState->iniDef.firstep; + if (value < ATH9K_SIG_FIRSTEP_SETTING_MIN) + value = ATH9K_SIG_FIRSTEP_SETTING_MIN; +@@ -1116,7 +1116,7 @@ static bool ar5008_hw_ani_control_new(st + * from INI file & cap value + */ + value2 = firstep_table[level] - +- firstep_table[ATH9K_ANI_FIRSTEP_LVL_NEW] + ++ firstep_table[ATH9K_ANI_FIRSTEP_LVL] + + aniState->iniDef.firstepLow; + if (value2 < ATH9K_SIG_FIRSTEP_SETTING_MIN) + value2 = ATH9K_SIG_FIRSTEP_SETTING_MIN; +@@ -1132,7 +1132,7 @@ static bool ar5008_hw_ani_control_new(st + chan->channel, + aniState->firstepLevel, + level, +- ATH9K_ANI_FIRSTEP_LVL_NEW, ++ ATH9K_ANI_FIRSTEP_LVL, + value, + aniState->iniDef.firstep); + ath_dbg(common, ANI, +@@ -1140,7 +1140,7 @@ static bool ar5008_hw_ani_control_new(st + chan->channel, + aniState->firstepLevel, + level, +- ATH9K_ANI_FIRSTEP_LVL_NEW, ++ ATH9K_ANI_FIRSTEP_LVL, + value2, + aniState->iniDef.firstepLow); + if (level > aniState->firstepLevel) +@@ -1165,7 +1165,7 @@ static bool ar5008_hw_ani_control_new(st + * from INI file & cap value + */ + value = cycpwrThr1_table[level] - +- cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL_NEW] + ++ cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL] + + aniState->iniDef.cycpwrThr1; + if (value < ATH9K_SIG_SPUR_IMM_SETTING_MIN) + value = ATH9K_SIG_SPUR_IMM_SETTING_MIN; +@@ -1181,7 +1181,7 @@ static bool ar5008_hw_ani_control_new(st + * from INI file & cap value + */ + value2 = cycpwrThr1_table[level] - +- cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL_NEW] + ++ cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL] + + aniState->iniDef.cycpwrThr1Ext; + if (value2 < ATH9K_SIG_SPUR_IMM_SETTING_MIN) + value2 = ATH9K_SIG_SPUR_IMM_SETTING_MIN; +@@ -1196,7 +1196,7 @@ static bool ar5008_hw_ani_control_new(st + chan->channel, + aniState->spurImmunityLevel, + level, +- ATH9K_ANI_SPUR_IMMUNE_LVL_NEW, ++ ATH9K_ANI_SPUR_IMMUNE_LVL, + value, + aniState->iniDef.cycpwrThr1); + ath_dbg(common, ANI, +@@ -1204,7 +1204,7 @@ static bool ar5008_hw_ani_control_new(st + chan->channel, + aniState->spurImmunityLevel, + level, +- ATH9K_ANI_SPUR_IMMUNE_LVL_NEW, ++ ATH9K_ANI_SPUR_IMMUNE_LVL, + value2, + aniState->iniDef.cycpwrThr1Ext); + if (level > aniState->spurImmunityLevel) +@@ -1319,8 +1319,8 @@ static void ar5008_hw_ani_cache_ini_regs + AR_PHY_EXT_TIMING5_CYCPWR_THR1); + + /* these levels just got reset to defaults by the INI */ +- aniState->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL_NEW; +- aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_NEW; ++ aniState->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL; ++ aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL; + aniState->ofdmWeakSigDetect = ATH9K_ANI_USE_OFDM_WEAK_SIG; + aniState->mrcCCKOff = true; /* not available on pre AR9003 */ + } +--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c ++++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c +@@ -851,7 +851,7 @@ static bool ar9003_hw_ani_control(struct + * from INI file & cap value + */ + value = firstep_table[level] - +- firstep_table[ATH9K_ANI_FIRSTEP_LVL_NEW] + ++ firstep_table[ATH9K_ANI_FIRSTEP_LVL] + + aniState->iniDef.firstep; + if (value < ATH9K_SIG_FIRSTEP_SETTING_MIN) + value = ATH9K_SIG_FIRSTEP_SETTING_MIN; +@@ -866,7 +866,7 @@ static bool ar9003_hw_ani_control(struct + * from INI file & cap value + */ + value2 = firstep_table[level] - +- firstep_table[ATH9K_ANI_FIRSTEP_LVL_NEW] + ++ firstep_table[ATH9K_ANI_FIRSTEP_LVL] + + aniState->iniDef.firstepLow; + if (value2 < ATH9K_SIG_FIRSTEP_SETTING_MIN) + value2 = ATH9K_SIG_FIRSTEP_SETTING_MIN; +@@ -882,7 +882,7 @@ static bool ar9003_hw_ani_control(struct + chan->channel, + aniState->firstepLevel, + level, +- ATH9K_ANI_FIRSTEP_LVL_NEW, ++ ATH9K_ANI_FIRSTEP_LVL, + value, + aniState->iniDef.firstep); + ath_dbg(common, ANI, +@@ -890,7 +890,7 @@ static bool ar9003_hw_ani_control(struct + chan->channel, + aniState->firstepLevel, + level, +- ATH9K_ANI_FIRSTEP_LVL_NEW, ++ ATH9K_ANI_FIRSTEP_LVL, + value2, + aniState->iniDef.firstepLow); + if (level > aniState->firstepLevel) +@@ -915,7 +915,7 @@ static bool ar9003_hw_ani_control(struct + * from INI file & cap value + */ + value = cycpwrThr1_table[level] - +- cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL_NEW] + ++ cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL] + + aniState->iniDef.cycpwrThr1; + if (value < ATH9K_SIG_SPUR_IMM_SETTING_MIN) + value = ATH9K_SIG_SPUR_IMM_SETTING_MIN; +@@ -931,7 +931,7 @@ static bool ar9003_hw_ani_control(struct + * from INI file & cap value + */ + value2 = cycpwrThr1_table[level] - +- cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL_NEW] + ++ cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL] + + aniState->iniDef.cycpwrThr1Ext; + if (value2 < ATH9K_SIG_SPUR_IMM_SETTING_MIN) + value2 = ATH9K_SIG_SPUR_IMM_SETTING_MIN; +@@ -946,7 +946,7 @@ static bool ar9003_hw_ani_control(struct + chan->channel, + aniState->spurImmunityLevel, + level, +- ATH9K_ANI_SPUR_IMMUNE_LVL_NEW, ++ ATH9K_ANI_SPUR_IMMUNE_LVL, + value, + aniState->iniDef.cycpwrThr1); + ath_dbg(common, ANI, +@@ -954,7 +954,7 @@ static bool ar9003_hw_ani_control(struct + chan->channel, + aniState->spurImmunityLevel, + level, +- ATH9K_ANI_SPUR_IMMUNE_LVL_NEW, ++ ATH9K_ANI_SPUR_IMMUNE_LVL, + value2, + aniState->iniDef.cycpwrThr1Ext); + if (level > aniState->spurImmunityLevel) +@@ -1107,8 +1107,8 @@ static void ar9003_hw_ani_cache_ini_regs + AR_PHY_EXT_CYCPWR_THR1); + + /* these levels just got reset to defaults by the INI */ +- aniState->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL_NEW; +- aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_NEW; ++ aniState->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL; ++ aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL; + aniState->ofdmWeakSigDetect = ATH9K_ANI_USE_OFDM_WEAK_SIG; + aniState->mrcCCKOff = !ATH9K_ANI_ENABLE_MRC_CCK; + } diff --git a/package/mac80211/patches/576-ath9k_ani_remove_mib_int.patch b/package/mac80211/patches/576-ath9k_ani_remove_mib_int.patch new file mode 100644 index 0000000000..d071e0ca57 --- /dev/null +++ b/package/mac80211/patches/576-ath9k_ani_remove_mib_int.patch @@ -0,0 +1,114 @@ +--- a/drivers/net/wireless/ath/ath9k/ani.c ++++ b/drivers/net/wireless/ath/ath9k/ani.c +@@ -490,46 +490,6 @@ void ath9k_hw_disable_mib_counters(struc + } + EXPORT_SYMBOL(ath9k_hw_disable_mib_counters); + +-/* +- * Process a MIB interrupt. We may potentially be invoked because +- * any of the MIB counters overflow/trigger so don't assume we're +- * here because a PHY error counter triggered. +- */ +-void ath9k_hw_proc_mib_event(struct ath_hw *ah) +-{ +- u32 phyCnt1, phyCnt2; +- +- /* Reset these counters regardless */ +- REG_WRITE(ah, AR_FILT_OFDM, 0); +- REG_WRITE(ah, AR_FILT_CCK, 0); +- if (!(REG_READ(ah, AR_SLP_MIB_CTRL) & AR_SLP_MIB_PENDING)) +- REG_WRITE(ah, AR_SLP_MIB_CTRL, AR_SLP_MIB_CLEAR); +- +- /* Clear the mib counters and save them in the stats */ +- ath9k_hw_update_mibstats(ah, &ah->ah_mibStats); +- +- if (!DO_ANI(ah)) { +- /* +- * We must always clear the interrupt cause by +- * resetting the phy error regs. +- */ +- REG_WRITE(ah, AR_PHY_ERR_1, 0); +- REG_WRITE(ah, AR_PHY_ERR_2, 0); +- return; +- } +- +- /* NB: these are not reset-on-read */ +- phyCnt1 = REG_READ(ah, AR_PHY_ERR_1); +- phyCnt2 = REG_READ(ah, AR_PHY_ERR_2); +- if (((phyCnt1 & AR_MIBCNT_INTRMASK) == AR_MIBCNT_INTRMASK) || +- ((phyCnt2 & AR_MIBCNT_INTRMASK) == AR_MIBCNT_INTRMASK)) { +- +- /* NB: always restart to insure the h/w counters are reset */ +- ath9k_ani_restart(ah); +- } +-} +-EXPORT_SYMBOL(ath9k_hw_proc_mib_event); +- + void ath9k_hw_ani_setup(struct ath_hw *ah) + { + int i; +--- a/drivers/net/wireless/ath/ath9k/hw.h ++++ b/drivers/net/wireless/ath/ath9k/hw.h +@@ -1023,7 +1023,6 @@ void ar9003_hw_attach_ops(struct ath_hw + void ar9002_hw_load_ani_reg(struct ath_hw *ah, struct ath9k_channel *chan); + + void ath9k_ani_reset(struct ath_hw *ah, bool is_scanning); +-void ath9k_hw_proc_mib_event(struct ath_hw *ah); + void ath9k_hw_ani_monitor(struct ath_hw *ah, struct ath9k_channel *chan); + + #ifdef CONFIG_ATH9K_BTCOEX_SUPPORT +--- a/drivers/net/wireless/ath/ath9k/main.c ++++ b/drivers/net/wireless/ath/ath9k/main.c +@@ -827,24 +827,6 @@ irqreturn_t ath_isr(int irq, void *dev) + ath9k_hw_set_interrupts(ah); + } + +- if (status & ATH9K_INT_MIB) { +- /* +- * Disable interrupts until we service the MIB +- * interrupt; otherwise it will continue to +- * fire. +- */ +- ath9k_hw_disable_interrupts(ah); +- /* +- * Let the hal handle the event. We assume +- * it will clear whatever condition caused +- * the interrupt. +- */ +- spin_lock(&common->cc_lock); +- ath9k_hw_proc_mib_event(ah); +- spin_unlock(&common->cc_lock); +- ath9k_hw_enable_interrupts(ah); +- } +- + if (!(ah->caps.hw_caps & ATH9K_HW_CAP_AUTOSLEEP)) + if (status & ATH9K_INT_TIM_TIMER) { + if (ATH_DBG_WARN_ON_ONCE(sc->ps_idle)) +@@ -1347,14 +1329,10 @@ static void ath9k_calculate_summary_stat + /* + * Enable MIB interrupts when there are hardware phy counters. + */ +- if ((iter_data.nstations + iter_data.nadhocs + iter_data.nmeshes) > 0) { +- if (ah->config.enable_ani) +- ah->imask |= ATH9K_INT_MIB; ++ if ((iter_data.nstations + iter_data.nadhocs + iter_data.nmeshes) > 0) + ah->imask |= ATH9K_INT_TSFOOR; +- } else { +- ah->imask &= ~ATH9K_INT_MIB; ++ else + ah->imask &= ~ATH9K_INT_TSFOOR; +- } + + ath9k_hw_set_interrupts(ah); + +--- a/drivers/net/wireless/ath/ath9k/debug.c ++++ b/drivers/net/wireless/ath/ath9k/debug.c +@@ -348,8 +348,6 @@ void ath_debug_stat_interrupt(struct ath + sc->debug.stats.istats.txok++; + if (status & ATH9K_INT_TXURN) + sc->debug.stats.istats.txurn++; +- if (status & ATH9K_INT_MIB) +- sc->debug.stats.istats.mib++; + if (status & ATH9K_INT_RXPHY) + sc->debug.stats.istats.rxphyerr++; + if (status & ATH9K_INT_RXKCM) diff --git a/package/mac80211/patches/577-ath9k_fix_noise_immunity.patch b/package/mac80211/patches/577-ath9k_fix_noise_immunity.patch new file mode 100644 index 0000000000..d6ef678261 --- /dev/null +++ b/package/mac80211/patches/577-ath9k_fix_noise_immunity.patch @@ -0,0 +1,69 @@ +--- a/drivers/net/wireless/ath/ath9k/ani.c ++++ b/drivers/net/wireless/ath/ath9k/ani.c +@@ -154,9 +154,7 @@ static void ath9k_hw_set_ofdm_nil(struct + aniState->rssiThrLow, aniState->rssiThrHigh); + + if (aniState->update_ani) +- aniState->ofdmNoiseImmunityLevel = +- (immunityLevel > ATH9K_ANI_OFDM_DEF_LEVEL) ? +- immunityLevel : ATH9K_ANI_OFDM_DEF_LEVEL; ++ aniState->ofdmNoiseImmunityLevel = immunityLevel; + + entry_ofdm = &ofdm_level_table[aniState->ofdmNoiseImmunityLevel]; + entry_cck = &cck_level_table[aniState->cckNoiseImmunityLevel]; +@@ -217,9 +215,7 @@ static void ath9k_hw_set_cck_nil(struct + immunityLevel = ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI; + + if (aniState->update_ani) +- aniState->cckNoiseImmunityLevel = +- (immunityLevel > ATH9K_ANI_CCK_DEF_LEVEL) ? +- immunityLevel : ATH9K_ANI_CCK_DEF_LEVEL; ++ aniState->cckNoiseImmunityLevel = immunityLevel; + + entry_ofdm = &ofdm_level_table[aniState->ofdmNoiseImmunityLevel]; + entry_cck = &cck_level_table[aniState->cckNoiseImmunityLevel]; +@@ -285,6 +281,7 @@ void ath9k_ani_reset(struct ath_hw *ah, + struct ar5416AniState *aniState = &ah->curchan->ani; + struct ath9k_channel *chan = ah->curchan; + struct ath_common *common = ath9k_hw_common(ah); ++ int ofdm_nil, cck_nil; + + if (!DO_ANI(ah)) + return; +@@ -306,6 +303,11 @@ void ath9k_ani_reset(struct ath_hw *ah, + /* always allow mode (on/off) to be controlled */ + ah->ani_function |= ATH9K_ANI_MODE; + ++ ofdm_nil = max_t(int, ATH9K_ANI_OFDM_DEF_LEVEL, ++ aniState->ofdmNoiseImmunityLevel); ++ cck_nil = max_t(int, ATH9K_ANI_CCK_DEF_LEVEL, ++ aniState->cckNoiseImmunityLevel); ++ + if (is_scanning || + (ah->opmode != NL80211_IFTYPE_STATION && + ah->opmode != NL80211_IFTYPE_ADHOC)) { +@@ -329,8 +331,8 @@ void ath9k_ani_reset(struct ath_hw *ah, + aniState->cckNoiseImmunityLevel); + + aniState->update_ani = false; +- ath9k_hw_set_ofdm_nil(ah, ATH9K_ANI_OFDM_DEF_LEVEL); +- ath9k_hw_set_cck_nil(ah, ATH9K_ANI_CCK_DEF_LEVEL); ++ ofdm_nil = ATH9K_ANI_OFDM_DEF_LEVEL; ++ cck_nil = ATH9K_ANI_CCK_DEF_LEVEL; + } + } else { + /* +@@ -346,11 +348,9 @@ void ath9k_ani_reset(struct ath_hw *ah, + aniState->cckNoiseImmunityLevel); + + aniState->update_ani = true; +- ath9k_hw_set_ofdm_nil(ah, +- aniState->ofdmNoiseImmunityLevel); +- ath9k_hw_set_cck_nil(ah, +- aniState->cckNoiseImmunityLevel); + } ++ ath9k_hw_set_ofdm_nil(ah, ofdm_nil); ++ ath9k_hw_set_cck_nil(ah, cck_nil); + + /* + * enable phy counters if hw supports or if not, enable phy diff --git a/package/mac80211/patches/578-ath9k_cleanup_ani_ofdm_trig.patch b/package/mac80211/patches/578-ath9k_cleanup_ani_ofdm_trig.patch new file mode 100644 index 0000000000..9b4b9910fa --- /dev/null +++ b/package/mac80211/patches/578-ath9k_cleanup_ani_ofdm_trig.patch @@ -0,0 +1,41 @@ +--- a/drivers/net/wireless/ath/ath9k/ani.c ++++ b/drivers/net/wireless/ath/ath9k/ani.c +@@ -179,6 +179,14 @@ static void ath9k_hw_set_ofdm_nil(struct + ath9k_hw_ani_control(ah, + ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION, + entry_ofdm->ofdm_weak_signal_on); ++ ++ if (aniState->ofdmNoiseImmunityLevel >= ATH9K_ANI_OFDM_DEF_LEVEL) { ++ ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH; ++ ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW_ABOVE_INI; ++ } else { ++ ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI; ++ ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW; ++ } + } + + static void ath9k_hw_ani_ofdm_err_trigger(struct ath_hw *ah) +@@ -428,21 +436,10 @@ void ath9k_hw_ani_monitor(struct ath_hw + + if (aniState->listenTime > ah->aniperiod) { + if (cckPhyErrRate < ah->config.cck_trig_low && +- ((ofdmPhyErrRate < ah->config.ofdm_trig_low && +- aniState->ofdmNoiseImmunityLevel < +- ATH9K_ANI_OFDM_DEF_LEVEL) || +- (ofdmPhyErrRate < ATH9K_ANI_OFDM_TRIG_LOW_ABOVE_INI && +- aniState->ofdmNoiseImmunityLevel >= +- ATH9K_ANI_OFDM_DEF_LEVEL))) { ++ ofdmPhyErrRate < ah->config.ofdm_trig_low) { + ath9k_hw_ani_lower_immunity(ah); + aniState->ofdmsTurn = !aniState->ofdmsTurn; +- } else if ((ofdmPhyErrRate > ah->config.ofdm_trig_high && +- aniState->ofdmNoiseImmunityLevel >= +- ATH9K_ANI_OFDM_DEF_LEVEL) || +- (ofdmPhyErrRate > +- ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI && +- aniState->ofdmNoiseImmunityLevel < +- ATH9K_ANI_OFDM_DEF_LEVEL)) { ++ } else if (ofdmPhyErrRate > ah->config.ofdm_trig_high) { + ath9k_hw_ani_ofdm_err_trigger(ah); + aniState->ofdmsTurn = false; + } else if (cckPhyErrRate > ah->config.cck_trig_high) { diff --git a/package/netifd/files/lib/netifd/proto/dhcp.sh b/package/netifd/files/lib/netifd/proto/dhcp.sh index 70cfc86d18..3365cb7aeb 100755 --- a/package/netifd/files/lib/netifd/proto/dhcp.sh +++ b/package/netifd/files/lib/netifd/proto/dhcp.sh @@ -18,6 +18,7 @@ proto_dhcp_setup() { local config="$1" local iface="$2" + local ipaddr hostname clientid vendorid broadcast reqopts json_get_vars ipaddr hostname clientid vendorid broadcast reqopts local opt dhcpopts diff --git a/package/netifd/files/lib/network/config.sh b/package/netifd/files/lib/network/config.sh index 3b3ae93404..9128971dab 100755 --- a/package/netifd/files/lib/network/config.sh +++ b/package/netifd/files/lib/network/config.sh @@ -5,6 +5,7 @@ find_config() { local device="$1" + local ifdev ifl3dev ifobj for ifobj in `ubus list network.interface.\*`; do interface="${ifobj##network.interface.}" ( @@ -36,7 +37,7 @@ ubus_call() { fixup_interface() { local config="$1" - local ifname type + local ifname type device l3dev config_get type "$config" type config_get ifname "$config" ifname diff --git a/package/ppp/files/ppp.sh b/package/ppp/files/ppp.sh index 297a329154..98099dba54 100755 --- a/package/ppp/files/ppp.sh +++ b/package/ppp/files/ppp.sh @@ -72,6 +72,10 @@ ppp_generic_teardown() { proto_notify_error "$interface" AUTH_FAILED proto_block_restart "$interface" ;; + 2) + proto_notify_error "$interface" INVALID_OPTIONS + proto_block_restart "$interface" + ;; esac proto_kill_command "$interface" } @@ -133,6 +137,8 @@ proto_pppoa_init_config() { proto_config_add_int "vci" proto_config_add_int "vpi" proto_config_add_string "encaps" + no_device=1 + available=1 } proto_pppoa_setup() { diff --git a/package/toolchain/Makefile b/package/toolchain/Makefile new file mode 100644 index 0000000000..c8105c30d3 --- /dev/null +++ b/package/toolchain/Makefile @@ -0,0 +1,560 @@ +# +# Copyright (C) 2007-2012 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk +PKG_NAME:=toolchain +PKG_RELEASE:=1 + +include $(INCLUDE_DIR)/package.mk + +ifneq ($(DUMP),1) + LIBGCC_VERSION:=$(GCC_VERSION) +else + LIBC_VERSION:= + LIBGCC_VERSION:= +endif + +define Package/gcc/Default + SECTION:=libs + CATEGORY:=Base system + URL:=http://gcc.gnu.org/ + VERSION:=$(LIBGCC_VERSION)-$(PKG_RELEASE) +endef + +define Package/libgcc +$(call Package/gcc/Default) + TITLE:=GCC support library +endef + +define Package/libgcc/config + menu "Configuration" + depends EXTERNAL_TOOLCHAIN && PACKAGE_libgcc + + config LIBGCC_ROOT_DIR + string + prompt "libgcc shared library base directory" + depends EXTERNAL_TOOLCHAIN && PACKAGE_libgcc + default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN + default "/" if NATIVE_TOOLCHAIN + + config LIBGCC_FILE_SPEC + string + prompt "libgcc shared library files (use wildcards)" + depends EXTERNAL_TOOLCHAIN && PACKAGE_libgcc + default "./lib/libgcc_s.so.*" + + endmenu +endef + + +define Package/libssp +$(call Package/gcc/Default) + DEPENDS+=@SSP_SUPPORT + TITLE:=GCC support library +endef + +define Package/libssp/config + menu "Configuration" + depends EXTERNAL_TOOLCHAIN && PACKAGE_libssp + + config LIBSPP_ROOT_DIR + string + prompt "libssp shared library base directory" + depends EXTERNAL_TOOLCHAIN && PACKAGE_libssp + default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN + default "/" if NATIVE_TOOLCHAIN + + config LIBSSP_FILE_SPEC + string + prompt "libssp shared library files (use wildcards)" + depends EXTERNAL_TOOLCHAIN && PACKAGE_libssp + default "./lib/libssp.so.*" + + endmenu +endef + + +define Package/libstdcpp +$(call Package/gcc/Default) + NAME:=libstdc++ + TITLE:=GNU Standard C++ Library v3 + DEPENDS+=@INSTALL_LIBSTDCPP +endef + +define Package/libstdcpp/config + menu "Configuration" + depends EXTERNAL_TOOLCHAIN && PACKAGE_libstdcpp + + config LIBSTDCPP_ROOT_DIR + string + prompt "libstdcpp shared library base directory" + depends EXTERNAL_TOOLCHAIN && PACKAGE_libstdcpp + default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN + default "/" if NATIVE_TOOLCHAIN + + config LIBSTDCPP_FILE_SPEC + string + prompt "libstdc++ shared library files (use wildcards)" + depends EXTERNAL_TOOLCHAIN && PACKAGE_libstdcpp + default "./lib/libstdc++.so.*" + + endmenu +endef + + +define Package/libc/Default + SECTION:=libs + CATEGORY:=Base system + VERSION:=$(LIBC_VERSION)-$(PKG_RELEASE) + DEPENDS:=+libgcc + URL:=$(LIBC_URL) + PKG_FLAGS:=hold essential +endef + + +define Package/libc +$(call Package/libc/Default) + TITLE:=C library +endef + +define Package/libc/config + menu "Configuration" + depends EXTERNAL_TOOLCHAIN && PACKAGE_libc + + config LIBC_ROOT_DIR + string + prompt "libc shared library base directory" + depends EXTERNAL_TOOLCHAIN && PACKAGE_libc + default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN + default "/" if NATIVE_TOOLCHAIN + + config LIBC_FILE_SPEC + string + prompt "libc shared library files (use wildcards)" + depends EXTERNAL_TOOLCHAIN && PACKAGE_libc + default "./lib/ld{-*.so,-linux*.so.*} ./lib/lib{anl,c,cidn,crypt,dl,m,nsl,nss_dns,nss_files,resolv,util}{-*.so,.so.*}" + + endmenu +endef + + +define Package/libpthread +$(call Package/libc/Default) + TITLE:=POSIX thread library +endef + +define Package/libpthread/config + menu "Configuration" + depends EXTERNAL_TOOLCHAIN && PACKAGE_libpthread + + config LIBPTHREAD_ROOT_DIR + string + prompt "libpthread shared library base directory" + depends EXTERNAL_TOOLCHAIN && PACKAGE_libpthread + default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN + default "/" if NATIVE_TOOLCHAIN + + config LIBPTHREAD_FILE_SPEC + string + prompt "libpthread shared library files (use wildcards)" + depends EXTERNAL_TOOLCHAIN && PACKAGE_libpthread + default "./lib/libpthread{-*.so,.so.*}" + + endmenu +endef + + +define Package/librt +$(call Package/libc/Default) + TITLE:=POSIX.1b RealTime extension library + DEPENDS:=+libpthread +endef + +define Package/librt/config + menu "Configuration" + depends EXTERNAL_TOOLCHAIN && PACKAGE_librt + + config LIBRT_ROOT_DIR + string + prompt "librt shared library base directory" + depends EXTERNAL_TOOLCHAIN && PACKAGE_librt + default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN + default "/" if NATIVE_TOOLCHAIN + + config LIBRT_FILE_SPEC + string + prompt "librt shared library files (use wildcards)" + depends EXTERNAL_TOOLCHAIN && PACKAGE_librt + default "./lib/librt{-*.so,.so.*}" + + endmenu +endef + + +define Package/libgfortran +$(call Package/gcc/Default) + TITLE:=GFortran support library + DEPENDS+=@INSTALL_GFORTRAN +endef + +define Package/libgfortran/config + menu "Configuration" + depends EXTERNAL_TOOLCHAIN && PACKAGE_libgfortran + + config LIBGFORTRAN_ROOT_DIR + string + prompt "libgfortran shared library base directory" + depends EXTERNAL_TOOLCHAIN && PACKAGE_libgfortran + default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN + default "/" if NATIVE_TOOLCHAIN + + config LIBGFORTRAN_FILE_SPEC + string + prompt "libgfortran shared library files (use wildcards)" + depends EXTERNAL_TOOLCHAIN && PACKAGE_libgfortran + default "./usr/lib/libgfortran.so.*" + + endmenu +endef + +define Package/ldd +$(call Package/libc/Default) + SECTION:=utils + CATEGORY:=Utilities + TITLE:=LDD trace utility +endef + +define Package/ldd/config + menu "Configuration" + depends EXTERNAL_TOOLCHAIN && PACKAGE_ldd + + config LDD_ROOT_DIR + string + prompt "ldd trace utility base directory" + depends EXTERNAL_TOOLCHAIN && PACKAGE_ldd + default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN + default "/" if NATIVE_TOOLCHAIN + + config LDD_FILE_SPEC + string + prompt "ldd trace utility file" + depends EXTERNAL_TOOLCHAIN && PACKAGE_ldd + default "./usr/bin/ldd" + + endmenu +endef + + +define Package/ldconfig +$(call Package/libc/Default) + SECTION:=utils + CATEGORY:=Utilities + TITLE:=Shared library path configuration +endef + +define Package/ldconfig/config + menu "Configuration" + depends EXTERNAL_TOOLCHAIN && PACKAGE_ldconfig + + config LDCONFIG_ROOT_DIR + string + prompt "ldconfig base directory" + depends EXTERNAL_TOOLCHAIN && PACKAGE_ldconfig + default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN + default "/" if NATIVE_TOOLCHAIN + + config LDCONFIG_FILE_SPEC + string + prompt "ldconfig file" + depends EXTERNAL_TOOLCHAIN && PACKAGE_ldconfig + default "./sbin/ldconfig" + + endmenu +endef + +define Build/Prepare + mkdir -p $(PKG_BUILD_DIR) +endef + +LIBGCC_A=$(wildcard $(TOOLCHAIN_DIR)/lib/gcc/*/*/libgcc_pic.a) +LIBGCC_MAP=$(wildcard $(TOOLCHAIN_DIR)/lib/gcc/*/*/libgcc.map) +LIBGCC_SO=$(wildcard $(TOOLCHAIN_DIR)/lib/libgcc_s.so.*) +ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) + ifneq ($(if $(CONFIG_USE_UCLIBC),$(CONFIG_GCC_VERSION_LINARO)),) + BUILD_LIBGCC:=$(if $(CONFIG_avr32)$(CONFIG_m68k)$(CONFIG_powerpc),,$(PKG_BUILD_DIR)/libgcc_s.so.*) + endif +endif + +ifneq ($(BUILD_LIBGCC),) + define Build/Compile/uClibc + $(SCRIPT_DIR)/relink-lib.sh \ + "$(TARGET_CROSS)" \ + "$(wildcard $(TOOLCHAIN_DIR)/lib/libc_so.a)" \ + "$(wildcard $(TOOLCHAIN_DIR)/lib/libc_so.a)" \ + "$(patsubst $(TOOLCHAIN_DIR)/lib/%,$(PKG_BUILD_DIR)/%,$(wildcard $(TOOLCHAIN_DIR)/lib/libuClibc-*.so))" \ + -Wl,-init,__uClibc_init -Wl,-soname=libc.so.0 \ + $(BUILD_LIBGCC) + $(SCRIPT_DIR)/relink-lib.sh \ + "$(TARGET_CROSS)" \ + "$(wildcard $(TOOLCHAIN_DIR)/lib/libcrypt-*.so)" \ + "$(wildcard $(TOOLCHAIN_DIR)/lib/libcrypt_pic.a)" \ + "$(patsubst $(TOOLCHAIN_DIR)/lib/%,$(PKG_BUILD_DIR)/%,$(wildcard $(TOOLCHAIN_DIR)/lib/libcrypt-*.so))" \ + $(BUILD_LIBGCC) \ + -Wl,-soname=libcrypt.so.0 + $(SCRIPT_DIR)/relink-lib.sh \ + "$(TARGET_CROSS)" \ + "$(wildcard $(TOOLCHAIN_DIR)/lib/libm-*.so)" \ + "$(wildcard $(TOOLCHAIN_DIR)/lib/libm_pic.a)" \ + "$(patsubst $(TOOLCHAIN_DIR)/lib/%,$(PKG_BUILD_DIR)/%,$(wildcard $(TOOLCHAIN_DIR)/lib/libm-*.so))" \ + $(BUILD_LIBGCC) \ + -Wl,-soname=libm.so.0 + $(SCRIPT_DIR)/relink-lib.sh \ + "$(TARGET_CROSS)" \ + "$(wildcard $(TOOLCHAIN_DIR)/lib/libpthread-*.so)" \ + "$(wildcard $(TOOLCHAIN_DIR)/lib/libpthread_so.a)" \ + "$(patsubst $(TOOLCHAIN_DIR)/lib/%,$(PKG_BUILD_DIR)/%,$(wildcard $(TOOLCHAIN_DIR)/lib/libpthread-*.so))" \ + -Wl,-z,nodelete,-z,initfirst,-init=__pthread_initialize_minimal_internal \ + -ldl -lc $(BUILD_LIBGCC) \ + -Wl,-soname=libpthread.so.0 + endef + define Build/Compile/libgcc + $(SCRIPT_DIR)/relink-lib.sh \ + "$(TARGET_CROSS)" \ + "$(LIBGCC_SO)" \ + "$(LIBGCC_A)" \ + "$(patsubst $(TOOLCHAIN_DIR)/lib/%,$(PKG_BUILD_DIR)/%,$(LIBGCC_SO))" \ + -Wl,--version-script=$(LIBGCC_MAP) -Wl,-soname=libgcc_s.so.1 + endef +else + define Build/Compile/uClibc + $(CP) \ + $(TOOLCHAIN_DIR)/lib/libuClibc-*.so \ + $(TOOLCHAIN_DIR)/lib/libcrypt-*.so \ + $(TOOLCHAIN_DIR)/lib/libm-*.so \ + $(TOOLCHAIN_DIR)/lib/libpthread-*.so \ + $(PKG_BUILD_DIR)/ + endef + ifneq ($(LIBGCC_SO),) + define Build/Compile/libgcc + $(CP) $(LIBGCC_SO) $(PKG_BUILD_DIR)/ + endef + endif +endif + +define Build/Compile/Default + $(call Build/Compile/libgcc) + $(call Build/Compile/$(LIBC)) +endef +Build/Compile = $(Build/Compile/Default) + +ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) + + define Package/libgcc/install + $(INSTALL_DIR) $(1)/lib + $(if $(TARGET_avr32)$(TARGET_coldfire),,$(CP) $(TOOLCHAIN_DIR)/lib/libgcc_s.so.* $(1)/lib/) + endef + + define Package/libgfortran/install + $(INSTALL_DIR) $(1)/usr/lib + $(if $(TARGET_avr32)$(TARGET_coldfire),,$(CP) $(TOOLCHAIN_DIR)/lib/libgfortran.so.* $(1)/usr/lib/) + endef + + define Package/libssp/install + $(INSTALL_DIR) $(1)/lib + $(CP) $(TOOLCHAIN_DIR)/lib/libssp.so.* $(1)/lib/ + endef + + define Package/libstdcpp/install + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(TOOLCHAIN_DIR)/lib/libstdc++.so.* $(1)/usr/lib/ + endef + + use_libutil=$(if $(CONFIG_EGLIBC_OPTION_EGLIBC_UTMP),libutil) + use_libnsl=$(if $(CONFIG_EGLIBC_OPTION_EGLIBC_NIS),libnsl) + use_nsswitch=$(if $(CONFIG_EGLIBC_OPTION_EGLIBC_NSSWITCH),libnss_dns libnss_files) + + define Package/eglibc/install + $(CP) ./eglibc-files/* $(1)/ + rm -f $(1)/etc/localtime + ln -sf /tmp/localtime $(1)/etc/localtime + $(INSTALL_DIR) $(1)/lib + $(CP) \ + $(TOOLCHAIN_DIR)/lib/ld*.so.* \ + $(TOOLCHAIN_DIR)/lib/ld-$(LIBC_SO_VERSION).so \ + $(1)/lib/ + for file in libanl libc libcidn libcrypt libdl libm $(use_libnsl) $(use_nsswitch) libresolv $(use_libutil); do \ + for file in $(TOOLCHAIN_DIR)/lib/$$$$file.so.* $(TOOLCHAIN_DIR)/lib/$$$$file-$(LIBC_SO_VERSION).so; do \ + if [ -e "$$$$file" ]; then \ + $(CP) $$$$file $(1)/lib/; \ + fi; \ + done; \ + done + endef + + define Package/uClibc/install + $(INSTALL_DIR) $(1)/lib + $(CP) \ + $(TOOLCHAIN_DIR)/lib/ld*-uClibc.so.* \ + $(TOOLCHAIN_DIR)/lib/ld*-uClibc-$(LIBC_SO_VERSION).so \ + $(1)/lib/ + $(CP) \ + $(TOOLCHAIN_DIR)/lib/libc.so.* \ + $(TOOLCHAIN_DIR)/lib/libuClibc-$(LIBC_SO_VERSION).so \ + $(1)/lib/ + for file in libcrypt libdl libm libutil; do \ + $(CP) \ + $(TOOLCHAIN_DIR)/lib/$$$$file.so.* \ + $(TOOLCHAIN_DIR)/lib/$$$$file-$(LIBC_SO_VERSION).so \ + $(1)/lib/; \ + done + + $(CP) \ + $(PKG_BUILD_DIR)/libuClibc-* \ + $(PKG_BUILD_DIR)/libm-* \ + $(PKG_BUILD_DIR)/libcrypt-* \ + $(1)/lib/ + endef + + define Package/libc/install + $(call Package/$(LIBC)/install,$1) + endef + + define Package/libc/install_lib + $(CP) $(filter-out %/libdl_pic.a %/libpthread_pic.a %/libresolv_pic.a,$(wildcard $(TOOLCHAIN_DIR)/lib/lib*.a)) $(1)/lib/ + $(if $(wildcard $(TOOLCHAIN_DIR)/lib/libc_so.a),$(CP) $(TOOLCHAIN_DIR)/lib/libc_so.a $(1)/lib/libc_pic.a) + $(if $(LIBGCC_MAP), \ + $(CP) $(LIBGCC_A) $(1)/lib/libgcc_s_pic.a; \ + $(CP) $(LIBGCC_MAP) $(1)/lib/libgcc_s_pic.map \ + ) + endef + + define Package/libpthread/install + $(INSTALL_DIR) $(1)/lib + $(CP) \ + $(TOOLCHAIN_DIR)/lib/libpthread.so.* \ + $(if $(BUILD_LIBGCC),\ + $(PKG_BUILD_DIR)/libpthread-$(LIBC_SO_VERSION).so, \ + $(TOOLCHAIN_DIR)/lib/libpthread-$(LIBC_SO_VERSION).so \ + ) \ + $(1)/lib/ + endef + + define Package/libpthread/install_lib + $(if $(wildcard $(TOOLCHAIN_DIR)/lib/libpthread_so.a),$(CP) $(TOOLCHAIN_DIR)/lib/libpthread_so.a $(1)/lib/libpthread_pic.a) + endef + + define Package/librt/install + $(INSTALL_DIR) $(1)/lib + $(CP) \ + $(TOOLCHAIN_DIR)/lib/librt.so.* \ + $(TOOLCHAIN_DIR)/lib/librt-$(LIBC_SO_VERSION).so \ + $(1)/lib/ + endef + + define Package/ldd/install + $(INSTALL_DIR) $(1)/usr/bin/ + $(CP) $(TOOLCHAIN_DIR)/bin/ldd $(1)/usr/bin/ + endef + + define Package/ldconfig/install + $(INSTALL_DIR) $(1)/sbin/ + $(CP) $(TOOLCHAIN_DIR)/sbin/ldconfig $(1)/sbin/ + endef + +else + + define Package/libgcc/install + for file in $(call qstrip,$(CONFIG_LIBGCC_FILE_SPEC)); do \ + dir=`dirname $$$$file` ; \ + $(INSTALL_DIR) $(1)/$$$$dir ; \ + $(CP) $(call qstrip,$(CONFIG_LIBGCC_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \ + done ; \ + exit 0 + endef + + define Package/libgfortran/install + for file in $(call qstrip,$(CONFIG_LIBGFORTRAN_FILE_SPEC)); do \ + dir=`dirname $$$$file` ; \ + $(INSTALL_DIR) $(1)/$$$$dir ; \ + $(CP) $(call qstrip,$(CONFIG_LIBGFORTRAN_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \ + done + endef + + define Package/libssp/install + for file in $(call qstrip,$(CONFIG_LIBSSP_FILE_SPEC)); do \ + dir=`dirname $$$$file` ; \ + $(INSTALL_DIR) $(1)/$$$$dir ; \ + $(CP) $(call qstrip,$(CONFIG_LIBSSP_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \ + done ; \ + exit 0 + endef + + define Package/libstdcpp/install + for file in $(call qstrip,$(CONFIG_LIBSTDCPP_FILE_SPEC)); do \ + dir=`dirname $$$$file` ; \ + $(INSTALL_DIR) $(1)/$$$$dir ; \ + $(CP) $(call qstrip,$(CONFIG_LIBSTDCPP_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \ + done ; \ + exit 0 + endef + + define Package/libc/install + for file in $(call qstrip,$(CONFIG_LIBC_FILE_SPEC)); do \ + dir=`dirname $$$$file` ; \ + $(INSTALL_DIR) $(1)/$$$$dir ; \ + $(CP) $(call qstrip,$(CONFIG_LIBC_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \ + done ; \ + exit 0 + endef + + define Package/libpthread/install + for file in $(call qstrip,$(CONFIG_LIBPTHREAD_FILE_SPEC)); do \ + dir=`dirname $$$$file` ; \ + $(INSTALL_DIR) $(1)/$$$$dir ; \ + $(CP) $(call qstrip,$(CONFIG_LIBPTHREAD_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \ + done ; \ + exit 0 + endef + + define Package/librt/install + for file in $(call qstrip,$(CONFIG_LIBRT_FILE_SPEC)); do \ + dir=`dirname $$$$file` ; \ + $(INSTALL_DIR) $(1)/$$$$dir ; \ + $(CP) $(call qstrip,$(CONFIG_LIBRT_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \ + done ; \ + exit 0 + endef + + define Package/ldd/install + for file in $(call qstrip,$(CONFIG_LDD_FILE_SPEC)); do \ + dir=`dirname $$$$file` ; \ + $(INSTALL_DIR) $(1)/$$$$dir ; \ + $(CP) $(call qstrip,$(CONFIG_LDD_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \ + done ; \ + exit 0 + endef + + define Package/ldconfig/install + for file in $(call qstrip,$(CONFIG_LDCONFIG_FILE_SPEC)); do \ + dir=`dirname $$$$file` ; \ + $(INSTALL_DIR) $(1)/$$$$dir ; \ + $(CP) $(call qstrip,$(CONFIG_LDCONFIG_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \ + done ; \ + exit 0 + endef + +endif + +$(eval $(call BuildPackage,libc)) +$(eval $(call BuildPackage,libgcc)) +$(eval $(call BuildPackage,libssp)) +$(eval $(call BuildPackage,libstdcpp)) +$(eval $(call BuildPackage,libpthread)) +$(eval $(call BuildPackage,librt)) +$(eval $(call BuildPackage,libgfortran)) +$(eval $(call BuildPackage,ldd)) +$(eval $(call BuildPackage,ldconfig)) diff --git a/package/ubus/Makefile b/package/ubus/Makefile index ca0e87c860..274b9a2fc5 100644 --- a/package/ubus/Makefile +++ b/package/ubus/Makefile @@ -28,6 +28,7 @@ define Package/ubusd CATEGORY:=LuCI2 SUBMENU:=System TITLE:=OpenWrt RPC daemon + DEPENDS:=+libubox endef define Package/libubus diff --git a/package/util-linux/Makefile b/package/util-linux/Makefile index 3a2fea9cc1..a6ff739efa 100644 --- a/package/util-linux/Makefile +++ b/package/util-linux/Makefile @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=util-linux -PKG_VERSION:=2.21.1 +PKG_VERSION:=2.21.2 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=@KERNEL/linux/utils/$(PKG_NAME)/v2.21 -PKG_MD5SUM:=ad602dcd528f340b1329cfa6200d8f80 +PKG_MD5SUM:=54ba880f1d66782c2287ee2c898520e9 PKG_BUILD_PARALLEL:=1 PKG_BUILD_DEPENDS:=libncurses @@ -34,7 +34,8 @@ CONFIGURE_ARGS += \ --enable-new-mount \ --with-ncurses \ --disable-nls \ - --disable-tls + --disable-tls \ + --without-udev TARGET_CFLAGS += $(FPIC) @@ -64,6 +65,7 @@ endef define Package/libblkid $(call Package/util-linux/Default) + DEPENDS:=+libuuid TITLE:=block device id library SECTION:=libs CATEGORY:=Libraries @@ -78,6 +80,7 @@ endef define Package/libmount $(call Package/util-linux/Default) + DEPENDS:=+libblkid TITLE:=mount library SECTION:=libs CATEGORY:=Libraries @@ -116,7 +119,7 @@ endef define Package/blkid $(call Package/util-linux/Default) TITLE:=locate/print block device attributes - DEPENDS:= +libblkid +libuuid + DEPENDS:= +libblkid SUBMENU=disc endef @@ -138,7 +141,7 @@ endef define Package/cfdisk $(call Package/util-linux/Default) TITLE:=display or manipulate disk partition table - DEPENDS:= +libblkid +libncurses +libuuid + DEPENDS:= +libblkid +libncurses SUBMENU:=disc endef @@ -158,7 +161,7 @@ endef define Package/fdisk $(call Package/util-linux/Default) TITLE:=manipulate disk partition table - DEPENDS:= +libblkid +libuuid + DEPENDS:= +libblkid SUBMENU=disc endef @@ -169,7 +172,7 @@ endef define Package/findfs $(call Package/util-linux/Default) TITLE:=find a filesystem by label or UUID - DEPENDS:= +libblkid +libuuid + DEPENDS:= +libblkid SUBMENU=disc endef @@ -238,7 +241,7 @@ endef define Package/lsblk $(call Package/util-linux/Default) TITLE:=list block devices - DEPENDS:= +libblkid +libuuid + DEPENDS:= +libblkid SUBMENU=disc endef @@ -259,7 +262,7 @@ endef define Package/mount-utils $(call Package/util-linux/Default) TITLE:=related (u)mount utilities - DEPENDS+= +libblkid +libmount +libuuid + DEPENDS+= +libmount endef define Package/mount-utils/description @@ -289,7 +292,7 @@ endef define Package/partx-utils $(call Package/util-linux/Default) TITLE:=inform kernel about the presence and numbering of on-disk partitions - DEPENDS:= +libblkid +libuuid + DEPENDS:= +libblkid SUBMENU=disc endef @@ -310,6 +313,7 @@ endef define Package/setterm $(call Package/util-linux/Default) TITLE:=set terminal attributes + DEPENDS:= +libncurses SUBMENU:=Terminal endef @@ -332,7 +336,7 @@ endef define Package/swap-utils $(call Package/util-linux/Default) TITLE:=swap space management utilities - DEPENDS+= +libblkid +libuuid + DEPENDS+= +libblkid SUBMENU:=disc endef @@ -389,7 +393,7 @@ endef define Package/wipefs $(call Package/util-linux/Default) TITLE:=wipe a signature from a device - DEPENDS:= +libblkid +libuuid + DEPENDS:= +libblkid SUBMENU:=disc endef diff --git a/package/util-linux/patches/000-compile.patch b/package/util-linux/patches/000-compile.patch index 80343f2481..b7cc18b40c 100644 --- a/package/util-linux/patches/000-compile.patch +++ b/package/util-linux/patches/000-compile.patch @@ -10,7 +10,7 @@ - * the locale database, which can be overridden with the - * -s (Sunday) or -m (Monday) options. - */ --#ifdef HAVE_DECL__NL_TIME_WEEK_1STDAY +-#if HAVE_DECL__NL_TIME_WEEK_1STDAY - /* - * You need to use 2 locale variables to get the first day of the week. - * This is needed to support first_weekday=2 and first_workday=1 for diff --git a/package/zlib/Makefile b/package/zlib/Makefile index ecbfcd0847..ffa98813be 100644 --- a/package/zlib/Makefile +++ b/package/zlib/Makefile @@ -1,5 +1,5 @@ # -# Copyright (C) 2006 OpenWrt.org +# Copyright (C) 2006-2012 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=zlib -PKG_VERSION:=1.2.5 +PKG_VERSION:=1.2.7 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 PKG_SOURCE_URL:=http://www.zlib.net @SF/libpng -PKG_MD5SUM:=be1e89810e66150f5b0327984d8625a0 +PKG_MD5SUM:=2ab442d169156f34c379c968f3f482dd include $(INCLUDE_DIR)/package.mk diff --git a/package/zlib/patches/100-cross_compile.patch b/package/zlib/patches/100-cross_compile.patch deleted file mode 100644 index 143522be1e..0000000000 --- a/package/zlib/patches/100-cross_compile.patch +++ /dev/null @@ -1,29 +0,0 @@ ---- a/Makefile.in -+++ b/Makefile.in -@@ -36,7 +36,7 @@ SHAREDLIBV=libz.so.1.2.5 - SHAREDLIBM=libz.so.1 - LIBS=$(STATICLIB) $(SHAREDLIBV) - --AR=ar rc -+AR=ar - RANLIB=ranlib - LDCONFIG=ldconfig - LDSHAREDLIBC=-lc -@@ -44,6 +44,8 @@ TAR=tar - SHELL=/bin/sh - EXE= - -+DESTDIR = -+ - prefix = /usr/local - exec_prefix = ${prefix} - libdir = ${exec_prefix}/lib -@@ -108,7 +110,7 @@ test64: all64 - -@rm -f foo.gz - - libz.a: $(OBJS) -- $(AR) $@ $(OBJS) -+ $(AR) rc $@ $(OBJS) - -@ ($(RANLIB) $@ || true) >/dev/null 2>&1 - - match.o: match.S diff --git a/package/zlib/patches/110-largefile_fix.patch b/package/zlib/patches/110-largefile_fix.patch deleted file mode 100644 index d4d1185cba..0000000000 --- a/package/zlib/patches/110-largefile_fix.patch +++ /dev/null @@ -1,48 +0,0 @@ ---- a/zlib.h -+++ b/zlib.h -@@ -1563,12 +1563,7 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF( - * without large file support, _LFS64_LARGEFILE must also be true - */ - #if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 -- ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); -- ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int)); -- ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile)); -- ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile)); -- ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t)); -- ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t)); -+ #define __zlib_largefile64 - #endif - - #if !defined(ZLIB_INTERNAL) && _FILE_OFFSET_BITS-0 == 64 && _LFS64_LARGEFILE-0 -@@ -1578,13 +1573,8 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF( - # define gzoffset gzoffset64 - # define adler32_combine adler32_combine64 - # define crc32_combine crc32_combine64 --# ifdef _LARGEFILE64_SOURCE -- ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); -- ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int)); -- ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile)); -- ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile)); -- ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); -- ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); -+# ifndef __zlib_largefile64 -+# define __zlib_largefile64 - # endif - #else - ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *)); -@@ -1595,6 +1585,15 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF( - ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); - #endif - -+#ifdef __zlib_largefile64 -+ ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); -+ ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int)); -+ ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile)); -+ ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile)); -+ ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t)); -+ ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t)); -+#endif -+ - /* hack for buggy compilers */ - #if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL) - struct internal_state {int dummy;}; diff --git a/scripts/gen-dependencies.sh b/scripts/gen-dependencies.sh new file mode 100755 index 0000000000..ab047b6482 --- /dev/null +++ b/scripts/gen-dependencies.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2012 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# +SELF=${0##*/} + +READELF="${READELF:-readelf}" +TARGETS=$* +XARGS="${XARGS:-xargs -r}" + +[ -z "$TARGETS" ] && { + echo "$SELF: no directories / files specified" + echo "usage: $SELF [PATH...]" + exit 1 +} + +find $TARGETS -type f -a -exec file {} \; | \ + sed -n -e 's/^\(.*\):.*ELF.*\(executable\|shared object\).*,.* stripped/\1/p' | \ + $XARGS -n1 readelf -d | \ + awk '$2 ~ /NEEDED/ && $NF !~ /interpreter/ { gsub(/[\[\]]/, "", $NF); print $NF }' | \ + sort -u diff --git a/scripts/ipkg-make-index.sh b/scripts/ipkg-make-index.sh index 31b4327da3..cbfa450c0a 100755 --- a/scripts/ipkg-make-index.sh +++ b/scripts/ipkg-make-index.sh @@ -14,6 +14,7 @@ for pkg in `find $pkg_dir -name '*.ipk' | sort`; do name="${pkg##*/}" name="${name%%_*}" [[ "$name" = "kernel" ]] && continue + [[ "$name" = "libc" ]] && continue echo "Generating index for package $pkg" >&2 file_size=$(ls -l $pkg | awk '{print $5}') md5sum=$(md5sum $pkg | awk '{print $1}') diff --git a/target/imagebuilder/files/Makefile b/target/imagebuilder/files/Makefile index 803252b4b6..b0d0698acd 100644 --- a/target/imagebuilder/files/Makefile +++ b/target/imagebuilder/files/Makefile @@ -126,6 +126,7 @@ package_index: FORCE package_install: FORCE @echo @echo Installing packages... + $(OPKG) install $(PACKAGE_DIR)/libc_*.ipk $(OPKG) install $(PACKAGE_DIR)/kernel_*.ipk $(OPKG) install $(BUILD_PACKAGES) rm -f $(TARGET_DIR)/usr/lib/opkg/lists/* diff --git a/tools/Makefile b/tools/Makefile index f4ee0a96ea..8366c4d01c 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -120,8 +120,9 @@ $(eval $(call PrepareCommand,find,gfind find)) $(eval $(call PrepareCommand,md5sum,md5sum $(SCRIPT_DIR)/md5sum)) $(eval $(call PrepareCommand,cp,gcp cp)) $(eval $(call PrepareCommand,seq,gseq seq)) +$(eval $(call PrepareCommand,python,python2 python)) -$(curdir)/cmddeps = $(patsubst %,$(STAGING_DIR_HOST)/bin/%,find md5sum cp stat seq) +$(curdir)/cmddeps = $(patsubst %,$(STAGING_DIR_HOST)/bin/%,find md5sum cp stat seq python) $(curdir)//prepare = $(STAGING_DIR)/.prepared $(STAGING_DIR_HOST)/.prepared $($(curdir)/cmddeps) $(curdir)//compile = $(STAGING_DIR)/.prepared $(STAGING_DIR_HOST)/.prepared $($(curdir)/cmddeps) diff --git a/tools/e2fsprogs/Makefile b/tools/e2fsprogs/Makefile index 0bfcfb4f0f..36208b3e83 100644 --- a/tools/e2fsprogs/Makefile +++ b/tools/e2fsprogs/Makefile @@ -1,5 +1,5 @@ # -# Copyright (C) 2010 OpenWrt.org +# Copyright (C) 2010-2012 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -8,8 +8,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=e2fsprogs -PKG_VERSION:=1.41.13 -PKG_MD5SUM:=7508a192c7a9471e2128424f4eafac1c +PKG_VERSION:=1.42.3 +PKG_MD5SUM:=73431146f58d40fe1375aba2060f0da8 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz @@ -17,15 +17,15 @@ PKG_SOURCE_URL:=@SF/e2fsprogs include $(INCLUDE_DIR)/host-build.mk -TARGET_CFLAGS += $(FPIC) +HOST_CFLAGS += $(FPIC) -CONFIGURE_ARGS += \ +HOST_CONFIGURE_ARGS += \ --disable-shared \ + --disable-elf-shlibs \ --enable-static \ - --disable-rpath \ - --enable-elf-shlibs \ --enable-dynamic-e2fsck \ - --disable-tls + --disable-tls \ + --disable-nls define Host/Install $(Host/Install/Default) diff --git a/tools/e2fsprogs/patches/001-exit_0_on_corrected_errors.patch b/tools/e2fsprogs/patches/001-exit_0_on_corrected_errors.patch index 4dbece5cef..67a30f610b 100644 --- a/tools/e2fsprogs/patches/001-exit_0_on_corrected_errors.patch +++ b/tools/e2fsprogs/patches/001-exit_0_on_corrected_errors.patch @@ -1,6 +1,6 @@ --- a/e2fsck/e2fsck.h +++ b/e2fsck/e2fsck.h -@@ -65,7 +65,7 @@ +@@ -73,7 +73,7 @@ * Exit codes used by fsck-type programs */ #define FSCK_OK 0 /* No errors */ diff --git a/tools/e2fsprogs/patches/002-freebsd_fix.patch b/tools/e2fsprogs/patches/002-freebsd_fix.patch deleted file mode 100644 index 5065e05d1d..0000000000 --- a/tools/e2fsprogs/patches/002-freebsd_fix.patch +++ /dev/null @@ -1,18 +0,0 @@ ---- a/lib/ext2fs/tdb.c -+++ b/lib/ext2fs/tdb.c -@@ -29,6 +29,7 @@ Last Changed Date: 2007-06-22 13:36:10 - - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -+#include - #ifdef CONFIG_STAND_ALONE - #define HAVE_MMAP - #define HAVE_STRDUP -@@ -55,7 +56,6 @@ Last Changed Date: 2007-06-22 13:36:10 - - #include - #endif - #include --#include - #include - - #ifdef HAVE_SYS_MMAN_H diff --git a/tools/e2fsprogs/patches/003-darwin_directio_fix.patch b/tools/e2fsprogs/patches/003-darwin_directio_fix.patch deleted file mode 100644 index 971c7ad99b..0000000000 --- a/tools/e2fsprogs/patches/003-darwin_directio_fix.patch +++ /dev/null @@ -1,36 +0,0 @@ ---- a/lib/ext2fs/unix_io.c -+++ b/lib/ext2fs/unix_io.c -@@ -428,6 +428,7 @@ static errcode_t unix_open(const char *n - struct unix_private_data *data = NULL; - errcode_t retval; - int open_flags; -+ int f_nocache = 0; - struct stat st; - #ifdef __linux__ - struct utsname ut; -@@ -464,7 +465,11 @@ static errcode_t unix_open(const char *n - if (flags & IO_FLAG_EXCLUSIVE) - open_flags |= O_EXCL; - if (flags & IO_FLAG_DIRECT_IO) -+#if !defined(O_DIRECT) && defined(F_NOCACHE) -+ f_nocache = F_NOCACHE; -+#else - open_flags |= O_DIRECT; -+#endif - data->flags = flags; - - #ifdef HAVE_OPEN64 -@@ -477,6 +482,13 @@ static errcode_t unix_open(const char *n - goto cleanup; - } - -+ if (f_nocache) { -+ if (fcntl(data->dev, f_nocache, 1) < 0) { -+ retval = errno; -+ goto cleanup; -+ } -+ } -+ - #ifdef BLKSSZGET - if (flags & IO_FLAG_DIRECT_IO) { - if (ioctl(data->dev, BLKSSZGET, &data->align) != 0) diff --git a/tools/e2fsprogs/patches/004-big_endian_compile_fix.patch b/tools/e2fsprogs/patches/004-big_endian_compile_fix.patch deleted file mode 100644 index 9c3e3360e7..0000000000 --- a/tools/e2fsprogs/patches/004-big_endian_compile_fix.patch +++ /dev/null @@ -1,26 +0,0 @@ -From: Theodore Ts'o -Date: Fri, 17 Dec 2010 03:11:43 +0000 (-0500) -Subject: libext2fs: Fix compile bug on big-endian architectures -X-Git-Url: http://git.kernel.org/?p=fs%2Fext2%2Fe2fsprogs.git;a=commitdiff_plain;h=9098c986b64bb65a2b7fcd2724a400ba1f451f6b - -libext2fs: Fix compile bug on big-endian architectures - -Addresses-Sourceforge-Bug: #3138115 - -Signed-off-by: "Theodore Ts'o" ---- - -diff --git a/lib/ext2fs/swapfs.c b/lib/ext2fs/swapfs.c -index 6f6cec2..12427e0 100644 ---- a/lib/ext2fs/swapfs.c -+++ b/lib/ext2fs/swapfs.c -@@ -72,7 +72,7 @@ void ext2fs_swap_super(struct ext2_super_block * sb) - sb->s_flags = ext2fs_swab32(sb->s_flags); - sb->s_kbytes_written = ext2fs_swab64(sb->s_kbytes_written); - sb->s_snapshot_inum = ext2fs_swab32(sb->s_snapshot_inum); -- sb->s_snapshot_id = ext2fs_swab32(s_snapshot_id); -+ sb->s_snapshot_id = ext2fs_swab32(sb->s_snapshot_id); - sb->s_snapshot_r_blocks_count = - ext2fs_swab64(sb->s_snapshot_r_blocks_count); - sb->s_snapshot_list = ext2fs_swab32(sb->s_snapshot_list); - diff --git a/tools/e2fsprogs/patches/005-posix_memalign.patch b/tools/e2fsprogs/patches/005-posix_memalign.patch deleted file mode 100644 index 2ce4ead892..0000000000 --- a/tools/e2fsprogs/patches/005-posix_memalign.patch +++ /dev/null @@ -1,31 +0,0 @@ ---- a/lib/ext2fs/ext2fs.h -+++ b/lib/ext2fs/ext2fs.h -@@ -1212,7 +1212,26 @@ - - if (align == 0) - align = 8; -- if (retval = posix_memalign((void **) ptr, align, size)) { -+#ifdef HAVE_POSIX_MEMALIGN -+ retval = posix_memalign((void **)ptr, align, size); -+#else -+#ifdef HAVE_MEMALIGN -+ if ((*(void **)ptr = (void *)memalign(align, size)) == NULL) -+ retval = errno; -+ else -+ retval = 0; -+#else -+#ifdef HAVE_VALLOC -+ if ((*(void **)ptr = valloc(size)) == NULL) -+ retval = errno; -+ else -+ retval = 0; -+#else -+# error "Impossible to allocate aligned memory!" -+#endif /* HAVE_VALLOC */ -+#endif /* HAVE_MEMALIGN */ -+#endif /* HAVE_POSIX_MEMALIGN */ -+ if (retval) { - if (retval == ENOMEM) - return EXT2_ET_NO_MEMORY; - return retval; --- diff --git a/tools/gmp/Makefile b/tools/gmp/Makefile index 0b09b87c20..86c8aa0bc7 100644 --- a/tools/gmp/Makefile +++ b/tools/gmp/Makefile @@ -7,11 +7,11 @@ include $(TOPDIR)/rules.mk PKG_NAME:=gmp -PKG_VERSION:=5.0.4 +PKG_VERSION:=5.0.5 -PKG_SOURCE_URL:=@GNU/gmp/ PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz -PKG_MD5SUM:=0881f4ff2617226c673fc534ac39d448 +PKG_SOURCE_URL:=@GNU/gmp/ +PKG_MD5SUM:=8aef50959acec2a1ad41d144ffe0f3b5 include $(INCLUDE_DIR)/host-build.mk diff --git a/tools/mkimage/Makefile b/tools/mkimage/Makefile index 5ed82e6fa7..d4338e591f 100644 --- a/tools/mkimage/Makefile +++ b/tools/mkimage/Makefile @@ -7,11 +7,11 @@ include $(TOPDIR)/rules.mk PKG_NAME:=mkimage -PKG_VERSION:=2011.12 +PKG_VERSION:=2012.04.01 PKG_SOURCE:=u-boot-$(PKG_VERSION).tar.bz2 PKG_SOURCE_URL:=ftp://ftp.denx.de/pub/u-boot -PKG_MD5SUM:=7f29b9f6da44d6e46e988e7561fd1d5f +PKG_MD5SUM:=192bb231082d9159fb6e16de3039b6b2 PKG_CAT:=bzcat HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/u-boot-$(PKG_VERSION) diff --git a/tools/mkimage/patches/030-allow-to-use-different-magic.patch b/tools/mkimage/patches/030-allow-to-use-different-magic.patch index 73a0ac4f91..23f39ad22c 100644 --- a/tools/mkimage/patches/030-allow-to-use-different-magic.patch +++ b/tools/mkimage/patches/030-allow-to-use-different-magic.patch @@ -25,7 +25,7 @@ case 'D': if (--argc <= 0) usage (); -@@ -595,12 +606,13 @@ usage () +@@ -596,12 +607,13 @@ usage () fprintf (stderr, "Usage: %s -l image\n" " -l ==> list image header information\n", params.cmdname); diff --git a/tools/mklibs/Makefile b/tools/mklibs/Makefile index bd967217ea..7a82848adb 100644 --- a/tools/mklibs/Makefile +++ b/tools/mklibs/Makefile @@ -1,5 +1,5 @@ # -# Copyright (C) 2009 OpenWrt.org +# Copyright (C) 2009-2012 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -7,13 +7,11 @@ include $(TOPDIR)/rules.mk PKG_NAME:=mklibs -PKG_VERSION:=0.1.29 +PKG_VERSION:=0.1.34 PKG_SOURCE:=$(PKG_NAME)_$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=http://ftp.de.debian.org/debian/pool/main/m/mklibs/ -PKG_MD5SUM:=7f35dfdbde249a090199829c1a1222d8 - -HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/mklibs +PKG_MD5SUM:=afe0ed527ba96b8a882b5de350603007 include $(INCLUDE_DIR)/host-build.mk @@ -21,8 +19,8 @@ HOST_CFLAGS += -I$(CURDIR)/include define Host/Install $(INSTALL_BIN) \ - $(HOST_BUILD_DIR)/src/mklibs.py \ - $(HOST_BUILD_DIR)/src/mklibs-copy.py \ + $(HOST_BUILD_DIR)/src/mklibs \ + $(HOST_BUILD_DIR)/src/mklibs-copy \ $(HOST_BUILD_DIR)/src/mklibs-readelf/mklibs-readelf \ $(STAGING_DIR_HOST)/bin/ endef diff --git a/tools/mklibs/patches/001-missing_includes.patch b/tools/mklibs/patches/001-missing_includes.patch deleted file mode 100644 index 9f3485cb1b..0000000000 --- a/tools/mklibs/patches/001-missing_includes.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- a/src/mklibs-readelf/elf.cpp -+++ b/src/mklibs-readelf/elf.cpp -@@ -25,6 +25,7 @@ - #include - #include - #include -+#include - - using namespace Elf; - ---- a/src/mklibs-readelf/main.cpp -+++ b/src/mklibs-readelf/main.cpp -@@ -7,6 +7,7 @@ - - #include - #include -+#include - - #include "elf.hpp" - diff --git a/tools/mklibs/patches/002-disable_symbol_checks.patch b/tools/mklibs/patches/002-disable_symbol_checks.patch index 7ec63937c4..44be637609 100644 --- a/tools/mklibs/patches/002-disable_symbol_checks.patch +++ b/tools/mklibs/patches/002-disable_symbol_checks.patch @@ -1,23 +1,20 @@ ---- a/src/mklibs.py -+++ b/src/mklibs.py -@@ -500,7 +500,7 @@ while 1: +--- a/src/mklibs ++++ b/src/mklibs +@@ -524,7 +524,7 @@ while 1: # No progress in last pass. Verify all remaining symbols are weak. for name in unresolved: if not needed_symbols[name].weak: -- raise "Unresolvable symbol %s" % name +- raise Exception("Unresolvable symbol %s" % name) + print "WARNING: Unresolvable symbol %s" % name break previous_pass_unresolved = unresolved -@@ -533,10 +533,7 @@ while 1: - - # which symbols are actually used from each lib +@@ -559,7 +559,7 @@ while 1: for name in needed_symbols: -- if not name in symbol_provider: -- if not needed_symbols[name].weak: -- raise "No library provides non-weak %s" % name -- else: -+ if name in symbol_provider: + if not name in symbol_provider: + if not needed_symbols[name].weak: +- raise Exception("No library provides non-weak %s" % name) ++ print "WARNING: Unresolvable symbol %s" % name + else: lib = symbol_provider[name] library_symbols_used[lib].add(library_symbols[lib][name]) - diff --git a/tools/mklibs/patches/003-no_copy.patch b/tools/mklibs/patches/003-no_copy.patch index bd6505aff9..e0ab2ac88d 100644 --- a/tools/mklibs/patches/003-no_copy.patch +++ b/tools/mklibs/patches/003-no_copy.patch @@ -1,6 +1,6 @@ ---- a/src/mklibs.py -+++ b/src/mklibs.py -@@ -440,7 +440,7 @@ while 1: +--- a/src/mklibs ++++ b/src/mklibs +@@ -463,7 +463,7 @@ while 1: passnr = passnr + 1 # Gather all already reduced libraries and treat them as objects as well small_libs = [] @@ -9,7 +9,7 @@ obj = dest_path + "/" + lib small_libs.append(obj) inode = os.stat(obj)[ST_INO] -@@ -552,12 +552,7 @@ while 1: +@@ -579,12 +579,7 @@ while 1: if not so_file: sys.exit("File not found:" + library) pic_file = find_pic(library) @@ -23,7 +23,7 @@ # we have a pic file, recompile debug(DEBUG_SPAM, "extracting from:", pic_file, "so_file:", so_file) soname = extract_soname(so_file) -@@ -600,22 +595,14 @@ while 1: +@@ -627,22 +622,14 @@ while 1: cmd.append(library_depends_gcc_libnames(so_file)) command(target + "gcc", *cmd) diff --git a/tools/mklibs/patches/004-libpthread_link.patch b/tools/mklibs/patches/004-libpthread_link.patch index b4a6e4f513..657e232b0c 100644 --- a/tools/mklibs/patches/004-libpthread_link.patch +++ b/tools/mklibs/patches/004-libpthread_link.patch @@ -1,13 +1,13 @@ ---- a/src/mklibs.py -+++ b/src/mklibs.py -@@ -105,14 +105,14 @@ def library_depends(obj): +--- a/src/mklibs ++++ b/src/mklibs +@@ -106,14 +106,14 @@ def library_depends(obj): # Return a list of libraries the passed objects depend on. The # libraries are in "-lfoo" format suitable for passing to gcc. -def library_depends_gcc_libnames(obj): +def library_depends_gcc_libnames(obj, soname): if not os.access(obj, os.F_OK): - raise "Cannot find lib: " + obj + raise Exception("Cannot find lib: " + obj) libs = library_depends(obj) ret = [] for i in libs: @@ -17,7 +17,7 @@ if match.group('ld'): ret.append(find_lib(match.group(0))) elif match.group('lib'): -@@ -592,7 +592,7 @@ while 1: +@@ -619,7 +619,7 @@ while 1: cmd.extend(extra_flags) cmd.append("-lgcc") cmd.extend(["-L%s" % a for a in [dest_path] + [sysroot + b for b in lib_path if sysroot == "" or b not in ("/" + libdir + "/", "/usr/" + libdir + "/")]]) diff --git a/tools/mklibs/patches/006-duplicate_syms.patch b/tools/mklibs/patches/005-duplicate_syms.patch similarity index 80% rename from tools/mklibs/patches/006-duplicate_syms.patch rename to tools/mklibs/patches/005-duplicate_syms.patch index 3f39ee5bb4..8428abfc9a 100644 --- a/tools/mklibs/patches/006-duplicate_syms.patch +++ b/tools/mklibs/patches/005-duplicate_syms.patch @@ -1,6 +1,6 @@ ---- a/src/mklibs.py -+++ b/src/mklibs.py -@@ -507,7 +507,6 @@ while 1: +--- a/src/mklibs ++++ b/src/mklibs +@@ -531,7 +531,6 @@ while 1: library_symbols = {} library_symbols_used = {} @@ -8,7 +8,7 @@ # WORKAROUND: Always add libgcc on old-abi arm header = elf_header(find_lib(libraries.copy().pop())) -@@ -525,17 +524,13 @@ while 1: +@@ -549,20 +548,13 @@ while 1: library_symbols_used[library] = set() for symbol in symbols: for name in symbol.base_names(): @@ -21,7 +21,10 @@ # which symbols are actually used from each lib for name in needed_symbols: -- if name in symbol_provider: +- if not name in symbol_provider: +- if not needed_symbols[name].weak: +- print "WARNING: Unresolvable symbol %s" % name +- else: - lib = symbol_provider[name] - library_symbols_used[lib].add(library_symbols[lib][name]) + for lib in libraries: diff --git a/tools/mklibs/patches/005-readelf_fixes.patch b/tools/mklibs/patches/005-readelf_fixes.patch deleted file mode 100644 index 8ae0954551..0000000000 --- a/tools/mklibs/patches/005-readelf_fixes.patch +++ /dev/null @@ -1,33 +0,0 @@ ---- a/src/mklibs-readelf/main.cpp -+++ b/src/mklibs-readelf/main.cpp -@@ -57,6 +57,10 @@ static void process_elf_header (Elf::fil - static void process_dynamics (Elf::file *file, int64_t tag) - { - const Elf::section_type *section = file->get_section_DYNAMIC (); -+ -+ if (!section) -+ return; -+ - for (std::vector::const_iterator it = section->get_dynamics ().begin (); it != section->get_dynamics ().end (); ++it) - { - Elf::dynamic *dynamic = *it; -@@ -67,6 +71,9 @@ static void process_dynamics (Elf::file - - static void process_symbols_provided (const Elf::section_type *section) - { -+ if (!section) -+ return; -+ - for (std::vector::const_iterator it = section->get_symbols ().begin (); it != section->get_symbols ().end (); ++it) - { - const Elf::symbol *symbol = *it; -@@ -95,6 +102,9 @@ static void process_symbols_provided (co - - static void process_symbols_undefined (const Elf::section_type *section) - { -+ if (!section) -+ return; -+ - for (std::vector::const_iterator it = section->get_symbols ().begin (); it != section->get_symbols ().end (); ++it) - { - const Elf::symbol *symbol = *it; diff --git a/tools/mklibs/patches/007-uclibc_init.patch b/tools/mklibs/patches/006-uclibc_init.patch similarity index 89% rename from tools/mklibs/patches/007-uclibc_init.patch rename to tools/mklibs/patches/006-uclibc_init.patch index e76515085c..2df7fe4355 100644 --- a/tools/mklibs/patches/007-uclibc_init.patch +++ b/tools/mklibs/patches/006-uclibc_init.patch @@ -1,6 +1,6 @@ ---- a/src/mklibs.py -+++ b/src/mklibs.py -@@ -571,6 +571,11 @@ while 1: +--- a/src/mklibs ++++ b/src/mklibs +@@ -595,6 +595,11 @@ while 1: extra_post_obj.append(sysroot + libc_extras_dir + "/sofini.o") symbols.add(ProvidedSymbol('__dso_handle', None, None, True)) diff --git a/tools/mklibs/patches/008-gc_sections.patch b/tools/mklibs/patches/007-gc_sections.patch similarity index 87% rename from tools/mklibs/patches/008-gc_sections.patch rename to tools/mklibs/patches/007-gc_sections.patch index 2775493b09..068d88a532 100644 --- a/tools/mklibs/patches/008-gc_sections.patch +++ b/tools/mklibs/patches/007-gc_sections.patch @@ -1,6 +1,6 @@ ---- a/src/mklibs.py -+++ b/src/mklibs.py -@@ -583,7 +583,7 @@ while 1: +--- a/src/mklibs ++++ b/src/mklibs +@@ -607,7 +607,7 @@ while 1: # compile in only used symbols cmd = [] cmd.extend(gcc_options) diff --git a/tools/mklibs/patches/009-uclibc_libgcc_link.patch b/tools/mklibs/patches/008-uclibc_libgcc_link.patch similarity index 88% rename from tools/mklibs/patches/009-uclibc_libgcc_link.patch rename to tools/mklibs/patches/008-uclibc_libgcc_link.patch index 36f2067193..432a313b6c 100644 --- a/tools/mklibs/patches/009-uclibc_libgcc_link.patch +++ b/tools/mklibs/patches/008-uclibc_libgcc_link.patch @@ -1,6 +1,6 @@ ---- a/src/mklibs.py -+++ b/src/mklibs.py -@@ -112,11 +112,8 @@ def library_depends_gcc_libnames(obj, so +--- a/src/mklibs ++++ b/src/mklibs +@@ -113,11 +113,8 @@ def library_depends_gcc_libnames(obj, so ret = [] for i in libs: match = re.match("^(((?Pld\S*)|(lib(?P\S+))))\.so.*$", i) @@ -14,7 +14,7 @@ return ' '.join(ret) class Symbol(object): -@@ -560,6 +557,7 @@ while 1: +@@ -584,6 +581,7 @@ while 1: extra_flags = [] extra_pre_obj = [] extra_post_obj = [] @@ -22,7 +22,7 @@ symbols.update(library_symbols_used[library]) -@@ -590,9 +588,10 @@ while 1: +@@ -614,9 +612,10 @@ while 1: cmd.append(pic_file) cmd.extend(extra_post_obj) cmd.extend(extra_flags) diff --git a/tools/mklibs/patches/010-uclibc_libpthread_symbols.patch b/tools/mklibs/patches/009-uclibc_libpthread_symbols.patch similarity index 92% rename from tools/mklibs/patches/010-uclibc_libpthread_symbols.patch rename to tools/mklibs/patches/009-uclibc_libpthread_symbols.patch index 0c97216d1a..34866f7290 100644 --- a/tools/mklibs/patches/010-uclibc_libpthread_symbols.patch +++ b/tools/mklibs/patches/009-uclibc_libpthread_symbols.patch @@ -1,6 +1,6 @@ ---- a/src/mklibs.py -+++ b/src/mklibs.py -@@ -161,9 +161,10 @@ def undefined_symbols(obj): +--- a/src/mklibs ++++ b/src/mklibs +@@ -162,9 +162,10 @@ def undefined_symbols(obj): return result class ProvidedSymbol(Symbol): @@ -12,7 +12,7 @@ def base_names(self): ret = [] -@@ -204,11 +205,15 @@ def provided_symbols(obj): +@@ -205,11 +206,15 @@ def provided_symbols(obj): if version_string.lower() not in ('base', 'none'): version = version_string @@ -29,7 +29,7 @@ return result -@@ -476,6 +481,9 @@ while 1: +@@ -500,6 +505,9 @@ while 1: debug(DEBUG_SPAM, "present_symbols adding %s" % symbol) names = symbol.base_names() for name in names: @@ -39,7 +39,7 @@ present_symbols[name] = symbol # are we finished? -@@ -567,12 +575,16 @@ while 1: +@@ -591,12 +599,16 @@ while 1: # may segfault in ptmalloc_init due to undefined weak reference extra_pre_obj.append(sysroot + libc_extras_dir + "/soinit.o") extra_post_obj.append(sysroot + libc_extras_dir + "/sofini.o") diff --git a/tools/mklibs/patches/010-remove_STT_GNU_IFUNC.patch b/tools/mklibs/patches/010-remove_STT_GNU_IFUNC.patch new file mode 100644 index 0000000000..6bae8c7ce5 --- /dev/null +++ b/tools/mklibs/patches/010-remove_STT_GNU_IFUNC.patch @@ -0,0 +1,20 @@ +--- a/src/mklibs-readelf/main.cpp ++++ b/src/mklibs-readelf/main.cpp +@@ -84,7 +84,7 @@ static void process_symbols_provided (co + continue; + if (shndx == SHN_UNDEF || shndx == SHN_ABS) + continue; +- if (type != STT_NOTYPE && type != STT_OBJECT && type != STT_FUNC && type != STT_GNU_IFUNC && type != STT_COMMON && type != STT_TLS) ++ if (type != STT_NOTYPE && type != STT_OBJECT && type != STT_FUNC && type != STT_COMMON && type != STT_TLS) + continue; + if (!name.size()) + continue; +@@ -115,7 +115,7 @@ static void process_symbols_undefined (c + continue; + if (shndx != SHN_UNDEF) + continue; +- if (type != STT_NOTYPE && type != STT_OBJECT && type != STT_FUNC && type != STT_GNU_IFUNC && type != STT_COMMON && type != STT_TLS) ++ if (type != STT_NOTYPE && type != STT_OBJECT && type != STT_FUNC && type != STT_COMMON && type != STT_TLS) + continue; + if (!name.size()) + continue; diff --git a/tools/mklibs/patches/011-remove_multiarch.patch b/tools/mklibs/patches/011-remove_multiarch.patch new file mode 100644 index 0000000000..a32d8ee17a --- /dev/null +++ b/tools/mklibs/patches/011-remove_multiarch.patch @@ -0,0 +1,10 @@ +--- a/src/mklibs ++++ b/src/mklibs +@@ -263,6 +263,7 @@ def extract_soname(so_file): + return "" + + def multiarch(paths): ++ return paths + devnull = open('/dev/null', 'w') + dpkg_architecture = subprocess.Popen( + ['dpkg-architecture', '-qDEB_HOST_MULTIARCH'],