add debian patches to fix lto build

(cherry picked from commit bf7a00629f645e35c953c80aecf50e7363885546)
This commit is contained in:
Funda Wang 2025-01-15 23:22:42 +08:00 committed by openeuler-sync-bot
parent a4819fb8ed
commit e0295c7738
4 changed files with 181 additions and 95 deletions

View File

@ -3,21 +3,15 @@ From: wzx <wuzx1226@qq.com>
Date: Mon, 7 Nov 2022 15:13:35 +0800
Subject: [PATCH] Add sw64 architecture
Add sw64 architecture in file harness/cases/16.t setup-libaio-0.3.113/harness/cases/16.t setup-libaio-0.3.113/src/libaio.h setup-libaio-0.3.113/src/syscall-sw_64.h setup-libaio-0.3.113/src/syscall.h src/libaio.h src/libaio.h.arm64-ilp32 src/syscall-sw_64.h src/syscall.h to support sw64 architecture.
Add sw64 architecture in file harness/cases/16.t src/libaio.h src/syscall-sw_64.h src/syscall.h to support sw64 architecture.
Signed-off-by: wzx <wuzx1226@qq.com>
---
harness/cases/16.t | 2 ++
setup-libaio-0.3.113/harness/cases/16.t | 2 ++
setup-libaio-0.3.113/src/libaio.h | 2 +-
setup-libaio-0.3.113/src/syscall-sw_64.h | 5 +++++
setup-libaio-0.3.113/src/syscall.h | 2 ++
src/libaio.h | 2 +-
src/libaio.h.arm64-ilp32 | 2 +-
src/syscall-sw_64.h | 5 +++++
src/syscall.h | 2 ++
9 files changed, 21 insertions(+), 3 deletions(-)
create mode 100644 setup-libaio-0.3.113/src/syscall-sw_64.h
harness/cases/16.t | 2 ++
src/libaio.h | 2 +-
src/syscall-sw_64.h | 5 +++++
src/syscall.h | 2 ++
4 files changed, 10 insertions(+), 1 deletion(-)
create mode 100644 src/syscall-sw_64.h
diff --git a/harness/cases/16.t b/harness/cases/16.t
@ -33,56 +27,6 @@ index 4d24b04..9e8684a 100644
#elif defined(__alpha__)
#define SYS_eventfd 478
#elif defined(__aarch64__) || defined(__loongarch__) || defined(__riscv)
diff --git a/setup-libaio-0.3.113/harness/cases/16.t b/setup-libaio-0.3.113/harness/cases/16.t
index 4d24b04..9e8684a 100644
--- a/setup-libaio-0.3.113/harness/cases/16.t
+++ b/setup-libaio-0.3.113/harness/cases/16.t
@@ -16,6 +16,8 @@
#define SYS_eventfd 307
#elif defined(__s390__)
#define SYS_eventfd 318
+#elif defined(__sw_64__)
+#define SYS_eventfd 478
#elif defined(__alpha__)
#define SYS_eventfd 478
#elif defined(__aarch64__) || defined(__loongarch__) || defined(__riscv)
diff --git a/setup-libaio-0.3.113/src/libaio.h b/setup-libaio-0.3.113/src/libaio.h
index 24b4b8a..24a1a28 100644
--- a/setup-libaio-0.3.113/src/libaio.h
+++ b/setup-libaio-0.3.113/src/libaio.h
@@ -62,7 +62,7 @@ typedef enum io_iocb_cmd {
#define PADDEDul(x, y) unsigned long x; unsigned y
/* little endian, 64 bits */
-#elif defined(__ia64__) || defined(__x86_64__) || defined(__alpha__) || \
+#elif defined(__ia64__) || defined(__x86_64__) || defined(__alpha__) || defined(__sw_64__) || \
(defined(__aarch64__) && defined(__AARCH64EL__)) || \
defined(__loongarch64) || \
(defined(__riscv) && __riscv_xlen == 64) || \
diff --git a/setup-libaio-0.3.113/src/syscall-sw_64.h b/setup-libaio-0.3.113/src/syscall-sw_64.h
new file mode 100644
index 0000000..0aa4d3d
--- /dev/null
+++ b/setup-libaio-0.3.113/src/syscall-sw_64.h
@@ -0,0 +1,5 @@
+#define __NR_io_setup 398
+#define __NR_io_destroy 399
+#define __NR_io_getevents 400
+#define __NR_io_submit 401
+#define __NR_io_cancel 402
diff --git a/setup-libaio-0.3.113/src/syscall.h b/setup-libaio-0.3.113/src/syscall.h
index d2a117b..abc1762 100644
--- a/setup-libaio-0.3.113/src/syscall.h
+++ b/setup-libaio-0.3.113/src/syscall.h
@@ -21,6 +21,8 @@
#include "syscall-ppc.h"
#elif defined(__s390__)
#include "syscall-s390.h"
+#elif defined(__sw_64__)
+#include "syscall-sw_64.h"
#elif defined(__alpha__)
#include "syscall-alpha.h"
#elif defined(__arm__)
diff --git a/src/libaio.h b/src/libaio.h
index 87f9e8a..d9e4fb8 100644
--- a/src/libaio.h
@ -92,19 +36,6 @@ index 87f9e8a..d9e4fb8 100644
/* little endian, 64 bits */
-#elif defined(__ia64__) || defined(__x86_64__) || defined(__alpha__) || \
+#elif defined(__ia64__) || defined(__x86_64__) || defined(__alpha__) || defined(__sw_64__) || \
(defined(__aarch64__) && defined(__AARCH64EL__)) || \
defined(__loongarch64) || \
(defined(__riscv) && __riscv_xlen == 64) || \
diff --git a/src/libaio.h.arm64-ilp32 b/src/libaio.h.arm64-ilp32
index 24b4b8a..24a1a28 100644
--- a/src/libaio.h.arm64-ilp32
+++ b/src/libaio.h.arm64-ilp32
@@ -62,7 +62,7 @@ typedef enum io_iocb_cmd {
#define PADDEDul(x, y) unsigned long x; unsigned y
/* little endian, 64 bits */
-#elif defined(__ia64__) || defined(__x86_64__) || defined(__alpha__) || \
+#elif defined(__ia64__) || defined(__x86_64__) || defined(__alpha__) || defined(__sw_64__) || \
(defined(__aarch64__) && defined(__AARCH64EL__)) || \
defined(__loongarch64) || \
@ -134,5 +65,5 @@ index d2a117b..abc1762 100644
#include "syscall-alpha.h"
#elif defined(__arm__)
--
2.33.0
2.43.5

View File

@ -0,0 +1,69 @@
From 3f16a6024bcf95f63c80340b5d518727af93d946 Mon Sep 17 00:00:00 2001
From: Guillem Jover <guillem@hadrons.org>
Date: Wed, 3 Nov 2021 00:20:50 +0100
Subject: [PATCH libaio 07/26] Move semicolon to SYMVER and DEFSYMVER call
sites
These look like function macros, so let's unify their call sites to use
function syntax with a final semicolon.
Origin: vendor
Forwarded: https://marc.info/?l=linux-aio&m=164999309420541
Signed-off-by: Guillem Jover <guillem@hadrons.org>
---
src/io_cancel.c | 2 +-
src/io_getevents.c | 2 +-
src/io_queue_wait.c | 2 +-
src/syscall.h | 4 ++--
4 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/src/io_cancel.c b/src/io_cancel.c
index 2f0f5f4..441806d 100644
--- a/src/io_cancel.c
+++ b/src/io_cancel.c
@@ -20,4 +20,4 @@
#include "syscall.h"
io_syscall3(int, io_cancel_0_4, io_cancel, io_context_t, ctx, struct iocb *, iocb, struct io_event *, event)
-DEFSYMVER(io_cancel_0_4, io_cancel, 0.4)
+DEFSYMVER(io_cancel_0_4, io_cancel, 0.4);
diff --git a/src/io_getevents.c b/src/io_getevents.c
index 90d6081..88d285a 100644
--- a/src/io_getevents.c
+++ b/src/io_getevents.c
@@ -32,4 +32,4 @@ int io_getevents_0_4(io_context_t ctx, long min_nr, long nr, struct io_event * e
return __io_getevents_0_4(ctx, min_nr, nr, events, timeout);
}
-DEFSYMVER(io_getevents_0_4, io_getevents, 0.4)
+DEFSYMVER(io_getevents_0_4, io_getevents, 0.4);
diff --git a/src/io_queue_wait.c b/src/io_queue_wait.c
index 538d2f3..6f69a51 100644
--- a/src/io_queue_wait.c
+++ b/src/io_queue_wait.c
@@ -28,4 +28,4 @@ int io_queue_wait_0_4(io_context_t ctx, struct timespec *timeout)
{
return io_getevents(ctx, 0, 0, NULL, timeout);
}
-DEFSYMVER(io_queue_wait_0_4, io_queue_wait, 0.4)
+DEFSYMVER(io_queue_wait_0_4, io_queue_wait, 0.4);
diff --git a/src/syscall.h b/src/syscall.h
index d2a117b..f7ce979 100644
--- a/src/syscall.h
+++ b/src/syscall.h
@@ -6,10 +6,10 @@
#define SYMSTR(str) _SYMSTR(str)
#define SYMVER(compat_sym, orig_sym, ver_sym) \
- __asm__(".symver " SYMSTR(compat_sym) "," SYMSTR(orig_sym) "@LIBAIO_" SYMSTR(ver_sym));
+ __asm__(".symver " SYMSTR(compat_sym) "," SYMSTR(orig_sym) "@LIBAIO_" SYMSTR(ver_sym))
#define DEFSYMVER(compat_sym, orig_sym, ver_sym) \
- __asm__(".symver " SYMSTR(compat_sym) "," SYMSTR(orig_sym) "@@LIBAIO_" SYMSTR(ver_sym));
+ __asm__(".symver " SYMSTR(compat_sym) "," SYMSTR(orig_sym) "@@LIBAIO_" SYMSTR(ver_sym))
#if defined(__i386__)
#include "syscall-i386.h"
--
2.43.0

View File

@ -0,0 +1,96 @@
From cd2e1fdcf6a3474ac874303989e05e8333c7d2a2 Mon Sep 17 00:00:00 2001
From: Guillem Jover <guillem@hadrons.org>
Date: Tue, 2 Nov 2021 22:37:32 +0100
Subject: [PATCH libaio 08/26] Use new symver function attribute to support LTO
builds
The LTO support cannot work properly when there are versioned symbols
via asm statements, as those are not seen by the compiler. Use the new
function attributes if supported instead of the asm statements.
We need to move the SYMVER calls after the function definitions
otherwise it will reference symbols not yet seen.
Origin: vendor
Forwarded: https://marc.info/?l=linux-aio&m=164999309520544
Signed-off-by: Guillem Jover <guillem@hadrons.org>
---
src/compat-0_1.c | 7 +++----
src/syscall.h | 13 +++++++++++++
2 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/src/compat-0_1.c b/src/compat-0_1.c
index 722e107..ac40fcc 100644
--- a/src/compat-0_1.c
+++ b/src/compat-0_1.c
@@ -28,7 +28,6 @@
/* ABI change. Provide partial compatibility on this one for now. */
-SYMVER(compat0_1_io_cancel, io_cancel, 0.1);
int compat0_1_io_cancel(io_context_t ctx, struct iocb *iocb)
{
struct io_event event;
@@ -36,8 +35,8 @@ int compat0_1_io_cancel(io_context_t ctx, struct iocb *iocb)
/* FIXME: the old ABI would return the event on the completion queue */
return io_cancel(ctx, iocb, &event);
}
+SYMVER(compat0_1_io_cancel, io_cancel, 0.1);
-SYMVER(compat0_1_io_queue_wait, io_queue_wait, 0.1);
int compat0_1_io_queue_wait(io_context_t ctx, struct timespec *when)
{
struct timespec timeout;
@@ -45,10 +44,10 @@ int compat0_1_io_queue_wait(io_context_t ctx, struct timespec *when)
timeout = *when;
return io_getevents(ctx, 0, 0, NULL, when ? &timeout : NULL);
}
+SYMVER(compat0_1_io_queue_wait, io_queue_wait, 0.1);
/* ABI change. Provide backwards compatibility for this one. */
-SYMVER(compat0_1_io_getevents, io_getevents, 0.1);
int compat0_1_io_getevents(io_context_t ctx, long nr,
struct io_event *events,
const struct timespec *const_timeout)
@@ -59,4 +58,4 @@ int compat0_1_io_getevents(io_context_t ctx, long nr,
return io_getevents(ctx, 1, nr, events,
const_timeout ? &timeout : NULL);
}
-
+SYMVER(compat0_1_io_getevents, io_getevents, 0.1);
diff --git a/src/syscall.h b/src/syscall.h
index f7ce979..59e0bb3 100644
--- a/src/syscall.h
+++ b/src/syscall.h
@@ -2,14 +2,27 @@
#include <unistd.h>
#include <errno.h>
+#ifndef __has_attribute
+#define __has_attribute(x) 0
+#endif
+
#define _SYMSTR(str) #str
#define SYMSTR(str) _SYMSTR(str)
+#if __has_attribute(__symver__)
+#define SYMVER(compat_sym, orig_sym, ver_sym) \
+ extern __typeof(compat_sym) compat_sym \
+ __attribute__((__symver__(SYMSTR(orig_sym) "@LIBAIO_" SYMSTR(ver_sym))))
+#define DEFSYMVER(compat_sym, orig_sym, ver_sym) \
+ extern __typeof(compat_sym) compat_sym \
+ __attribute__((__symver__(SYMSTR(orig_sym) "@@LIBAIO_" SYMSTR(ver_sym))))
+#else
#define SYMVER(compat_sym, orig_sym, ver_sym) \
__asm__(".symver " SYMSTR(compat_sym) "," SYMSTR(orig_sym) "@LIBAIO_" SYMSTR(ver_sym))
#define DEFSYMVER(compat_sym, orig_sym, ver_sym) \
__asm__(".symver " SYMSTR(compat_sym) "," SYMSTR(orig_sym) "@@LIBAIO_" SYMSTR(ver_sym))
+#endif
#if defined(__i386__)
#include "syscall-i386.h"
--
2.43.0

View File

@ -1,9 +1,8 @@
Name: libaio
Version: 0.3.113
Release: 9
Release: 10
Summary: Linux-native asynchronous I/O access library
License: LGPLv2+
License: LGPL-2.0-or-later
URL: https://pagure.io/libaio
Source: https://releases.pagure.org/libaio/libaio-%{version}.tar.gz
@ -15,6 +14,8 @@ Patch4: 0004-libaio-makefile-add-D_FORTIFY_SOURCE-flag.patch
Patch5: 0005-Fix-compile-error-that-exec-checking-need-super-priv.patch
Patch6: 0006-libaio-Add-sw64-architecture.patch
Patch7: 0007-Fix-build-error-if-compiler-is-clang.patch
Patch8: 0008-Move-semicolon-to-SYMVER-and-DEFSYMVER-call-sites.patch
Patch9: 0009-Use-new-symver-function-attribute-to-support-LTO-bui.patch
BuildRequires: gcc
@ -34,17 +35,7 @@ Requires: %{name}%{?_isa} = %{version}-%{release}
Files for libaio development
%prep
%setup
%patch0 -p1 -b .install-to-destdir-slash-usr
%patch1 -p1 -b .arm64-ilp32
%patch2 -p1 -b .makefile-cflags
%patch3 -p1 -b .fix-x32
%patch4 -p1 -b .makefile-add-D_FORTIFY_SOURCE-flag
%patch5 -p1 -b .fix-compile-error
%ifarch sw_64
%patch6 -p1
%endif
%patch7 -p1
%autosetup -p1
%build
make
@ -55,11 +46,6 @@ make destdir=$RPM_BUILD_ROOT prefix=/ libdir=/%{_lib} usrlibdir=%{_libdir} \
rm -rf %{buildroot}%{_usr}/%{_lib}/libaio.a
%ldconfig_scriptlets
%check
make check
%files
%license COPYING
%attr(0755,root,root) %{_libdir}/libaio.so.*
@ -69,6 +55,10 @@ make check
%attr(0755,root,root) %{_libdir}/libaio.so
%changelog
* Mon Dec 09 2024 Funda Wang <fundawang@yeah.net> - 0.3.113-10
- add debian patches to fix lto build
- disable check section as it hangs a long time
* Wed Apr 12 2023 Chenxi Mao <chenxi.mao@suse.com> - 0.3.113-9
- Fix build error because of incorrect patch file name.