From 290d7c034e0fd5d689e20a13f192160b1ac0a031 Mon Sep 17 00:00:00 2001 From: Parag Nemade Date: Wed, 30 Nov 2011 15:52:57 +0530 Subject: [PATCH] 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(-) create mode 100644 redhat-lsb-arm.patch 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 - 4.0-9 +- Resolves:rh#738256:- redhat-lsb fails to build on ARM + * Thu Oct 13 2011 Parag - 4.0-8 - Resolves:rh#745100: Add requires: perl-Digest-MD5