From 1d9542c50e2c263256446170ffbd29d0e15bb96d Mon Sep 17 00:00:00 2001 From: Adrian Schmutzler Date: Wed, 29 Jul 2020 21:00:12 +0200 Subject: [PATCH 1/6] build: image: return sizes if check-size fails Instead of just printing a warning that an image is too big, also print both actual size and limit in the string: WARNING: Image file somename.bin is too big: 2096101 > 1048576 Since the kernel size is checked via the same function (if KERNEL_SIZE is specified), this will also apply to the kernel image size check. Signed-off-by: Adrian Schmutzler --- include/image-commands.mk | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/include/image-commands.mk b/include/image-commands.mk index 9281b91990..8ed705a7f4 100644 --- a/include/image-commands.mk +++ b/include/image-commands.mk @@ -269,8 +269,10 @@ define Build/xor-image endef define Build/check-size - @[ $$(($(subst k,* 1024,$(subst m, * 1024k,$(if $(1),$(1),$(IMAGE_SIZE)))))) -ge "$$(stat -c%s $@)" ] || { \ - echo "WARNING: Image file $@ is too big" >&2; \ + @imagesize="$$(stat -c%s $@)"; \ + limitsize="$$(($(subst k,* 1024,$(subst m, * 1024k,$(if $(1),$(1),$(IMAGE_SIZE))))))"; \ + [ $$limitsize -ge $$imagesize ] || { \ + echo "WARNING: Image file $@ is too big: $$imagesize > $$limitsize" >&2; \ rm -f $@; \ } endef From 356866c481cf74e87b9025ebbfdef0995674dca3 Mon Sep 17 00:00:00 2001 From: Adrian Schmutzler Date: Thu, 30 Jul 2020 17:25:20 +0200 Subject: [PATCH 2/6] target: replace remaining occurrences of ifconfig with ip ifconfig is effectively deprecated for quite some time now. Let's replace the remaining occurrences for our target setup by the corresponding ip commands now. Note that this does not touch ar71xx, as it will be dropped anyway, and changing it would only make backports harder. Signed-off-by: Adrian Schmutzler --- .../base-files/lib/preinit/05_set_iface_mac_apm821xx | 2 +- .../base-files/lib/preinit/15_preinit_iface_atheros | 9 +++++---- .../mediatek/base-files/lib/preinit/05_set_preinit_iface | 2 +- .../base-files/lib/preinit/07_mt7621_bringup_dsa_master | 2 +- target/linux/sunxi/base-files/lib/preinit/03_b53_hack.sh | 2 +- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/target/linux/apm821xx/base-files/lib/preinit/05_set_iface_mac_apm821xx b/target/linux/apm821xx/base-files/lib/preinit/05_set_iface_mac_apm821xx index 1f8c1c29fb..5f92c01931 100644 --- a/target/linux/apm821xx/base-files/lib/preinit/05_set_iface_mac_apm821xx +++ b/target/linux/apm821xx/base-files/lib/preinit/05_set_iface_mac_apm821xx @@ -5,7 +5,7 @@ preinit_set_mac_address() { meraki,mr24|\ meraki,mx60) mac_lan=$(mtd_get_mac_binary_ubi board-config 0x66) - [ -n "$mac_lan" ] && ifconfig eth0 hw ether "$mac_lan" + [ -n "$mac_lan" ] && ip link set eth0 address "$mac_lan" ;; esac } diff --git a/target/linux/ath25/base-files/lib/preinit/15_preinit_iface_atheros b/target/linux/ath25/base-files/lib/preinit/15_preinit_iface_atheros index 6b77f393a9..235ba4befc 100644 --- a/target/linux/ath25/base-files/lib/preinit/15_preinit_iface_atheros +++ b/target/linux/ath25/base-files/lib/preinit/15_preinit_iface_atheros @@ -5,7 +5,7 @@ preinit_ip() { if [ -e "/sys/bus/mdio_bus/drivers/Infineon ADM6996/0:00" -o \ -e "/sys/bus/mdio_bus/drivers/Marvell 88E6060/0:10" ]; then vconfig set_name_type DEV_PLUS_VID_NO_PAD - ifconfig eth0 up + ip link set eth0 up vconfig add eth0 1 ifname=eth0.1 else @@ -15,7 +15,8 @@ preinit_ip() { } fi [ -n "$pi_ifname" ] && grep -q "$pi_ifname" /proc/net/dev && { - ifconfig $pi_ifname $pi_ip netmask $pi_netmask broadcast $pi_broadcast up + ip addr add $pi_ip/$pi_netmask broadcast $pi_broadcast dev $pi_ifname + ip link set $pi_ifname up } } @@ -26,8 +27,8 @@ preinit_ip_deconfig() { if [ -e "/sys/bus/mdio_bus/drivers/Infineon ADM6996/0:00" -o \ -e "/sys/bus/mdio_bus/drivers/Marvell 88E6060/0:10" ]; then vconfig rem eth0.1 2>/dev/null - ifconfig $pi_ifname down + ip link set $pi_ifname down elif [ -n "$pi_ifname" ]; then - ifconfig $pi_ifname 0.0.0.0 + ip -4 addr flush dev $pi_ifname fi } diff --git a/target/linux/mediatek/base-files/lib/preinit/05_set_preinit_iface b/target/linux/mediatek/base-files/lib/preinit/05_set_preinit_iface index 8d282818c6..f39e8aee8d 100644 --- a/target/linux/mediatek/base-files/lib/preinit/05_set_preinit_iface +++ b/target/linux/mediatek/base-files/lib/preinit/05_set_preinit_iface @@ -1,5 +1,5 @@ set_preinit_iface() { - ifconfig eth0 up + ip link set eth0 up ifname=lan1 } diff --git a/target/linux/ramips/mt7621/base-files/lib/preinit/07_mt7621_bringup_dsa_master b/target/linux/ramips/mt7621/base-files/lib/preinit/07_mt7621_bringup_dsa_master index 9a0da1716d..0f4660d242 100644 --- a/target/linux/ramips/mt7621/base-files/lib/preinit/07_mt7621_bringup_dsa_master +++ b/target/linux/ramips/mt7621/base-files/lib/preinit/07_mt7621_bringup_dsa_master @@ -14,7 +14,7 @@ mt7621_bringup_dsa_master() { ;; esac - ifconfig $masterif up + ip link set $masterif up } boot_hook_add preinit_main mt7621_bringup_dsa_master \ No newline at end of file diff --git a/target/linux/sunxi/base-files/lib/preinit/03_b53_hack.sh b/target/linux/sunxi/base-files/lib/preinit/03_b53_hack.sh index 6ad8f57620..cc0c67acc7 100644 --- a/target/linux/sunxi/base-files/lib/preinit/03_b53_hack.sh +++ b/target/linux/sunxi/base-files/lib/preinit/03_b53_hack.sh @@ -4,7 +4,7 @@ do_b53_hack() { # hack: enable switch on Lamobo R1 and reset counters case $(board_name) in lamobo,lamobo-r1) - ifconfig eth0 up + ip link set eth0 up sleep 1 swconfig dev switch0 set reset 1 swconfig dev switch0 set reset_mib 1 From 50413e1ec83dedaea44558d5f37af5454156a46a Mon Sep 17 00:00:00 2001 From: Adrian Schmutzler Date: Thu, 30 Jul 2020 17:25:21 +0200 Subject: [PATCH 3/6] package: replace remaining occurrences of ifconfig with ip ifconfig is effectively deprecated for quite some time now. Let's replace the remaining occurrences for packages by the corresponding ip commands now. Signed-off-by: Adrian Schmutzler --- .../config/netifd/files/usr/share/udhcpc/default.script | 6 +++--- .../config/qos-scripts/files/usr/lib/qos/generate.sh | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package/network/config/netifd/files/usr/share/udhcpc/default.script b/package/network/config/netifd/files/usr/share/udhcpc/default.script index ac765a6363..0a9eb0180e 100755 --- a/package/network/config/netifd/files/usr/share/udhcpc/default.script +++ b/package/network/config/netifd/files/usr/share/udhcpc/default.script @@ -14,8 +14,8 @@ set_classless_routes() { } setup_interface() { - echo "udhcpc: ifconfig $interface $ip netmask ${subnet:-255.255.255.0} broadcast ${broadcast:-+}" - ifconfig $interface $ip netmask ${subnet:-255.255.255.0} broadcast ${broadcast:-+} + echo "udhcpc: ip addr add $ip/${subnet:-255.255.255.0} broadcast ${broadcast:-+} dev $interface" + ip addr add $ip/${subnet:-255.255.255.0} broadcast ${broadcast:-+} dev $interface [ -n "$router" ] && [ "$router" != "0.0.0.0" ] && [ "$router" != "255.255.255.255" ] && { echo "udhcpc: setting default routers: $router" @@ -41,7 +41,7 @@ setup_interface() { applied= case "$1" in deconfig) - ifconfig "$interface" 0.0.0.0 + ip -4 addr flush dev "$interface" ;; renew) setup_interface update diff --git a/package/network/config/qos-scripts/files/usr/lib/qos/generate.sh b/package/network/config/qos-scripts/files/usr/lib/qos/generate.sh index 024be0c170..32f15581f8 100755 --- a/package/network/config/qos-scripts/files/usr/lib/qos/generate.sh +++ b/package/network/config/qos-scripts/files/usr/lib/qos/generate.sh @@ -326,7 +326,7 @@ start_interface() { append cstr "$classnr:$prio:$avgrate:$pktsize:$pktdelay:$maxrate:$qdisc:$filter" "$N" done append ${prefix}q "$(tcrules)" "$N" - export dev_${dir}="ifconfig $dev up >&- 2>&- + export dev_${dir}="ip link set $dev up >&- 2>&- tc qdisc del dev $dev root >&- 2>&- tc qdisc add dev $dev root handle 1: hfsc default ${class_default}0 tc class add dev $dev parent 1: classid 1:1 hfsc sc rate ${rate}kbit ul rate ${rate}kbit" From d168f140428c6d8623d11d875d91af8bb6de6f91 Mon Sep 17 00:00:00 2001 From: Adrian Schmutzler Date: Wed, 29 Jul 2020 17:26:08 +0200 Subject: [PATCH 4/6] toolchain/binutils: remove versions 2.29.1 and 2.31.1 We currently support four versions of binutils in parallel. Let's just keep the latest two and drop the older ones before the next one comes around. Signed-off-by: Adrian Schmutzler --- toolchain/binutils/Config.in | 10 - toolchain/binutils/Config.version | 8 - toolchain/binutils/Makefile | 8 - .../2.29.1/300-001_ld_makefile_patch.patch | 22 -- .../300-012_check_ldrunpath_length.patch | 20 -- .../400-mips_no_dynamic_linking_sym.patch | 18 -- ...e-default-emulation-for-mips64-linux.patch | 37 --- ...nment_expressions_in_output_sections.patch | 276 ------------------ .../2.31.1/300-001_ld_makefile_patch.patch | 22 -- .../300-012_check_ldrunpath_length.patch | 20 -- .../400-mips_no_dynamic_linking_sym.patch | 18 -- ...e-default-emulation-for-mips64-linux.patch | 37 --- 12 files changed, 496 deletions(-) delete mode 100644 toolchain/binutils/patches/2.29.1/300-001_ld_makefile_patch.patch delete mode 100644 toolchain/binutils/patches/2.29.1/300-012_check_ldrunpath_length.patch delete mode 100644 toolchain/binutils/patches/2.29.1/400-mips_no_dynamic_linking_sym.patch delete mode 100644 toolchain/binutils/patches/2.29.1/500-Change-default-emulation-for-mips64-linux.patch delete mode 100644 toolchain/binutils/patches/2.31.1/100-delay_evaluation_of_alignment_expressions_in_output_sections.patch delete mode 100644 toolchain/binutils/patches/2.31.1/300-001_ld_makefile_patch.patch delete mode 100644 toolchain/binutils/patches/2.31.1/300-012_check_ldrunpath_length.patch delete mode 100644 toolchain/binutils/patches/2.31.1/400-mips_no_dynamic_linking_sym.patch delete mode 100644 toolchain/binutils/patches/2.31.1/500-Change-default-emulation-for-mips64-linux.patch diff --git a/toolchain/binutils/Config.in b/toolchain/binutils/Config.in index e9b2d30422..9d77137f4b 100644 --- a/toolchain/binutils/Config.in +++ b/toolchain/binutils/Config.in @@ -6,16 +6,6 @@ choice help Select the version of binutils you wish to use. - config BINUTILS_USE_VERSION_2_29_1 - depends on !arc - bool "Binutils 2.29.1" - select BINUTILS_VERSION_2_29_1 - - config BINUTILS_USE_VERSION_2_31_1 - depends on !arc - bool "Binutils 2.31.1" - select BINUTILS_VERSION_2_31_1 - config BINUTILS_USE_VERSION_2_32 bool "Binutils 2.32" select BINUTILS_VERSION_2_32 diff --git a/toolchain/binutils/Config.version b/toolchain/binutils/Config.version index e7924f89c3..5350b546a6 100644 --- a/toolchain/binutils/Config.version +++ b/toolchain/binutils/Config.version @@ -1,9 +1,3 @@ -config BINUTILS_VERSION_2_29_1 - bool - -config BINUTILS_VERSION_2_31_1 - bool - config BINUTILS_VERSION_2_32 bool @@ -13,7 +7,5 @@ config BINUTILS_VERSION_2_34 config BINUTILS_VERSION string - default "2.29.1" if BINUTILS_VERSION_2_29_1 - default "2.31.1" if BINUTILS_VERSION_2_31_1 default "2.32" if BINUTILS_VERSION_2_32 default "2.34" if BINUTILS_VERSION_2_34 diff --git a/toolchain/binutils/Makefile b/toolchain/binutils/Makefile index c5c8bf588c..b5e121a442 100644 --- a/toolchain/binutils/Makefile +++ b/toolchain/binutils/Makefile @@ -15,14 +15,6 @@ PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz TAR_OPTIONS += --exclude='*.rej' -ifeq ($(PKG_VERSION),2.29.1) - PKG_HASH:=e7010a46969f9d3e53b650a518663f98a5dde3c3ae21b7d71e5e6803bc36b577 -endif - -ifeq ($(PKG_VERSION),2.31.1) - PKG_HASH:=5d20086ecf5752cc7d9134246e9588fa201740d540f7eb84d795b1f7a93bca86 -endif - ifeq ($(PKG_VERSION),2.32) PKG_HASH:=0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04 endif diff --git a/toolchain/binutils/patches/2.29.1/300-001_ld_makefile_patch.patch b/toolchain/binutils/patches/2.29.1/300-001_ld_makefile_patch.patch deleted file mode 100644 index 4365197f74..0000000000 --- a/toolchain/binutils/patches/2.29.1/300-001_ld_makefile_patch.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- a/ld/Makefile.am -+++ b/ld/Makefile.am -@@ -57,7 +57,7 @@ endif - # We put the scripts in the directory $(scriptdir)/ldscripts. - # We can't put the scripts in $(datadir) because the SEARCH_DIR - # directives need to be different for native and cross linkers. --scriptdir = $(tooldir)/lib -+scriptdir = $(libdir) - - EMUL = @EMUL@ - EMULATION_OFILES = @EMULATION_OFILES@ ---- a/ld/Makefile.in -+++ b/ld/Makefile.in -@@ -446,7 +446,7 @@ AM_CFLAGS = $(WARN_CFLAGS) $(ELF_CLFAGS) - # We put the scripts in the directory $(scriptdir)/ldscripts. - # We can't put the scripts in $(datadir) because the SEARCH_DIR - # directives need to be different for native and cross linkers. --scriptdir = $(tooldir)/lib -+scriptdir = $(libdir) - BASEDIR = $(srcdir)/.. - BFDDIR = $(BASEDIR)/bfd - INCDIR = $(BASEDIR)/include diff --git a/toolchain/binutils/patches/2.29.1/300-012_check_ldrunpath_length.patch b/toolchain/binutils/patches/2.29.1/300-012_check_ldrunpath_length.patch deleted file mode 100644 index 0b02c55978..0000000000 --- a/toolchain/binutils/patches/2.29.1/300-012_check_ldrunpath_length.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- a/ld/emultempl/elf32.em -+++ b/ld/emultempl/elf32.em -@@ -1463,6 +1463,8 @@ fragment <link.next) - if (bfd_get_flavour (abfd) == bfd_target_elf_flavour) diff --git a/toolchain/binutils/patches/2.29.1/400-mips_no_dynamic_linking_sym.patch b/toolchain/binutils/patches/2.29.1/400-mips_no_dynamic_linking_sym.patch deleted file mode 100644 index a28e9348a3..0000000000 --- a/toolchain/binutils/patches/2.29.1/400-mips_no_dynamic_linking_sym.patch +++ /dev/null @@ -1,18 +0,0 @@ ---- a/bfd/elfxx-mips.c -+++ b/bfd/elfxx-mips.c -@@ -7871,6 +7871,7 @@ _bfd_mips_elf_create_dynamic_sections (b - - name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING"; - bh = NULL; -+ if (0) { - if (!(_bfd_generic_link_add_one_symbol - (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0, - NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh))) -@@ -7883,6 +7884,7 @@ _bfd_mips_elf_create_dynamic_sections (b - - if (! bfd_elf_link_record_dynamic_symbol (info, h)) - return FALSE; -+ } - - if (! mips_elf_hash_table (info)->use_rld_obj_head) - { diff --git a/toolchain/binutils/patches/2.29.1/500-Change-default-emulation-for-mips64-linux.patch b/toolchain/binutils/patches/2.29.1/500-Change-default-emulation-for-mips64-linux.patch deleted file mode 100644 index 53d5b5ac5a..0000000000 --- a/toolchain/binutils/patches/2.29.1/500-Change-default-emulation-for-mips64-linux.patch +++ /dev/null @@ -1,37 +0,0 @@ ---- a/bfd/config.bfd -+++ b/bfd/config.bfd -@@ -1186,12 +1186,12 @@ case "${targ}" in - targ_selvecs="mips_elf32_le_vec mips_elf64_be_vec mips_elf64_le_vec mips_ecoff_be_vec mips_ecoff_le_vec" - ;; - mips64*el-*-linux*) -- targ_defvec=mips_elf32_ntrad_le_vec -- targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_trad_le_vec mips_elf32_trad_be_vec mips_elf64_trad_le_vec mips_elf64_trad_be_vec" -+ targ_defvec=mips_elf64_trad_le_vec -+ targ_selvecs="mips_elf32_ntrad_le_vec mips_elf32_ntrad_be_vec mips_elf32_trad_le_vec mips_elf32_trad_be_vec mips_elf64_trad_be_vec" - ;; - mips64*-*-linux*) -- targ_defvec=mips_elf32_ntrad_be_vec -- targ_selvecs="mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_be_vec mips_elf64_trad_le_vec" -+ targ_defvec=mips_elf64_trad_be_vec -+ targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_le_vec" - ;; - mips*el-*-linux*) - targ_defvec=mips_elf32_trad_le_vec ---- a/ld/configure.tgt -+++ b/ld/configure.tgt -@@ -530,11 +530,11 @@ mips*el-*-vxworks*) targ_emul=elf32elmip - mips*-*-vxworks*) targ_emul=elf32ebmipvxworks - targ_extra_emuls="elf32elmipvxworks" ;; - mips*-*-windiss) targ_emul=elf32mipswindiss ;; --mips64*el-*-linux-*) targ_emul=elf32ltsmipn32 -- targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip" -+mips64*el-*-linux-*) targ_emul=elf64ltsmip -+ targ_extra_emuls="elf32btsmipn32 elf32ltsmipn32 elf32ltsmip elf32btsmip elf64btsmip" - targ_extra_libpath=$targ_extra_emuls ;; --mips64*-*-linux-*) targ_emul=elf32btsmipn32 -- targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip" -+mips64*-*-linux-*) targ_emul=elf64btsmip -+ targ_extra_emuls="elf32btsmipn32 elf32ltsmipn32 elf32btsmip elf32ltsmip elf64ltsmip" - targ_extra_libpath=$targ_extra_emuls ;; - mips*el-*-linux-*) targ_emul=elf32ltsmip - targ_extra_emuls="elf32btsmip elf32ltsmipn32 elf64ltsmip elf32btsmipn32 elf64btsmip" diff --git a/toolchain/binutils/patches/2.31.1/100-delay_evaluation_of_alignment_expressions_in_output_sections.patch b/toolchain/binutils/patches/2.31.1/100-delay_evaluation_of_alignment_expressions_in_output_sections.patch deleted file mode 100644 index c006c94af6..0000000000 --- a/toolchain/binutils/patches/2.31.1/100-delay_evaluation_of_alignment_expressions_in_output_sections.patch +++ /dev/null @@ -1,276 +0,0 @@ -From 3d9c8f6b3f033a6092425b7344647fb51dbed5c6 Mon Sep 17 00:00:00 2001 -From: Alan Modra -Date: Sun, 26 Aug 2018 14:23:38 +0930 -Subject: [PATCH] Delay evaluation of alignment expressions in output sections - -git commit 702d16713 broke expressions using CONSTANT(COMMONPAGESIZE) -in ALIGN or SUBALIGN of output section statements, because these -optional fields were evaluated at script parse time and the patch in -question delayed setting of config.commonpagesize. The right thing to -do is keep the tree representation of those fields for later -evaluation. - - PR 23571 - * ldlang.h (section_alignment): Make it an expression tree. - (subsection_alignment): Likewise. - * ldlang.c (topower): Delete. - (output_section_statement_newfunc): Adjust initialization. - (init_os): Evaluate section_alignment. - (lang_size_sections_1): Likewise. - (size_input_section): Evaluate subsection_alignment. - (lang_enter_output_section_statement): Don't evaluate here. - (lang_new_phdr): Use exp_get_vma rather than exp_get_value_int. - * ldexp.h (exp_get_value_int): Delete. - (exp_get_power): Declare. - * ldexp.c (exp_get_value_int): Delete. - (exp_get_power): New function. - * emultempl/pe.em (place_orphan): Build expression for section - alignment. - * emultempl/pep.em (place_orphan): Likewise. - * testsuite/ld-scripts/pr23571.d, - * testsuite/ld-scripts/pr23571.t: New test. - * testsuite/ld-scripts/align.exp: Run it. ---- - ld/ChangeLog | 23 +++++++++++++++++++ - ld/emultempl/pe.em | 2 +- - ld/emultempl/pep.em | 2 +- - ld/ldexp.c | 20 ++++++++++++++-- - ld/ldexp.h | 4 ++-- - ld/ldlang.c | 48 +++++++++++++-------------------------- - ld/ldlang.h | 4 ++-- - ld/testsuite/ld-scripts/align.exp | 4 ++++ - ld/testsuite/ld-scripts/pr23571.d | 10 ++++++++ - ld/testsuite/ld-scripts/pr23571.t | 11 +++++++++ - 10 files changed, 88 insertions(+), 40 deletions(-) - create mode 100644 ld/testsuite/ld-scripts/pr23571.d - create mode 100644 ld/testsuite/ld-scripts/pr23571.t - ---- a/ld/emultempl/pe.em -+++ b/ld/emultempl/pe.em -@@ -2165,7 +2165,7 @@ gld_${EMULATION_NAME}_place_orphan (asec - &add_child); - if (bfd_link_relocatable (&link_info)) - { -- os->section_alignment = s->alignment_power; -+ os->section_alignment = exp_intop (1U << s->alignment_power); - os->bfd_section->alignment_power = s->alignment_power; - } - } ---- a/ld/emultempl/pep.em -+++ b/ld/emultempl/pep.em -@@ -1962,7 +1962,7 @@ gld_${EMULATION_NAME}_place_orphan (asec - &add_child); - if (bfd_link_relocatable (&link_info)) - { -- os->section_alignment = s->alignment_power; -+ os->section_alignment = exp_intop (1U << s->alignment_power); - os->bfd_section->alignment_power = s->alignment_power; - } - } ---- a/ld/ldexp.c -+++ b/ld/ldexp.c -@@ -1522,10 +1522,26 @@ exp_get_vma (etree_type *tree, bfd_vma d - return def; - } - -+/* Return the smallest non-negative integer such that two raised to -+ that power is at least as large as the vma evaluated at TREE, if -+ TREE is a non-NULL expression that can be resolved. If TREE is -+ NULL or cannot be resolved, return -1. */ -+ - int --exp_get_value_int (etree_type *tree, int def, char *name) -+exp_get_power (etree_type *tree, char *name) - { -- return exp_get_vma (tree, def, name); -+ bfd_vma x = exp_get_vma (tree, -1, name); -+ bfd_vma p2; -+ int n; -+ -+ if (x == (bfd_vma) -1) -+ return -1; -+ -+ for (n = 0, p2 = 1; p2 < x; ++n, p2 <<= 1) -+ if (p2 == 0) -+ break; -+ -+ return n; - } - - fill_type * ---- a/ld/ldexp.h -+++ b/ld/ldexp.h -@@ -229,8 +229,8 @@ void exp_print_tree - (etree_type *); - bfd_vma exp_get_vma - (etree_type *, bfd_vma, char *); --int exp_get_value_int -- (etree_type *, int, char *); -+int exp_get_power -+ (etree_type *, char *); - fill_type *exp_get_fill - (etree_type *, fill_type *, char *); - bfd_vma exp_get_abs_int ---- a/ld/ldlang.c -+++ b/ld/ldlang.c -@@ -1199,8 +1199,8 @@ output_section_statement_newfunc (struct - ret = (struct out_section_hash_entry *) entry; - memset (&ret->s, 0, sizeof (ret->s)); - ret->s.header.type = lang_output_section_statement_enum; -- ret->s.output_section_statement.subsection_alignment = -1; -- ret->s.output_section_statement.section_alignment = -1; -+ ret->s.output_section_statement.subsection_alignment = NULL; -+ ret->s.output_section_statement.section_alignment = NULL; - ret->s.output_section_statement.block_value = 1; - lang_list_init (&ret->s.output_section_statement.children); - lang_statement_append (stat_ptr, &ret->s, &ret->s.header.next); -@@ -2193,8 +2193,9 @@ init_os (lang_output_section_statement_t - exp_init_os (s->load_base); - - /* If supplied an alignment, set it. */ -- if (s->section_alignment != -1) -- s->bfd_section->alignment_power = s->section_alignment; -+ if (s->section_alignment != NULL) -+ s->bfd_section->alignment_power = exp_get_power (s->section_alignment, -+ "section alignment"); - } - - /* Make sure that all output sections mentioned in an expression are -@@ -4706,8 +4707,10 @@ size_input_section - is greater than any seen before, then record it too. Perform - the alignment by inserting a magic 'padding' statement. */ - -- if (output_section_statement->subsection_alignment != -1) -- i->alignment_power = output_section_statement->subsection_alignment; -+ if (output_section_statement->subsection_alignment != NULL) -+ i->alignment_power -+ = exp_get_power (output_section_statement->subsection_alignment, -+ "subsection alignment"); - - if (o->alignment_power < i->alignment_power) - o->alignment_power = i->alignment_power; -@@ -5147,7 +5150,8 @@ lang_size_sections_1 - section_alignment = os->bfd_section->alignment_power; - } - else -- section_alignment = os->section_alignment; -+ section_alignment = exp_get_power (os->section_alignment, -+ "section alignment"); - - /* Align to what the section needs. */ - if (section_alignment > 0) -@@ -5225,7 +5229,8 @@ lang_size_sections_1 - only align according to the value in the output - statement. */ - if (os->lma_region != os->region) -- section_alignment = os->section_alignment; -+ section_alignment = exp_get_power (os->section_alignment, -+ "section alignment"); - if (section_alignment > 0) - lma = align_power (lma, section_alignment); - } -@@ -6673,25 +6678,6 @@ lang_add_output (const char *name, int f - } - } - --static int --topower (int x) --{ -- unsigned int i = 1; -- int l; -- -- if (x < 0) -- return -1; -- -- for (l = 0; l < 32; l++) -- { -- if (i >= (unsigned int) x) -- return l; -- i <<= 1; -- } -- -- return 0; --} -- - lang_output_section_statement_type * - lang_enter_output_section_statement (const char *output_section_statement_name, - etree_type *address_exp, -@@ -6727,10 +6713,8 @@ lang_enter_output_section_statement (con - einfo (_("%F%P:%pS: error: align with input and explicit align specified\n"), - NULL); - -- os->subsection_alignment = -- topower (exp_get_value_int (subalign, -1, "subsection alignment")); -- os->section_alignment = -- topower (exp_get_value_int (align, -1, "section alignment")); -+ os->subsection_alignment = subalign; -+ os->section_alignment = align; - - os->load_base = ebase; - return os; -@@ -7748,7 +7732,7 @@ lang_new_phdr (const char *name, - n = (struct lang_phdr *) stat_alloc (sizeof (struct lang_phdr)); - n->next = NULL; - n->name = name; -- n->type = exp_get_value_int (type, 0, "program header type"); -+ n->type = exp_get_vma (type, 0, "program header type"); - n->filehdr = filehdr; - n->phdrs = phdrs; - n->at = at; ---- a/ld/ldlang.h -+++ b/ld/ldlang.h -@@ -143,6 +143,8 @@ typedef struct lang_output_section_state - fill_type *fill; - union etree_union *addr_tree; - union etree_union *load_base; -+ union etree_union *section_alignment; -+ union etree_union *subsection_alignment; - - /* If non-null, an expression to evaluate after setting the section's - size. The expression is evaluated inside REGION (above) with '.' -@@ -153,8 +155,6 @@ typedef struct lang_output_section_state - lang_output_section_phdr_list *phdrs; - - unsigned int block_value; -- int subsection_alignment; /* Alignment of components. */ -- int section_alignment; /* Alignment of start of section. */ - int constraint; - flagword flags; - enum section_type sectype; ---- a/ld/testsuite/ld-scripts/align.exp -+++ b/ld/testsuite/ld-scripts/align.exp -@@ -53,3 +53,7 @@ if ![is_aout_format] { - } - run_dump_test align2c - set LDFLAGS "$saved_LDFLAGS" -+ -+if { [is_elf_format] && ![is_generic_elf] } { -+ run_dump_test pr23571 -+} ---- /dev/null -+++ b/ld/testsuite/ld-scripts/pr23571.d -@@ -0,0 +1,10 @@ -+#source: align2a.s -+#ld: -T pr23571.t -z common-page-size=0x1000 -+#objdump: -h -w -+ -+.*: +file format .* -+ -+Sections: -+Idx Name +Size +VMA +LMA +File off +Algn +Flags -+ +0 \.text +[0-9a-f]* +0+1000 +0+1000 .* -+ +1 \.data +[0-9a-f]* +0+2000 +0+2000 +[0-9a-f]* +2\*\*12 .* ---- /dev/null -+++ b/ld/testsuite/ld-scripts/pr23571.t -@@ -0,0 +1,11 @@ -+SECTIONS -+{ -+ .text CONSTANT(COMMONPAGESIZE) : { -+ *(.text) -+ } -+ -+ .data : ALIGN(CONSTANT(COMMONPAGESIZE)) { -+ *(.data) -+ } -+ /DISCARD/ : {*(*)} -+} diff --git a/toolchain/binutils/patches/2.31.1/300-001_ld_makefile_patch.patch b/toolchain/binutils/patches/2.31.1/300-001_ld_makefile_patch.patch deleted file mode 100644 index 7b8300efac..0000000000 --- a/toolchain/binutils/patches/2.31.1/300-001_ld_makefile_patch.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- a/ld/Makefile.am -+++ b/ld/Makefile.am -@@ -57,7 +57,7 @@ endif - # We put the scripts in the directory $(scriptdir)/ldscripts. - # We can't put the scripts in $(datadir) because the SEARCH_DIR - # directives need to be different for native and cross linkers. --scriptdir = $(tooldir)/lib -+scriptdir = $(libdir) - - EMUL = @EMUL@ - EMULATION_OFILES = @EMULATION_OFILES@ ---- a/ld/Makefile.in -+++ b/ld/Makefile.in -@@ -563,7 +563,7 @@ AM_CFLAGS = $(WARN_CFLAGS) $(ELF_CLFAGS) - # We put the scripts in the directory $(scriptdir)/ldscripts. - # We can't put the scripts in $(datadir) because the SEARCH_DIR - # directives need to be different for native and cross linkers. --scriptdir = $(tooldir)/lib -+scriptdir = $(libdir) - BASEDIR = $(srcdir)/.. - BFDDIR = $(BASEDIR)/bfd - INCDIR = $(BASEDIR)/include diff --git a/toolchain/binutils/patches/2.31.1/300-012_check_ldrunpath_length.patch b/toolchain/binutils/patches/2.31.1/300-012_check_ldrunpath_length.patch deleted file mode 100644 index 58ee759de6..0000000000 --- a/toolchain/binutils/patches/2.31.1/300-012_check_ldrunpath_length.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- a/ld/emultempl/elf32.em -+++ b/ld/emultempl/elf32.em -@@ -1471,6 +1471,8 @@ fragment <link.next) - if (bfd_get_flavour (abfd) == bfd_target_elf_flavour) diff --git a/toolchain/binutils/patches/2.31.1/400-mips_no_dynamic_linking_sym.patch b/toolchain/binutils/patches/2.31.1/400-mips_no_dynamic_linking_sym.patch deleted file mode 100644 index 91ff77f827..0000000000 --- a/toolchain/binutils/patches/2.31.1/400-mips_no_dynamic_linking_sym.patch +++ /dev/null @@ -1,18 +0,0 @@ ---- a/bfd/elfxx-mips.c -+++ b/bfd/elfxx-mips.c -@@ -7888,6 +7888,7 @@ _bfd_mips_elf_create_dynamic_sections (b - - name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING"; - bh = NULL; -+ if (0) { - if (!(_bfd_generic_link_add_one_symbol - (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0, - NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh))) -@@ -7900,6 +7901,7 @@ _bfd_mips_elf_create_dynamic_sections (b - - if (! bfd_elf_link_record_dynamic_symbol (info, h)) - return FALSE; -+ } - - if (! mips_elf_hash_table (info)->use_rld_obj_head) - { diff --git a/toolchain/binutils/patches/2.31.1/500-Change-default-emulation-for-mips64-linux.patch b/toolchain/binutils/patches/2.31.1/500-Change-default-emulation-for-mips64-linux.patch deleted file mode 100644 index c6e123e88e..0000000000 --- a/toolchain/binutils/patches/2.31.1/500-Change-default-emulation-for-mips64-linux.patch +++ /dev/null @@ -1,37 +0,0 @@ ---- a/bfd/config.bfd -+++ b/bfd/config.bfd -@@ -913,12 +913,12 @@ case "${targ}" in - targ_selvecs="mips_elf32_le_vec mips_elf64_be_vec mips_elf64_le_vec mips_ecoff_be_vec mips_ecoff_le_vec" - ;; - mips64*el-*-linux*) -- targ_defvec=mips_elf32_ntrad_le_vec -- targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_trad_le_vec mips_elf32_trad_be_vec mips_elf64_trad_le_vec mips_elf64_trad_be_vec" -+ targ_defvec=mips_elf64_trad_le_vec -+ targ_selvecs="mips_elf32_ntrad_le_vec mips_elf32_ntrad_be_vec mips_elf32_trad_le_vec mips_elf32_trad_be_vec mips_elf64_trad_be_vec" - ;; - mips64*-*-linux*) -- targ_defvec=mips_elf32_ntrad_be_vec -- targ_selvecs="mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_be_vec mips_elf64_trad_le_vec" -+ targ_defvec=mips_elf64_trad_be_vec -+ targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_le_vec" - ;; - mips*el-*-linux*) - targ_defvec=mips_elf32_trad_le_vec ---- a/ld/configure.tgt -+++ b/ld/configure.tgt -@@ -464,11 +464,11 @@ mips*el-*-vxworks*) targ_emul=elf32elmip - mips*-*-vxworks*) targ_emul=elf32ebmipvxworks - targ_extra_emuls="elf32elmipvxworks" ;; - mips*-*-windiss) targ_emul=elf32mipswindiss ;; --mips64*el-*-linux-*) targ_emul=elf32ltsmipn32 -- targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip" -+mips64*el-*-linux-*) targ_emul=elf64ltsmip -+ targ_extra_emuls="elf32btsmipn32 elf32ltsmipn32 elf32ltsmip elf32btsmip elf64btsmip" - targ_extra_libpath=$targ_extra_emuls ;; --mips64*-*-linux-*) targ_emul=elf32btsmipn32 -- targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip" -+mips64*-*-linux-*) targ_emul=elf64btsmip -+ targ_extra_emuls="elf32btsmipn32 elf32ltsmipn32 elf32btsmip elf32ltsmip elf64ltsmip" - targ_extra_libpath=$targ_extra_emuls ;; - mips*el-*-linux-*) targ_emul=elf32ltsmip - targ_extra_emuls="elf32btsmip elf32ltsmipn32 elf64ltsmip elf32btsmipn32 elf64btsmip" From 18b7d87a8f76b4cf36e943d9211bd26d79f55ec6 Mon Sep 17 00:00:00 2001 From: Adrian Schmutzler Date: Fri, 31 Jul 2020 13:50:37 +0200 Subject: [PATCH 5/6] kirkwood: get rid of BOARD_NAME and tidy up DEVICE_DTS Since most of the DTS file names follow a common scheme now, let's update the automatically generated DEVICE_DTS value and get rid of some DEVICE_DTS and all BOARD_NAME entries for individual devices. This should specifically make the job easier for developers adding new devices, as they are not tempted to copy over BOARD_NAME anymore. Signed-off-by: Adrian Schmutzler --- target/linux/kirkwood/image/Makefile | 30 +++++++++++++--------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/target/linux/kirkwood/image/Makefile b/target/linux/kirkwood/image/Makefile index 3a600da13c..46aef31bee 100644 --- a/target/linux/kirkwood/image/Makefile +++ b/target/linux/kirkwood/image/Makefile @@ -17,7 +17,7 @@ endef define Device/Default PROFILES := Default - DEVICE_DTS = $$(if $$(BOARD_NAME),kirkwood-$$(BOARD_NAME),) + DEVICE_DTS = kirkwood-$(lastword $(subst _, ,$(1))) KERNEL_DEPENDS = $$(wildcard $(DTS_DIR)/$$(DEVICE_DTS).dts) KERNEL := kernel-bin | append-dtb | uImage none KERNEL_NAME := zImage @@ -30,13 +30,12 @@ define Device/Default IMAGES := sysupgrade.bin factory.bin IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata IMAGE/factory.bin := append-ubi - SUPPORTED_DEVICES = $(subst _,$(comma),$(1)) $$(BOARD_NAME) + SUPPORTED_DEVICES = $(subst _,$(comma),$(1)) endef define Device/checkpoint_l-50 DEVICE_VENDOR := Check Point DEVICE_MODEL := L-50 - DEVICE_DTS := kirkwood-l-50 DEVICE_PACKAGES := kmod-ath9k kmod-gpio-button-hotplug kmod-mvsdio \ kmod-rtc-s35390a kmod-usb-ledtrig-usbport wpad-basic IMAGES := sysupgrade.bin @@ -50,15 +49,16 @@ define Device/cisco_on100 KERNEL_IN_UBI := UBINIZE_OPTS := -E 5 IMAGE/factory.bin := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-ubi - BOARD_NAME := on100 DEVICE_PACKAGES := kmod-mvsdio + SUPPORTED_DEVICES += on100 endef TARGET_DEVICES += cisco_on100 define Device/cloudengines_pogoe02 DEVICE_VENDOR := Cloud Engines DEVICE_MODEL := Pogoplug E02 - BOARD_NAME := pogo_e02 + DEVICE_DTS := kirkwood-pogo_e02 + SUPPORTED_DEVICES += pogo_e02 endef TARGET_DEVICES += cloudengines_pogoe02 @@ -74,7 +74,8 @@ TARGET_DEVICES += cloudengines_pogoplugv4 define Device/iom_iconnect-1.1 DEVICE_VENDOR := Iomega DEVICE_MODEL := Iconnect - BOARD_NAME := iconnect + DEVICE_DTS := kirkwood-iconnect + SUPPORTED_DEVICES += iconnect endef TARGET_DEVICES += iom_iconnect-1.1 @@ -109,7 +110,6 @@ define Device/linksys_e4200-v2 $(Device/dsa-migration) DEVICE_MODEL := E4200 DEVICE_VARIANT := v2 - DEVICE_DTS := kirkwood-e4200-v2 KERNEL_SIZE := 2688k SUPPORTED_DEVICES += linksys,viper linksys-viper endef @@ -119,7 +119,6 @@ define Device/linksys_ea3500 $(Device/linksys) $(Device/dsa-migration) DEVICE_MODEL := EA3500 - DEVICE_DTS := kirkwood-ea3500 PAGESIZE := 512 SUBPAGESIZE := 256 BLOCKSIZE := 16k @@ -132,7 +131,6 @@ define Device/linksys_ea4500 $(Device/linksys) $(Device/dsa-migration) DEVICE_MODEL := EA4500 - DEVICE_DTS := kirkwood-ea4500 KERNEL_SIZE := 2688k SUPPORTED_DEVICES += linksys,viper linksys-viper endef @@ -141,31 +139,32 @@ TARGET_DEVICES += linksys_ea4500 define Device/raidsonic_ib-nas62x0 DEVICE_VENDOR := RaidSonic DEVICE_MODEL := ICY BOX IB-NAS62x0 - BOARD_NAME := ib62x0 + DEVICE_DTS := kirkwood-ib62x0 DEVICE_PACKAGES := kmod-ata-marvell-sata kmod-fs-ext4 + SUPPORTED_DEVICES += ib62x0 endef TARGET_DEVICES += raidsonic_ib-nas62x0 define Device/seagate_dockstar DEVICE_VENDOR := Seagate DEVICE_MODEL := FreeAgent Dockstar - BOARD_NAME := dockstar + SUPPORTED_DEVICES += dockstar endef TARGET_DEVICES += seagate_dockstar define Device/seagate_goflexnet DEVICE_VENDOR := Seagate DEVICE_MODEL := GoFlexNet - BOARD_NAME := goflexnet DEVICE_PACKAGES := kmod-ata-marvell-sata kmod-fs-ext4 + SUPPORTED_DEVICES += goflexnet endef TARGET_DEVICES += seagate_goflexnet define Device/seagate_goflexhome DEVICE_VENDOR := Seagate DEVICE_MODEL := GoFlexHome - BOARD_NAME := goflexhome DEVICE_PACKAGES := kmod-ata-marvell-sata kmod-fs-ext4 + SUPPORTED_DEVICES += goflexhome endef TARGET_DEVICES += seagate_goflexhome @@ -174,7 +173,7 @@ define Device/zyxel_nsa310b DEVICE_MODEL := NSA310b DEVICE_PACKAGES := kmod-ata-marvell-sata kmod-r8169 kmod-fs-ext4 \ kmod-gpio-button-hotplug kmod-hwmon-lm85 - BOARD_NAME := nsa310b + SUPPORTED_DEVICES += nsa310b endef TARGET_DEVICES += zyxel_nsa310b @@ -182,7 +181,6 @@ define Device/zyxel_nsa310s DEVICE_VENDOR := ZyXEL DEVICE_MODEL := NSA310S DEVICE_PACKAGES := kmod-ata-marvell-sata kmod-fs-ext4 kmod-gpio-button-hotplug - DEVICE_DTS := kirkwood-nsa310s endef TARGET_DEVICES += zyxel_nsa310s @@ -192,7 +190,7 @@ define Device/zyxel_nsa325 DEVICE_VARIANT := v1/v2 DEVICE_PACKAGES := kmod-ata-marvell-sata kmod-fs-ext4 \ kmod-gpio-button-hotplug kmod-rtc-pcf8563 kmod-usb3 - BOARD_NAME := nsa325 + SUPPORTED_DEVICES += nsa325 endef TARGET_DEVICES += zyxel_nsa325 From 1deaf695ec02d765c9ae28b1bac264798ca54a05 Mon Sep 17 00:00:00 2001 From: Adrian Schmutzler Date: Mon, 3 Aug 2020 12:02:48 +0200 Subject: [PATCH 6/6] ramips: fix/tidy up 4M tplink-v2-image flash layouts For the TP-Link 4M devices with tplink-v2-image recipe (mktplinkfw2.c), there are two different flash layouts based on the size of the (u)boot partition: device uboot OEM firmware OpenWrt (incl. config) tl-wr840n-v5 0x20000 0x3c0000 0x3d0000 tl-wr841n-v14 0x10000 0x3d0000 0x3e0000 In both cases, the 0x10000 config partition is used for the firmware partition as well due to the limited space available and since it's recreated by the OEM firmware anyway. However, the TFTP flashing process will only copy data up to the size of the initial (OEM) firmware size. Therefore, while we can use the bigger partition to have additional erase blocks on the device, we have to limit the image sizes to the TFTP limits. So far, only one layout definition has been set up in mktplinkfw2.c for 4M mediatek devices. This adds a second one and assigns them to the devices so the image sizes are correctly restrained. Signed-off-by: Adrian Schmutzler --- target/linux/ramips/image/mt76x8.mk | 2 +- tools/firmware-utils/src/mktplinkfw2.c | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/target/linux/ramips/image/mt76x8.mk b/target/linux/ramips/image/mt76x8.mk index 00c8fbe43e..9ec469d32d 100644 --- a/target/linux/ramips/image/mt76x8.mk +++ b/target/linux/ramips/image/mt76x8.mk @@ -528,7 +528,7 @@ define Device/tplink_tl-wr841n-v14 IMAGE_SIZE := 3968k DEVICE_MODEL := TL-WR841N DEVICE_VARIANT := v14 - TPLINK_FLASHLAYOUT := 4Mmtk + TPLINK_FLASHLAYOUT := 4MLmtk TPLINK_HWID := 0x08410014 TPLINK_HWREVADD := 0x14 IMAGES := sysupgrade.bin tftp-recovery.bin diff --git a/tools/firmware-utils/src/mktplinkfw2.c b/tools/firmware-utils/src/mktplinkfw2.c index 102d72b1cc..e1c28e6347 100644 --- a/tools/firmware-utils/src/mktplinkfw2.c +++ b/tools/firmware-utils/src/mktplinkfw2.c @@ -124,6 +124,12 @@ char md5salt_boot[MD5SUM_LEN] = { static struct flash_layout layouts[] = { { .id = "4Mmtk", + .fw_max_len = 0x3c0000, + .kernel_la = 0x80000000, + .kernel_ep = 0x80000000, + .rootfs_ofs = 0x140000, + }, { + .id = "4MLmtk", .fw_max_len = 0x3d0000, .kernel_la = 0x80000000, .kernel_ep = 0x80000000,