Add target for Loongson LoongArch64-based boards.
LoongArch is a new RISC ISA developed by Loongson. It's a bit like
MIPS or RISC-V. LoongArch includes both 32-bit and 64-bit versions
(LoongArch32/LoongArch64).
Loongson 3A5000 and 3A6000 are the two existing CPUs of LoongArch64
and is used for PC products. It's BIOS supports ACPI and UEFI-only
boot. These CPUs supports SMP and SMT.
At present only LoongArch64 is supported by linux kernel.
Toolchain requirement:
binutils >= 2.40
gcc >= 13.1
For details, please check the following links:
https://lwn.net/Articles/861951/https://loongson.github.io/LoongArch-Documentation/README-EN.html
Signed-off-by: Weijie Gao <hackpascal@gmail.com>
GCC has changed musl dynamic linker name from
ld-musl-loongarch-lp64d.so.1 to ld-musl-loongarch64.so.1 recently [1].
This means there are two dynamic linker names will be used across different
ersions of GCC. But musl 1.2.5 only supports the new name while the GCC
we're currently using uses the old name.
To maintain compatibility with all versions of GCC, the musl is then patched
to generate two symbolic links to libc.so with both old and new names.
[1] https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=8bccee51f0deac64b79cd9ad75df599422f4c8ff
Signed-off-by: Weijie Gao <hackpascal@gmail.com>
GCC has changed musl dynamic linker name from
ld-musl-loongarch-lp64d.so.1 to ld-musl-loongarch64.so.1 recently [1].
Meanwhile musl 1.2.5 only supports the new name. So it's better to follow
the new name.
[1] https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=8bccee51f0deac64b79cd9ad75df599422f4c8ff
Signed-off-by: Weijie Gao <hackpascal@gmail.com>
This updates glibc to version 2.38.
Add --enable-crypt since the crypt function got disabled in 2.38, but we
still need it.
Also add the newly introduced --enable-fortify-source flag and hook it up
to the build system.
Switch to .zst archive while at it.
Signed-off-by: Kazuki H <kazukih0205@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/14259
[ switch to .zst and fix mirror HASH ]
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
Change the default binutils version to 2.42.
Tested-by: Jonathan Lancett <j.lancett@ntlworld.com>
Tested-by: Andre Heider <a.heider@gmail.com>
Signed-off-by: Nick Hainke <vincent@systemli.org>
Currently when external toolchain is used, a info.mk is created (with
to-be-filled values) but is never actually filled with real values and
is never actually used in rules.mk.
This info.mk is used down the code with special packages like libgcc to
reference info like gcc version and package special library.
To mimic what is done with internal toolchain, add the include in
rules.mk for info.mk also for external library and in fix
toolchain/wrapper to fill the staging_dir info.mk.
The logic is to check if the external toolchain provide an info.mk and
if it doesn't we at least fill the GCC_VERSION with the value set in the
.config file.
With this special library like libgcc correctly reference and have set the
GCC_VERSION variable.
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
Update musl C library to 1.2.5
This release adds extension functions statx and preadv2/pwritev2,
with fallback implementations for older kernels, and adds two new
ports: loongarch64 and riscv32. Minor changes to the printf family
of functions have been made for conformance to new standards
interpretations/requirements. TLSDESC support for riscv64 has also
been added.
Bugs fixed include some DNS issues related to new TCP fallback
functionality, several rare race conditions, potentially incorrect
return value when glob aborts, and several signifiant arch-specific
bugs affecting TLSDESC on arm, riscv64 icache flushing, and
sh sigsetjmp and dlsym RTLD_NEXT.
1.2.5 release notes:
new features:
- statx function (linux extension; via syscall and fallback using fstatat)
- clone function is now usable and gives _Fork-like consistency in child
- statvfs now provides f_type result
- preadv2 and pwritev2 (linux extension) syscall wrappers
- riscv64 TLSDESC support
new ports:
- loongarch64
- riscv32
compatibility:
- DNS resolver can now handle answers with long CNAME chains
- string.h no longer provides (C23-incompat) non-prototype decl of basename
- fstatat statx backend now matches stat syscall non-automounting behavior
- mntent interfaces now handle escaped whitespace in paths/options
standards updates:
- printf %lc of nul wchar now produces output
- snprintf and swprintf no longer fail on n > INT_MAX
- ppoll is now exposed in default feature profile
bugs fixed:
- some long DNS answers were wrongly rejected despite new TCP support
- glob could wrongly return GLOB_NOMATCH if aborted before any matches
- multithreaded set*id could malfunction from thread sequencing logic bug
- certain use of threads after fork could deadlock thread-list lock
- posix_spawn child could deadlock in race with async parent death
- mbrtowc return value was wrong if argument n exceeded UINT_MAX
- 80-bit extended acoshl and powl got some corner cases wrong
- syslog incorrectly generated localized timestamps
arch-specific bugs fixed:
- arm (32-bit) TLSDESC malfunctioned due to addends being processed wrong
- riscv64 icache flush operation was non-functional
- sh sigsetjmp failed to properly restore call-saved register r8 on return
- sh dlsym RTLD_NEXT did not identify calling module correctly
Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
[Removed patch adding basename hack again]
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
I noticed that CONFIG_GDB was suddenly appearing in the main menuconfig
menu despite the fact that it should be visible only when TOOLCHAINOPTS
is selected and under a dedicated menu.
After some trial and error, it seems that this was caused by the recent
addition of GCC_USE_DEFAULT_VERSION, and after even more trial and error
it gets fixed as soon GCC_USE_DEFAULT_VERSION is placed after GCC_VERSION.
So, lets simply put GCC_USE_DEFAULT_VERSION after GCC_VERSION.
Fixes: 501ef81040 ("config: select KERNEL_WERROR if building with default GCC version")
Signed-off-by: Robert Marko <robimarko@gmail.com>
At the moment we have to manually follow the default GCC version
also in config/Config-kernel.in. This tends to be forgotten at GCC
version bumps (just happened when switching from version 12 to 13).
Instead, introduce a hidden Kconfig symbol which implies KERNEL_WERROR
in toolchain/gcc/Config.in where it is visible for developers changing
the default version.
Also remove the explicit default on BUILDBOT to avoid a circular
dependency and also because buildbots anyway implicitly always select
the default GCC version.
Reference: https://github.com/openwrt/openwrt/pull/15064
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Backport patch to fix mipsel_24kc_24kf. Patch has been merged in
binutils master and these are straight backports with minor rework.
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__locale:550:5: error: '__abi_tag__' attribute only applies to structs, variables, functions, and namespaces
_LIBCPP_INLINE_VISIBILITY
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__config:891:37: note: expanded from macro '_LIBCPP_INLINE_VISIBILITY'
# define _LIBCPP_INLINE_VISIBILITY _LIBCPP_HIDE_FROM_ABI
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__config:870:26: note: expanded from macro '_LIBCPP_HIDE_FROM_ABI'
__attribute__((__abi_tag__(_LIBCPP_TOSTRING(_LIBCPP_ODR_SIGNATURE))))
Fixed using backport of upstream commits [1-2] as discussed here
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111632#c21
[1] Include safe-ctype.h after C++ standard headers, to avoid over-poisoning
https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=9970b576b7e4ae337af1268395ff221348c4b34a
[2] libcc1: fix <vector> include
https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=5213047b1d50af63dfabb5e5649821a6cb157e33
Signed-off-by: Georgi Valkov <gvalkov@gmail.com>
Use GCC 13 instead of GCC 12 by default.
All target kernels are building with GCC 13.
Most packages from the feed are building fine.
The root file systems is getting a little bit smaller for MIPS 32 BE
and aarch64.
With GCC 12 I got these sizes for lantiq/xrx200:
7,005,867 openwrt-lantiq-xrx200-tplink_tdw8970-initramfs-kernel.bin
With GCC 13 I got these sizes for lantiq/xrx200:
6,989,754 openwrt-lantiq-xrx200-tplink_tdw8970-initramfs-kernel.bin
With GCC 12 I got these sizes for armsr/armv8:
13,083,836 openwrt-armsr-armv8-generic-ext4-combined.img.gz
4,900,240 openwrt-armsr-armv8-generic-ext4-rootfs.img.gz
20,142,592 openwrt-armsr-armv8-generic-kernel.bin
With GCC 13 I got these sizes for armsr/armv8:
13,068,966 openwrt-armsr-armv8-generic-ext4-combined.img.gz
4,893,078 openwrt-armsr-armv8-generic-ext4-rootfs.img.gz
20,142,592 openwrt-armsr-armv8-generic-kernel.bin
Signed-off-by: Nick Hainke <vincent@systemli.org>
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Works around a build issue when building on a host with an older glibc,
where it would fail to detect ELF support in libbfd
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Some package may needs to enable compatibility option based on the GCC
version.
Currently the GCC version is set based on the default value and doesn't
actually reflect the real value provided by the external toolchain if
used.
Fix this by correctly detecting the GCC version in the external
toolchain and set the correct value in CONFIG_GCC_VERSION.
A new option is added in menuconfig to manually set the GCC version if
needed.
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
This adds the following changes:
b4f76ecc9e Ignore MAP_VARIABLE in tst-mman-consts.py
f5d377c896 __check_pf: Add a cancellation cleanup handler [BZ #20975]
0e3e9dbb0e Document BZ #20975 fix
e2974d26ce io: Fix record locking contants on 32 bit arch with 64 bit default time_t (BZ#30477)
3593050c27 io: Fix F_GETLK, F_SETLK, and F_SETLKW for powerpc64
8dcb1a5181 hppa: xfail debug/tst-ssp-1 when have-ssp is yes (gcc-12 and later)
0930ff8eb3 realloc: Limit chunk reuse to only growing requests [BZ #30579]
3f4b4e2cdd elf: _dl_find_object may return 1 during early startup (bug 30515)
260d4b742b nptl: Fix tst-cancel30 on sparc64
58f7431fd7 sparc: Fix la_symbind for bind-now (BZ 23734)
1caf955269 x86: Increase `non_temporal_threshold` to roughly `sizeof_L3 / 4`
80a8c858a5 x86: Fix slight bug in `shared_per_thread` cache size calculation.
cc8243fb0b x86: Use `3/4*sizeof(per-thread-L3)` as low bound for NT threshold.
f94ff95e93 x86: Fix incorrect scope of setting `shared_per_thread` [BZ# 30745]
0d500bfdc0 hurd: Make exception subcode a long
be26b29262 io: Fix record locking contants for powerpc64 with __USE_FILE_OFFSET64
3d24d1903d elf: Do not run constructors for proxy objects
a7e34a6675 elf: Always call destructors in reverse constructor order (bug 30785)
bdb594afa5 elf: Remove unused l_text_end field from struct link_map
1a7cbe52c8 elf: Move l_init_called_next to old place of l_text_end in link map
b752934602 CVE-2023-4527: Stack read overflow with large TCP responses in no-aaaa mode
6529a7466c (HEAD) getaddrinfo: Fix use after free in getcanonname (CVE-2023-4806)
79310b45af x86/dl-cacheinfo: remove unsused parameter from handle_amd
9d5c6e27ed x86: Fix for cache computation on AMD legacy cpus.
4473d1b87d Fix leak in getaddrinfo introduced by the fix for CVE-2023-4806 [BZ #30843]
94ef701365 Document CVE-2023-4806 and CVE-2023-5156 in NEWS
2dfd8c77b5 i686: Regenerate ulps
b4e23c75ae tunables: Terminate if end of input is reached (CVE-2023-4911)
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
The PKG_CPE_ID links to NIST CPE version 2.2.
Assign PKG_CPE_ID to all remaining package which have a CPE ID.
Not every package has a CPE id.
Related: https://github.com/openwrt/packages/issues/8534
Signed-off-by: Alexander Couzens <lynxis@fe80.eu>
Remove debugging `env` dump left over as build environments might
contain some sensitive information, which then might leak into the build
logs.
Fixes: 2105acbe28 ("kernel-headers: fix compile error caused by wrong host include path when the toolchain is already built")
Signed-off-by: Petr Štetiar <ynezz@true.cz>
Executing following command currently fails:
$ make toolchain/kernel-headers/{download,check} V=sc FIXUP=1
...
include/kernel-version.mk:11: *** Missing kernel version/hash file for . Please create include/kernel-. Stop.
So lets fix it by adding the necessary missing KERNEL_PATCHVER variable.
That additional kernel-build.mk include is needed to add another set of
missing variables:
$ make toolchain/kernel-headers/{download,check} V=sc FIXUP=1
...
Makefile:115: *** ERROR: Unknown pack format for file tmp/dl/. Stop.
Fixes: 0765466a42 ("kernel: split kernel version to dedicated files")
Signed-off-by: Petr Štetiar <ynezz@true.cz>
Add the __extension__ mark before #include_next in strings.h
to avoid a compiler error when -pedantic is enabled.
This has been done for all other headers in the past.
Signed-off-by: Matthias Van Parys <matthias.vanparys@softathome.com>
Since kernel 5.17+ the mips asm.h includes isa-rev.h, which itself was
added 4.17. Without it, lzma-loader will fail to build:
make[3] -C target/linux compile
make[5]: warning: jobserver unavailable: using -j1. Add '+' to parent make rule.
In file included from head.S:22:
.../staging_dir/toolchain-mips_mips32_gcc-12.3.0_musl/include/asm/asm.h:22:10: fatal error: asm/isa-rev.h: No such file or directory
22 | #include <asm/isa-rev.h>
| ^~~~~~~~~~~~~~~
compilation terminated.
make[6]: *** [Makefile:64: head.o] Error 1
make[5]: *** [Makefile:345: compile] Error 2
make[4]: *** [Makefile:24: compile] Error 2
make[3]: *** [Makefile:11: compile] Error 2
ERROR: target/linux failed to build.
So add the file to the files to install. We can do that unconditionally,
since the oldest supported kernel 5.15 already includes it, even it if
does not need it.
Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
RISC-V has no support for subword atomic operations; code currently
generates libatomic library calls.
This patch changes the default behavior to fast inline subword atomic
calls that do not require libatomic.
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
The glibc build was failing with this error message:
aclocal.m4:6: error: Exactly version 2.69 of Autoconf is required but you have 2.71
aclocal.m4:6: the top level
The autoconf run on glibc is not needed, just remove it.
Fixes: #12631
Fixes: 030447b8f4 ("tools/autoconf: bump to 2.71")
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Release notes:
new features:
- large dns record lookups via tcp fallback
- new getaddrinfo EAI_NODATA result to distinguish NODATA/NxDomain
- support for new RELR compressed format for relative relocations
- sysconf keys for querying signal stack size requirements
- real vfork on riscv64
performance:
- mallocng no longer uses MADV_FREE (high performance cost, little gain)
- vdso clock_gettime is supported once again on 32-bit arm
compatibility:
- gethostbyname family now distinguishes NO_DATA from HOST_NOT_FOUND
- res_send now works with caller-provided edns0 queries
- arpa/nameser.h RR types list is now up-to-date
- previously-missing POSIX confstr keys have been added
- mntent interfaces now accept missing fields
- alt signal stack, if any, is now used for internal signals
- the LFS64 macros are no longer exposed without _LARGEFILE64_SOURCE
- memmem (POSIX-future) is now exposed in default feature profile
- pthread_atfork now admits calls from an application-provided malloc
- debugger tracking of shared libraries now works on MIPS PIE binaries
- sendmsg now supports up to SCM_MAX_FD fds in SCM_RIGHTS messages
bugs fixed:
- gethostbyname[2]_r wrongly returned nonzero (error) on negative result
- parallel v4/v6 address queries could fail on query id collisions
- spurious getaddrinfo/AI_ADDRCONFIG failures due to errno clobbering
- dns search domains ending in dot (including lone dot) broke lookups
- ipv6 servers in resolv.conf broke lookups on systems with v6 disabled
- systems with bindv6only failed to query both v4 and v6 nameservers
- res_mkquery mishandled consecutive final dots in name
- res_send could malfunction for very small answer buffer sizes
- resolver dns backend accepted answers with wrong (A vs AAAA) RR type
- getservbyport_r returned junk or ENOENT (vs ERANGE) on buffer size errors
- dns result parsing of malformed responses could process uninitialized data
- freopen didn't reset stream orientation (byte/wide) & encoding rule
- fwprintf didn't print most fields on open_wmemstream FILEs
- wide printf %lc ignored field width
- wide printf erroneously processed %n after encoding errors
- use of wide printf %9$ argument slot overflowed undersized buffer
- swprintf malfunctioned on nul character in output
- strverscmp ordered digit sequences vs nondigits incorrectly
- timer_create/SIGEV_THREAD failure leaked the thread
- semaphores were subject to missed-wake under certain usage patterns
- several possible rare deadlocks with lock handling at thread exit
- several possible rare deadlocks with aio and multithreaded fork
- dynamic linker relro processing was broken on archs w/variable pagesize
- async cancellation could run cancellation handlers in invalid context
- pthread_detach was wrongly a cancellation point in rare race code path
- use-after-close/double-close errors in mq_notify error paths
- mq_notify event thread wrongly ran with signals unmasked
- wcs{,n}cmp, wmemcmp returned wrong results when difference overflowed
- accept4, pipe2, and dup3 handled unknown flags wrong in fallback cases
- CPU_SETSIZE macro had wrong unit
- select fallback for pre-time64 kernels truncated timeout (vs clamping)
arch-specific bugs fixed:
- x32 new socketcalls took fallback path due to pointer sign extension
- x32 wait4 didn't fill rusage structure (time64 regression)
- x32 semtimedop mismatched timespec ABI with kernel (time64 regression)
- sigaction signal mask was bogus on or1k, microblaze, mips, and riscv
- powerpc-sf longjmp asm clobbered value argument
- or1k poll function passed timeout to syscall in wrong form
Removed upstreamed:
- 800-mips_pie_debug.patch
Manually rebased:
- 600-nftw-support-common-gnu-extension.patch
Signed-off-by: Linhui Liu <liulinhui36@gmail.com>
some targets do not define the _REDIR_TIME64 macro resulting in a
build error regression since ddfe5678a4
fix by checking if the macro is defined
[1] https://github.com/openwrt/openwrt/issues/12587Fixes: #12587
Fixes: ddfe5678a4 ("fortify-headers: fix inconsistent time_t version of ppoll")
Signed-off-by: Georgi Valkov <gvalkov@gmail.com>
The purpose of this is to remove all of the compatibility code that is
normally compiled into glibc for kernels < 5.15 from our build. Only
Linux kernels >= 5.15 will be supported.
Signed-off-by: Nick Hainke <vincent@systemli.org>
While improving access path analysis a typo happened. Now it can happen
that gcc misscompiles. The patch is fixing the issue. However, also
other gcc versions 10.2+ are affected. They also should be bumped or the
fix should be backported.
For more bug information have a look at:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109585
Signed-off-by: Nick Hainke <vincent@systemli.org>
LTO object files will now be compressed using zstd.
Compressing debug sections with zstd will have to wait for GCC 13,
which adds support for -gz=zstd.
NOTE: wiping the ccache is strongly recommended, not doing so might
yield build error later on:
"lto1: internal compiler error: original not compressed with zstd"
Signed-off-by: Andre Heider <a.heider@gmail.com>
This was build tested with all core packages on all targets
successfully.
This was run tested on the following systems:
* lantiq/xrx200 musl
* x86/64 musl
* x86/64 glibc
* malta/be
The size of some of the initramfs images from lantiq/xrx increased by
240 bytes.
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Add the patches with real changes from the binutils 2.40 stable branch.
I am not aware that we ran into any of these problems, but I think it is
better to take the existing stable patches.
They were exported like this:
git format-patch binutils-2_40...origin/binutils-2_40-branch
I removed the patches changing the version numbers and updating the
translations only.
I removed the following patches:
*Automatic-date-updat*
001-Re-enable-development.-Update-version-to-2.40.0.patch
004-Updated-translations-for-the-gas-and-binutils-sub-di.patch
015-Updated-Swedish-translation-for-the-binutils-sub-dir.patch
027-Updated-Swedish-translation-for-the-binutils-sub-dir.patch
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
The utils subtarget was used for uClibc and eglibc
which are both obsolete and replaced in Openwrt by mainline
musl and glibc, which do not have a utils Makefile target.
Ref: 5d19a38d8 ("toolchain: sync eglibc headers/build split with uclibc changes")
Fixes: 63fb17520 ("toolchain: remove uClibc-ng")
Suggested-by: Andre Heider <a.heider@gmail.com>
Signed-off-by: Michael Pratt <mcpratt@pm.me>
Reorganize dependencies between toolchain targets to save a line.
This also puts them in a linear order which is easier to read.
Signed-off-by: Michael Pratt <mcpratt@pm.me>
Use the gcc/final/install target stampfile as the prerequisite
for the toolchain/compile target stampfile.
The previous filename was also incorrect,
the stampfile name format was changed (see reference)
but was never updated here.
The issue was never noticed
because the usage of timestamp.pl was broken
(fixed in previous commit)
causing the extra prereq files passed to 'call stampfile'
to never get checked at all.
Fixes: 5149ed151 ("gcc: split up the build process into three distinct stages")
Signed-off-by: Michael Pratt <mcpratt@pm.me>
This was apparently introduced to recreate the toolchain (wipe
staging_dir/toolchain*, but keep build_dir/toolchain*, followed by a
`make toolchain/compile`).
But it leaves leftovers and causes re-links to happen at src_install phase,
because of the changed paths, possibly adding yet another source of issues.
With the prior commits removing various hacks related to the "initial"
folder we can remove installing it twice altogether.
The recreated toolchain is exactly the same as before.
Signed-off-by: Andre Heider <a.heider@gmail.com>