[redhat-lsb] Resolves:rh#738256:- redhat-lsb fails to build on ARM
pnemade
pnemade at fedoraproject.org
Wed Nov 30 10:23:03 UTC 2011
commit 290d7c034e0fd5d689e20a13f192160b1ac0a031
Author: Parag Nemade <pnemade at redhat.com>
Date: Wed Nov 30 15:52:57 2011 +0530
Resolves:rh#738256:- redhat-lsb fails to build on ARM
redhat-lsb-arm.patch | 45 +++++++++++++++++++++++++++++++++++++++++++++
redhat-lsb-trigger.patch | 38 +++++++++++++++++++++++++++++---------
redhat-lsb.spec | 9 +++++++--
3 files changed, 81 insertions(+), 11 deletions(-)
---
diff --git a/redhat-lsb-arm.patch b/redhat-lsb-arm.patch
new file mode 100644
index 0000000..42fcea8
--- /dev/null
+++ b/redhat-lsb-arm.patch
@@ -0,0 +1,45 @@
+--- redhat-lsb-3.2.orig/redhat_lsb_trigger.c 2008-04-16 13:50:14.000000000 -0400
++++ redhat-lsb-3.2/redhat_lsb_trigger.c 2009-02-03 04:39:06.000000000 -0500
+@@ -223,6 +223,42 @@ register void *__thread_self __asm ("g7"
+ # define ASMFMT_1 , "0" (gpr2)
+ # define ASMFMT_2 , "0" (gpr2), "d" (gpr3)
+ # define ASMFMT_3 , "0" (gpr2), "d" (gpr3), "d" (gpr4)
++#elif defined __arm__
++# if defined (__ARM_EABI__)
++#undef INTERNAL_SYSCALL_DECL
++#define INTERNAL_SYSCALL_DECL(err) do { } while (0)
++#undef INTERNAL_SYSCALL_RAW
++#define INTERNAL_SYSCALL_RAW(name, err, nr, args...) \
++ ({ \
++ register int _a1 asm ("r0"), _nr asm ("r7"); \
++ LOAD_ARGS_##nr (args) \
++ _nr = name; \
++ asm volatile ("swi 0x0 @ syscall " #name \
++ : "=r" (_a1) \
++ : "r" (_nr) ASM_ARGS_##nr \
++ : "memory"); \
++ _a1; })
++
++#undef INTERNAL_SYSCALL
++#define INTERNAL_SYSCALL(name, err, nr, args...) \
++ INTERNAL_SYSCALL_RAW(SYS_ify(name), err, nr, args)
++
++#define LOAD_ARGS_0()
++#define ASM_ARGS_0
++#define LOAD_ARGS_1(a1) \
++ int _a1tmp = (int) (a1); \
++ LOAD_ARGS_0 () \
++ _a1 = _a1tmp;
++#define ASM_ARGS_1 ASM_ARGS_0, "r" (_a1)
++#define LOAD_ARGS_2(a1, a2) \
++ int _a2tmp = (int) (a2); \
++ LOAD_ARGS_1 (a1) \
++ register int _a2 asm ("a2") = _a2tmp;
++#define ASM_ARGS_2 ASM_ARGS_1, "r" (_a2)
++#undef SYS_ify
++#define SWI_BASE (0x900000)
++#define SYS_ify(syscall_name) (__NR_##syscall_name)
++#endif
+ #elif defined __sparc__
+ # ifndef __arch64__
+ # define __INTERNAL_SYSCALL_STRING \
diff --git a/redhat-lsb-trigger.patch b/redhat-lsb-trigger.patch
index 9ed3786..c2bab3c 100644
--- a/redhat-lsb-trigger.patch
+++ b/redhat-lsb-trigger.patch
@@ -1,6 +1,6 @@
---- redhat_lsb_trigger.c.jj 2008-04-16 19:50:14.000000000 +0200
-+++ redhat_lsb_trigger.c 2009-10-26 19:51:12.886058784 +0100
-@@ -423,10 +423,76 @@ is_ia64 (void)
+--- redhat_lsb_trigger.c.triggerfix 2008-04-16 18:50:14.000000000 +0100
++++ redhat_lsb_trigger.c 2011-09-14 11:50:42.563080000 +0100
+@@ -423,10 +423,76 @@
#define is_ia64() 0
#endif
@@ -79,10 +79,18 @@
INTERNAL_SYSCALL_DECL (err);
char lsbsover[] = LSBSOVER;
char *LSBVER, *p = lsbsover;
-@@ -455,11 +521,18 @@ void __libc_csu_fini (void) { }
+@@ -450,15 +516,38 @@
+ int __libc_multiple_threads __attribute__((nocommon));
+ int __libc_enable_asynccancel (void) { return 0; }
+ void __libc_disable_asynccancel (int x) { }
++#ifndef __arm__
+ void __libc_csu_init (void) { }
+ void __libc_csu_fini (void) { }
++#endif
pid_t __fork (void) { return -1; }
char thr_buf[65536];
+-#ifndef __powerpc__
+void
+__attribute__ ((noreturn))
+__stack_chk_fail (void)
@@ -92,16 +100,28 @@
+ INTERNAL_SYSCALL (exit, err, 1, 1);
+}
+
- #ifndef __powerpc__
++#if defined __powerpc__
++
++struct startup_info
++{
++ void *sda_base;
++ int (*main) (int, char **, char **, void *);
++ int (*init) (int, char **, char **, void *);
++ void (*fini) (void);
++};
++
++int __libc_start_main (int argc, char **argv, char **ev,
++ void *auxvec, void (*rtld_fini) (void),
++ struct startup_info *stinfo,
++ char **stack_on_entry)
++#elif defined __arm__
-/* /usr/lib/gcc/ppc64-redhat-linux/4.1.2/../../../../lib64/libc.a(libc-start.o): In function `__libc_start_main':
- * * (.opd+0x10): multiple definition of `__libc_start_main' */
--int ___libc_start_main (int (*main) (int argc, char **argv),
-+int __libc_start_main (int (*main) (int argc, char **argv),
+ int ___libc_start_main (int (*main) (int argc, char **argv),
int argc, char **argv,
void (*init) (void), void (*fini) (void),
- void (*rtld_fini) (void), void * stack_end)
-@@ -472,9 +545,7 @@ struct startup_info
+@@ -472,9 +561,7 @@
void (*fini) (void);
};
diff --git a/redhat-lsb.spec b/redhat-lsb.spec
index 68c33cf..1bec5f2 100644
--- a/redhat-lsb.spec
+++ b/redhat-lsb.spec
@@ -49,13 +49,14 @@
Summary: LSB base libraries support for Red Hat Enterprise Linux
Name: redhat-lsb
Version: 4.0
-Release: 8%{?dist}
+Release: 9%{?dist}
URL: http://www.linuxfoundation.org/collaborate/workgroups/lsb
Source0: %{name}-%{version}-%{srcrelease}.tar.bz2
#Source1: http://prdownloads.sourceforge.net/lsb/lsb-release-%{upstreamlsbrelver}.tar.gz
Patch0: lsb-release-3.1-update-init-functions.patch
Patch1: redhat-lsb-lsb_start_daemon-fix.patch
Patch2: redhat-lsb-trigger.patch
+Patch3: redhat-lsb-arm.patch
License: GPLv2
Group: System Environment/Base
BuildRequires: glibc-static
@@ -86,7 +87,7 @@ Provides: lsb = %{version}
Provides: lsb-core-%{archname} = %{version}
Provides: lsb-core-noarch = %{version}
-ExclusiveArch: %{ix86} ia64 x86_64 ppc ppc64 s390 s390x
+ExclusiveArch: %{ix86} ia64 x86_64 ppc ppc64 s390 s390x %{arm}
%ifarch %{ix86}
# archLSB IA32 Base Libraries
@@ -619,6 +620,7 @@ The Linux Standard Base (LSB) Printing Specifications define components that are
%patch0 -p1
%patch1 -p1
%patch2 -p0 -b .triggerfix
+%patch3 -p1 -b .arm
%build
cd lsb-release-%{upstreamlsbrelver}
@@ -729,6 +731,9 @@ fi
%changelog
+* Wed Nov 30 2011 Parag <pnemade AT redhat DOT com> - 4.0-9
+- Resolves:rh#738256:- redhat-lsb fails to build on ARM
+
* Thu Oct 13 2011 Parag <pnemade AT redhat DOT com> - 4.0-8
- Resolves:rh#745100: Add requires: perl-Digest-MD5
More information about the scm-commits
mailing list