diff --git a/.github/workflows/build-test.sh b/.github/workflows/build-test.sh index 784340ec45..9c3d2e7338 100755 --- a/.github/workflows/build-test.sh +++ b/.github/workflows/build-test.sh @@ -96,6 +96,9 @@ if [[ -n "$CROSS_ARCH" ]]; then armhf) triplet=arm-linux-gnueabihf ;; + riscv64) + triplet=riscv64-linux-gnu + ;; *) fatal "Unsupported cross architecture: $CROSS_ARCH" ;; diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 2596b3edb5..a5b2027139 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -42,6 +42,9 @@ jobs: - env: { COMPILER: "gcc", COMPILER_VERSION: "13", LINKER: "bfd", CROSS_ARCH: "armhf" } runner: [ ubuntu-24.04-arm ] python-version: '' + - env: { COMPILER: "gcc", COMPILER_VERSION: "13", LINKER: "bfd", CROSS_ARCH: "riscv64" } + runner: [ ubuntu-24.04-arm ] + python-version: '' - env: { COMPILER: "clang", COMPILER_VERSION: "18", LINKER: "lld" } runner: [ ubuntu-24.04-s390x ] python-version: '' diff --git a/.github/workflows/riscv64-gcc.cross b/.github/workflows/riscv64-gcc.cross new file mode 100644 index 0000000000..8096e45192 --- /dev/null +++ b/.github/workflows/riscv64-gcc.cross @@ -0,0 +1,21 @@ +[binaries] +c = 'riscv64-linux-gnu-gcc' +cpp = 'riscv64-linux-gnu-g++' +ar = 'riscv64-linux-gnu-gcc-ar' +nm = 'riscv64-linux-gnu-gcc-nm' +strip = 'riscv64-linux-gnu-strip' +pkgconfig = 'pkg-config' + +[properties] +needs_exe_wrapper = true +pkg_config_libdir = '/usr/lib/riscv64-linux-gnu/pkgconfig:/usr/share/pkgconfig' +c_args = ['-O2', '-pipe', '-g', '-feliminate-unused-debug-types'] +c_link_args = ['-fuse-ld=bfd', '-Wl,-O1', '-Wl,--hash-style=gnu', '-Wl,--as-needed', '-Wl,-z,relro,-z,now,-z,noexecstack'] +cpp_args = [] +cpp_link_args = ['-fuse-ld=bfd', '-Wl,-O1', '-Wl,--hash-style=gnu', '-Wl,--as-needed', '-Wl,-z,relro,-z,now,-z,noexecstack'] + +[host_machine] +system = 'linux' +cpu_family = 'riscv64' +cpu = 'riscv64' +endian = 'little' diff --git a/src/core/dynamic-user.c b/src/core/dynamic-user.c index 921622d92c..eb4235637e 100644 --- a/src/core/dynamic-user.c +++ b/src/core/dynamic-user.c @@ -357,8 +357,8 @@ static int dynamic_user_realize( r = dynamic_user_pop(d, &num, &uid_lock_fd); if (r < 0) { - int new_uid_lock_fd; - uid_t new_uid; + int new_uid_lock_fd = -EBADF; /* avoid false maybe-uninitialized warning */ + uid_t new_uid = UID_INVALID; /* avoid false maybe-uninitialized warning */ if (r != -EAGAIN) return r; @@ -465,7 +465,7 @@ static int dynamic_user_realize( int dynamic_user_current(DynamicUser *d, uid_t *ret) { _cleanup_close_ int lock_fd = -EBADF; - uid_t uid; + uid_t uid = UID_INVALID; /* avoid false maybe-uninitialized warning */ int r; assert(d);