All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/9] V2: Add machine qemuaarch64
@ 2014-09-16 15:06 Kai Kang
  2014-09-16 15:06 ` [PATCH 1/9] linux-yocto: depend on libgcc for aarch64 Kai Kang
                   ` (10 more replies)
  0 siblings, 11 replies; 23+ messages in thread
From: Kai Kang @ 2014-09-16 15:06 UTC (permalink / raw)
  To: ross.burton; +Cc: openembedded-core, jslater

V2:
* fix kernel linux-yocto build faiure
* redefine position of dynamic linker from /lib to /lib64
* other fixes of userspace packages

Test with Joe Slater's patches:
* siteinfo: account for 32 and 64 bit arm
* sysprof: add aarch64 support

The following changes since commit fceef0cace6670a8c5f15cd2f31a191176732730:

  bitbake: data_smart: Fix remove operator and its interaction with data expansion (2014-09-13 08:52:49 +0100)

are available in the git repository at:

  git://git.pokylinux.org/poky-contrib kangkai/qemuarm64
  http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=kangkai/qemuarm64

Kai Kang (9):
  linux-yocto: depend on libgcc for aarch64
  Add machine qemuarm64
  gcc-4.9: redefine dynamic linker for aarch64
  libatomics-ops: add aarch64 target iniitial support
  qt4-native: add aarch64 support
  qt4: add aarch64 support
  qt4-embedded: disable webkit
  libpng: add neon option for aarch64
  perf: disable libunwind support for aarch64

 meta/conf/bitbake.conf                             |   1 +
 meta/conf/machine/include/arm/arch-armv8.inc       |  20 +
 meta/conf/machine/qemuarm64.conf                   |  12 +
 meta/recipes-devtools/gcc/gcc-4.9.inc              |   1 +
 .../0056-redefine-dynamic-linker-for-aarch64.patch |  34 ++
 meta/recipes-kernel/linux/linux-yocto.inc          |   1 +
 meta/recipes-kernel/perf/perf-features.inc         |   1 +
 meta/recipes-multimedia/libpng/libpng_1.6.13.bb    |   1 +
 .../0001-libatomic_ops-Aarch64-basic-port.patch    | 239 ++++++++++
 .../pulseaudio/libatomics-ops_7.2.bb               |   1 +
 meta/recipes-qt/qt4/qt4-4.8.6.inc                  |   4 +
 .../0029-aarch64_arm64_fix_arch_detection.patch    |  53 +++
 .../0030-aarch64_arm64_qatomic_support.patch       | 491 +++++++++++++++++++++
 .../qt4/qt4-4.8.6/0031-aarch64_arm64_mkspecs.patch | 124 ++++++
 .../qt4/qt4-4.8.6/0032-aarch64_add_header.patch    |  18 +
 meta/recipes-qt/qt4/qt4-embedded_4.8.6.bb          |   1 +
 meta/recipes-qt/qt4/qt4-native.inc                 |   4 +
 meta/recipes-qt/qt4/qt4-x11-free_4.8.6.bb          |   3 +
 meta/recipes-qt/qt4/qt4_arch.inc                   |   1 +
 19 files changed, 1010 insertions(+)
 create mode 100644 meta/conf/machine/include/arm/arch-armv8.inc
 create mode 100644 meta/conf/machine/qemuarm64.conf
 create mode 100644 meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch
 create mode 100644 meta/recipes-multimedia/pulseaudio/files/0001-libatomic_ops-Aarch64-basic-port.patch
 create mode 100644 meta/recipes-qt/qt4/qt4-4.8.6/0029-aarch64_arm64_fix_arch_detection.patch
 create mode 100644 meta/recipes-qt/qt4/qt4-4.8.6/0030-aarch64_arm64_qatomic_support.patch
 create mode 100644 meta/recipes-qt/qt4/qt4-4.8.6/0031-aarch64_arm64_mkspecs.patch
 create mode 100644 meta/recipes-qt/qt4/qt4-4.8.6/0032-aarch64_add_header.patch

-- 
1.9.1



^ permalink raw reply	[flat|nested] 23+ messages in thread

* [PATCH 1/9] linux-yocto: depend on libgcc for aarch64
  2014-09-16 15:06 [PATCH 0/9] V2: Add machine qemuaarch64 Kai Kang
@ 2014-09-16 15:06 ` Kai Kang
  2014-09-18  6:56   ` Khem Raj
  2014-09-16 15:06 ` [PATCH 2/9] Add machine qemuarm64 Kai Kang
                   ` (9 subsequent siblings)
  10 siblings, 1 reply; 23+ messages in thread
From: Kai Kang @ 2014-09-16 15:06 UTC (permalink / raw)
  To: ross.burton; +Cc: openembedded-core, jslater

Make aarch aarch64 kernel depend on libgcc. In arch/arm64/Makefile, it
adds LIBGCC to libs-y:

LIBGCC          := $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name)
libs-y          += $(LIBGCC)

If build without libgcc, the value of LIBGCC is just libgcc.a without
parent directory. linux-yocto fails to build:

|   LD      vmlinux.o
| aarch64-poky-linux-ld.bfd: cannot find libgcc.a: No such file or directory

Add libgcc to aarch64 kernel dependency.

Signed-off-by: Kai Kang <kai.kang@windriver.com>
---
 meta/recipes-kernel/linux/linux-yocto.inc | 1 +
 1 file changed, 1 insertion(+)

diff --git a/meta/recipes-kernel/linux/linux-yocto.inc b/meta/recipes-kernel/linux/linux-yocto.inc
index 4ed3188..db693e6 100644
--- a/meta/recipes-kernel/linux/linux-yocto.inc
+++ b/meta/recipes-kernel/linux/linux-yocto.inc
@@ -7,6 +7,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7"
 INC_PR = "r4"
 
 DEPENDS += "xz-native bc-native"
+DEPENDS_aarch64 += "libgcc"
 
 # A KMACHINE is the mapping of a yocto $MACHINE to what is built
 # by the kernel. This is typically the branch that should be built,
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 2/9] Add machine qemuarm64
  2014-09-16 15:06 [PATCH 0/9] V2: Add machine qemuaarch64 Kai Kang
  2014-09-16 15:06 ` [PATCH 1/9] linux-yocto: depend on libgcc for aarch64 Kai Kang
@ 2014-09-16 15:06 ` Kai Kang
  2014-09-16 15:06 ` [PATCH 3/9] gcc-4.9: redefine dynamic linker for aarch64 Kai Kang
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 23+ messages in thread
From: Kai Kang @ 2014-09-16 15:06 UTC (permalink / raw)
  To: ross.burton; +Cc: openembedded-core, jslater

Add machine qemuarm64. The configure files are derived from linaro.

Update:
* rename genericarmv8 to qemuarm64 for coordination in oe-core
* include qemu.inc then remove common part of config
* disable using autoserial
* move arch-armv8.inc from machine/include/arm64 to machine/include/arm

And set BASELIB to lib64 in bitbake.conf. libgcc uses
'aarch64-poky-linux-gcc -print-multi-os-directory' to get install
directory that the value is 'lib64' then cause [installed-vs-shipped]
error. The value is set in gcc source file gcc/config/aarch64/t-aarch64-linux.

[YOCTO #6487]

Signed-off-by: Kai Kang <kai.kang@windriver.com>
---
 meta/conf/bitbake.conf                       |  1 +
 meta/conf/machine/include/arm/arch-armv8.inc | 20 ++++++++++++++++++++
 meta/conf/machine/qemuarm64.conf             | 12 ++++++++++++
 3 files changed, 33 insertions(+)
 create mode 100644 meta/conf/machine/include/arm/arch-armv8.inc
 create mode 100644 meta/conf/machine/qemuarm64.conf

diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf
index 468b175..0ae884c 100644
--- a/meta/conf/bitbake.conf
+++ b/meta/conf/bitbake.conf
@@ -10,6 +10,7 @@
 baselib = "${BASELIB}"
 baselib[vardepvalue] = "${baselib}"
 BASELIB = "lib"
+BASELIB_aarch64 = "lib64"
 BASELIB_powerpc64 = "lib64"
 
 # Path prefixes
diff --git a/meta/conf/machine/include/arm/arch-armv8.inc b/meta/conf/machine/include/arm/arch-armv8.inc
new file mode 100644
index 0000000..c86142a
--- /dev/null
+++ b/meta/conf/machine/include/arm/arch-armv8.inc
@@ -0,0 +1,20 @@
+DEFAULTTUNE ?= "aarch64"
+
+ARMPKGARCH ?= "aarch64"
+
+TUNEVALID[aarch64] = "Enable instructions for aarch64"
+TUNEVALID[bigendian] = "Enable big-endian mode."
+TUNECONFLICTS[aarch64] = ""
+MACHINEOVERRIDES .= "${@bb.utils.contains("TUNE_FEATURES", "aarch64", ":aarch64", "" ,d)}"
+
+# Little Endian base configs
+AVAILTUNES += "aarch64 aarch64_be"
+TUNE_FEATURES_tune-aarch64 ?= "aarch64"
+TUNE_FEATURES_tune-aarch64_be ?= "${TUNE_FEATURES_tune-aarch64} bigendian"
+
+ARMPKGSFX_ENDIAN = "${@bb.utils.contains("TUNE_FEATURES", "bigendian", "_be", "", d)}"
+
+TUNE_ARCH = "aarch64${ARMPKGSFX_ENDIAN}"
+TUNE_PKGARCH = "aarch64${ARMPKGSFX_ENDIAN}"
+
+PACKAGE_EXTRA_ARCHS = "aarch64${ARMPKGSFX_ENDIAN}"
diff --git a/meta/conf/machine/qemuarm64.conf b/meta/conf/machine/qemuarm64.conf
new file mode 100644
index 0000000..20bcfba
--- /dev/null
+++ b/meta/conf/machine/qemuarm64.conf
@@ -0,0 +1,12 @@
+#@TYPE: Machine
+#@NAME: generic armv8 machine
+#@DESCRIPTION: Machine configuration for running a generic armv8
+
+require conf/machine/include/arm/arch-armv8.inc
+require conf/machine/include/qemu.inc
+
+MACHINE_FEATURES = ""
+
+KERNEL_IMAGETYPE = "Image"
+
+SERIAL_CONSOLE = "38400 ttyAMA0"
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 3/9] gcc-4.9: redefine dynamic linker for aarch64
  2014-09-16 15:06 [PATCH 0/9] V2: Add machine qemuaarch64 Kai Kang
  2014-09-16 15:06 ` [PATCH 1/9] linux-yocto: depend on libgcc for aarch64 Kai Kang
  2014-09-16 15:06 ` [PATCH 2/9] Add machine qemuarm64 Kai Kang
@ 2014-09-16 15:06 ` Kai Kang
  2014-09-18  7:19   ` Khem Raj
  2014-09-16 15:06 ` [PATCH 4/9] libatomics-ops: add aarch64 target iniitial support Kai Kang
                   ` (7 subsequent siblings)
  10 siblings, 1 reply; 23+ messages in thread
From: Kai Kang @ 2014-09-16 15:06 UTC (permalink / raw)
  To: ross.burton; +Cc: openembedded-core, jslater

Redefine dynamic linker for aarch64 from /lib to /lib64.

BASELIB of aarch64 has to be defined with 'lib64', then linker file
ld-linux-aarch64.so.1 is installed into /lib64 rather than /lib. So
update it here too.

Signed-off-by: Kai Kang <kai.kang@windriver.com>
---
 meta/recipes-devtools/gcc/gcc-4.9.inc              |  1 +
 .../0056-redefine-dynamic-linker-for-aarch64.patch | 34 ++++++++++++++++++++++
 2 files changed, 35 insertions(+)
 create mode 100644 meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch

diff --git a/meta/recipes-devtools/gcc/gcc-4.9.inc b/meta/recipes-devtools/gcc/gcc-4.9.inc
index 25778bd..c434a45 100644
--- a/meta/recipes-devtools/gcc/gcc-4.9.inc
+++ b/meta/recipes-devtools/gcc/gcc-4.9.inc
@@ -70,6 +70,7 @@ SRC_URI = "\
     file://0053-gcc-fix-segfault-from-calling-free-on-non-malloc-d-a.patch \
     file://0054-gcc-Makefile.in-fix-parallel-building-failure.patch \
     file://0055-PR-rtl-optimization-61801.patch \
+    file://0056-redefine-dynamic-linker-for-aarch64.patch \
 "
 SRC_URI[md5sum] = "fddf71348546af523353bd43d34919c1"
 SRC_URI[sha256sum] = "d334781a124ada6f38e63b545e2a3b8c2183049515a1abab6d513f109f1d717e"
diff --git a/meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch b/meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch
new file mode 100644
index 0000000..6933e2f
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch
@@ -0,0 +1,34 @@
+From 8fbb60d89e569b68b13e4fd419e20640eb49cabc Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Tue, 16 Sep 2014 16:01:31 +0800
+Subject: [PATCH] Redefine dynamic linker for aarch64
+
+Redefine dynamic linker for aarch64 from /lib to /lib64.
+
+BASELIB of aarch64 has to be defined with 'lib64', then linker file
+ld-linux-aarch64.so.1 is installed into /lib64 rather than /lib. So
+update it here too.
+
+Upstream-Status: Pending
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ gcc/config/aarch64/aarch64-linux.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/gcc/config/aarch64/aarch64-linux.h b/gcc/config/aarch64/aarch64-linux.h
+index a8f0771..2a6f06d 100644
+--- a/gcc/config/aarch64/aarch64-linux.h
++++ b/gcc/config/aarch64/aarch64-linux.h
+@@ -21,7 +21,7 @@
+ #ifndef GCC_AARCH64_LINUX_H
+ #define GCC_AARCH64_LINUX_H
+ 
+-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-aarch64%{mbig-endian:_be}.so.1"
++#define GLIBC_DYNAMIC_LINKER "/lib64/ld-linux-aarch64%{mbig-endian:_be}.so.1"
+ 
+ #define CPP_SPEC "%{pthread:-D_REENTRANT}"
+ 
+-- 
+1.9.1
+
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 4/9] libatomics-ops: add aarch64 target iniitial support
  2014-09-16 15:06 [PATCH 0/9] V2: Add machine qemuaarch64 Kai Kang
                   ` (2 preceding siblings ...)
  2014-09-16 15:06 ` [PATCH 3/9] gcc-4.9: redefine dynamic linker for aarch64 Kai Kang
@ 2014-09-16 15:06 ` Kai Kang
  2014-09-16 15:06 ` [PATCH 5/9] qt4-native: add aarch64 support Kai Kang
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 23+ messages in thread
From: Kai Kang @ 2014-09-16 15:06 UTC (permalink / raw)
  To: ross.burton; +Cc: openembedded-core, jslater

Add patch for libatomics-ops to add aarch64 target iniitial
support. It is from linaro repo.

Signed-off-by: Kai Kang <kai.kang@windriver.com>
---
 .../0001-libatomic_ops-Aarch64-basic-port.patch    | 239 +++++++++++++++++++++
 .../pulseaudio/libatomics-ops_7.2.bb               |   1 +
 2 files changed, 240 insertions(+)
 create mode 100644 meta/recipes-multimedia/pulseaudio/files/0001-libatomic_ops-Aarch64-basic-port.patch

diff --git a/meta/recipes-multimedia/pulseaudio/files/0001-libatomic_ops-Aarch64-basic-port.patch b/meta/recipes-multimedia/pulseaudio/files/0001-libatomic_ops-Aarch64-basic-port.patch
new file mode 100644
index 0000000..a563b8b
--- /dev/null
+++ b/meta/recipes-multimedia/pulseaudio/files/0001-libatomic_ops-Aarch64-basic-port.patch
@@ -0,0 +1,239 @@
+From aac120d778ae5fc619b2fb8ef18ea18d3d5d20cc Mon Sep 17 00:00:00 2001
+From: Yvan Roux <yvan.roux@linaro.org>
+Date: Wed, 23 Jan 2013 17:14:16 +0100
+Subject: [PATCH] Aarch64 basic port
+
+Adapted-for-OpenEmbedded-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
+
+
+Upstream-Status: Backport
+
+It is original from
+https://github.com/ivmai/libatomic_ops/commit/cbbf86330fcb600cfe0f895cb970d922456005d6
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ src/atomic_ops.h                     |    4 
+ src/atomic_ops/sysdeps/Makefile.am   |    1 
+ src/atomic_ops/sysdeps/gcc/aarch64.h |  184 +++++++++++++++++++++++++++++++++++
+ 3 files changed, 189 insertions(+)
+ create mode 100644 src/atomic_ops/sysdeps/gcc/aarch64.h
+
+--- libatomic_ops-7.2.orig/src/atomic_ops.h
++++ libatomic_ops-7.2/src/atomic_ops.h
+@@ -242,10 +242,14 @@
+ # endif /* __m68k__ */
+ # if defined(__powerpc__) || defined(__ppc__) || defined(__PPC__) \
+      || defined(__powerpc64__) || defined(__ppc64__)
+ #   include "atomic_ops/sysdeps/gcc/powerpc.h"
+ # endif /* __powerpc__ */
++# if defined(__aarch64__)
++#   include "atomic_ops/sysdeps/gcc/aarch64.h"
++#   define AO_CAN_EMUL_CAS
++# endif /* __aarch64__ */
+ # if defined(__arm__) && !defined(AO_USE_PTHREAD_DEFS)
+ #   include "atomic_ops/sysdeps/gcc/arm.h"
+ #   define AO_CAN_EMUL_CAS
+ # endif /* __arm__ */
+ # if defined(__cris__) || defined(CRIS)
+--- libatomic_ops-7.2.orig/src/atomic_ops/sysdeps/Makefile.am
++++ libatomic_ops-7.2/src/atomic_ops/sysdeps/Makefile.am
+@@ -24,10 +24,11 @@ nobase_sysdep_HEADERS= generic_pthread.h
+ 	  standard_ao_double_t.h \
+ 	  README \
+ 	\
+ 	  armcc/arm_v6.h \
+ 	\
++	  gcc/aarch64.h \
+ 	  gcc/alpha.h gcc/arm.h gcc/avr32.h gcc/cris.h \
+ 	  gcc/hexagon.h gcc/hppa.h gcc/ia64.h gcc/m68k.h \
+ 	  gcc/mips.h gcc/powerpc.h gcc/s390.h \
+ 	  gcc/sh.h gcc/sparc.h gcc/x86.h gcc/x86_64.h \
+ 	\
+--- /dev/null
++++ libatomic_ops-7.2/src/atomic_ops/sysdeps/gcc/aarch64.h
+@@ -0,0 +1,184 @@
++/*
++ * Copyright (c) 1991-1994 by Xerox Corporation.  All rights reserved.
++ * Copyright (c) 1996-1999 by Silicon Graphics.  All rights reserved.
++ * Copyright (c) 1999-2003 by Hewlett-Packard Company. All rights reserved.
++ *
++ *
++ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
++ * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
++ *
++ * Permission is hereby granted to use or copy this program
++ * for any purpose,  provided the above notices are retained on all copies.
++ * Permission to modify the code and to distribute modified code is granted,
++ * provided the above notices are retained, and a notice that the code was
++ * modified is included with the above copyright notice.
++ *
++ */
++
++#include "../read_ordered.h"
++
++#include "../test_and_set_t_is_ao_t.h"
++
++AO_INLINE void
++AO_nop_full(void)
++{
++# ifndef AO_UNIPROCESSOR
++__sync_synchronize ();
++# endif
++}
++#define AO_HAVE_nop_full
++
++AO_INLINE AO_t
++AO_load(const volatile AO_t *addr)
++{
++  return  __atomic_load_n (addr, __ATOMIC_RELAXED);
++}
++#define AO_HAVE_load
++
++AO_INLINE AO_t
++AO_load_acquire(const volatile AO_t *addr)
++{
++  return __atomic_load_n (addr, __ATOMIC_ACQUIRE);
++}
++#define AO_HAVE_load_acquire
++
++AO_INLINE void
++ AO_store(volatile AO_t *addr, AO_t value)
++{
++  __atomic_store_n(addr, value, __ATOMIC_RELAXED);
++}
++#define AO_HAVE_store
++
++AO_INLINE void
++ AO_store_release(volatile AO_t *addr, AO_t value)
++{
++  __atomic_store_n(addr, value, __ATOMIC_RELEASE);
++}
++#define AO_HAVE_store_release
++
++AO_INLINE AO_TS_VAL_t
++AO_test_and_set(volatile AO_TS_t *addr)
++{
++    return __atomic_test_and_set(addr, __ATOMIC_RELAXED);
++}
++# define AO_HAVE_test_and_set
++
++AO_INLINE AO_TS_VAL_t
++AO_test_and_set_acquire(volatile AO_TS_t *addr)
++{
++    return __atomic_test_and_set(addr, __ATOMIC_ACQUIRE);
++}
++# define AO_HAVE_test_and_set_acquire
++
++AO_INLINE AO_TS_VAL_t
++AO_test_and_set_release(volatile AO_TS_t *addr)
++{
++    return __atomic_test_and_set(addr, __ATOMIC_RELEASE);
++}
++# define AO_HAVE_test_and_set_release
++
++AO_INLINE AO_TS_VAL_t
++AO_test_and_set_full(volatile AO_TS_t *addr)
++{
++    return __atomic_test_and_set(addr, __ATOMIC_SEQ_CST);
++}
++# define AO_HAVE_test_and_set_full
++
++AO_INLINE AO_t
++AO_fetch_and_add(volatile AO_t *p, AO_t incr)
++{
++  return __atomic_fetch_add(p, incr, __ATOMIC_RELAXED);
++}
++#define AO_HAVE_fetch_and_add
++
++AO_INLINE AO_t
++AO_fetch_and_add_acquire(volatile AO_t *p, AO_t incr)
++{
++  return __atomic_fetch_add(p, incr, __ATOMIC_ACQUIRE);
++}
++#define AO_HAVE_fetch_and_add_acquire
++
++AO_INLINE AO_t
++AO_fetch_and_add_release(volatile AO_t *p, AO_t incr)
++{
++  return __atomic_fetch_add(p, incr, __ATOMIC_RELEASE);
++}
++#define AO_HAVE_fetch_and_add_release
++
++AO_INLINE AO_t
++AO_fetch_and_add_full(volatile AO_t *p, AO_t incr)
++{
++  return __atomic_fetch_add(p, incr, __ATOMIC_SEQ_CST);
++}
++#define AO_HAVE_fetch_and_add_full
++
++AO_INLINE AO_t
++AO_fetch_and_add1(volatile AO_t *p)
++{
++  return __atomic_fetch_add(p, 1, __ATOMIC_RELAXED);
++}
++#define AO_HAVE_fetch_and_add1
++
++AO_INLINE AO_t
++AO_fetch_and_add1_acquire(volatile AO_t *p)
++{
++  return __atomic_fetch_add(p, 1, __ATOMIC_ACQUIRE);
++}
++#define AO_HAVE_fetch_and_add1_acquire
++
++AO_INLINE AO_t
++AO_fetch_and_add1_release(volatile AO_t *p)
++{
++  return __atomic_fetch_add(p, 1, __ATOMIC_RELEASE);
++}
++#define AO_HAVE_fetch_and_add1_release
++
++AO_INLINE AO_t
++AO_fetch_and_add1_full(volatile AO_t *p)
++{
++  return __atomic_fetch_add(p, 1, __ATOMIC_SEQ_CST);
++}
++#define AO_HAVE_fetch_and_add1_full
++
++AO_INLINE AO_t
++AO_fetch_and_sub1(volatile AO_t *p)
++{
++  return __atomic_fetch_sub(p, 1, __ATOMIC_RELAXED);
++}
++#define AO_HAVE_fetch_and_sub1
++
++AO_INLINE AO_t
++AO_fetch_and_sub1_acquire(volatile AO_t *p)
++{
++  return __atomic_fetch_sub(p, 1, __ATOMIC_ACQUIRE);
++}
++#define AO_HAVE_fetch_and_sub1_acquire
++
++AO_INLINE AO_t
++AO_fetch_and_sub1_release(volatile AO_t *p)
++{
++  return __atomic_fetch_sub(p, 1, __ATOMIC_RELEASE);
++}
++#define AO_HAVE_fetch_and_sub1_release
++
++AO_INLINE AO_t
++AO_fetch_and_sub1_full(volatile AO_t *p)
++{
++  return __atomic_fetch_sub(p, 1, __ATOMIC_SEQ_CST);
++}
++#define AO_HAVE_fetch_and_sub1_full
++
++/* Returns nonzero if the comparison succeeded.  */
++AO_INLINE int
++AO_compare_and_swap(volatile AO_t *addr, AO_t old_val, AO_t new_val)
++{
++    return __sync_bool_compare_and_swap(addr, old_val, new_val);
++}
++# define AO_HAVE_compare_and_swap
++
++AO_INLINE AO_t
++AO_fetch_compare_and_swap(volatile AO_t *addr, AO_t old_val, AO_t new_val)
++{
++    return __sync_val_compare_and_swap(addr, old_val, new_val);
++}
++# define AO_HAVE_fetch_compare_and_swap
diff --git a/meta/recipes-multimedia/pulseaudio/libatomics-ops_7.2.bb b/meta/recipes-multimedia/pulseaudio/libatomics-ops_7.2.bb
index 4632d24..5a58228 100644
--- a/meta/recipes-multimedia/pulseaudio/libatomics-ops_7.2.bb
+++ b/meta/recipes-multimedia/pulseaudio/libatomics-ops_7.2.bb
@@ -9,6 +9,7 @@ LIC_FILES_CHKSUM = "file://doc/COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
 PR = "r1"
 
 SRC_URI = "http://www.hpl.hp.com/research/linux/atomic_ops/download/libatomic_ops-${PV}.tar.gz \
+           file://0001-libatomic_ops-Aarch64-basic-port.patch \
           "
 
 SRC_URI[md5sum] = "890acdc83a7cd10e2e9536062d3741c8"
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 5/9] qt4-native: add aarch64 support
  2014-09-16 15:06 [PATCH 0/9] V2: Add machine qemuaarch64 Kai Kang
                   ` (3 preceding siblings ...)
  2014-09-16 15:06 ` [PATCH 4/9] libatomics-ops: add aarch64 target iniitial support Kai Kang
@ 2014-09-16 15:06 ` Kai Kang
  2014-09-16 15:06 ` [PATCH 6/9] qt4: " Kai Kang
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 23+ messages in thread
From: Kai Kang @ 2014-09-16 15:06 UTC (permalink / raw)
  To: ross.burton; +Cc: openembedded-core, jslater

Add qt4 aarch64 support.

Most of the patches are derived from debian:
http://anonscm.debian.org/cgit/pkg-kde/qt/qt4-x11.git/tree/debian/patches

Signed-off-by: Kai Kang <kai.kang@windriver.com>
---
 .../0029-aarch64_arm64_fix_arch_detection.patch    |  53 +++
 .../0030-aarch64_arm64_qatomic_support.patch       | 491 +++++++++++++++++++++
 .../qt4/qt4-4.8.6/0031-aarch64_arm64_mkspecs.patch | 124 ++++++
 .../qt4/qt4-4.8.6/0032-aarch64_add_header.patch    |  18 +
 meta/recipes-qt/qt4/qt4-native.inc                 |   4 +
 5 files changed, 690 insertions(+)
 create mode 100644 meta/recipes-qt/qt4/qt4-4.8.6/0029-aarch64_arm64_fix_arch_detection.patch
 create mode 100644 meta/recipes-qt/qt4/qt4-4.8.6/0030-aarch64_arm64_qatomic_support.patch
 create mode 100644 meta/recipes-qt/qt4/qt4-4.8.6/0031-aarch64_arm64_mkspecs.patch
 create mode 100644 meta/recipes-qt/qt4/qt4-4.8.6/0032-aarch64_add_header.patch

diff --git a/meta/recipes-qt/qt4/qt4-4.8.6/0029-aarch64_arm64_fix_arch_detection.patch b/meta/recipes-qt/qt4/qt4-4.8.6/0029-aarch64_arm64_fix_arch_detection.patch
new file mode 100644
index 0000000..fbd32b1
--- /dev/null
+++ b/meta/recipes-qt/qt4/qt4-4.8.6/0029-aarch64_arm64_fix_arch_detection.patch
@@ -0,0 +1,53 @@
+From 800abbba658203fc8e746e3fc780a297cd4110cf Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Lisandro=20Dami=C3=A1n=20Nicanor=20P=C3=A9rez=20Meyer?=
+ <perezmeyer@gmail.com>
+Date: Wed, 20 Aug 2014 17:52:49 -0300
+Subject: [PATCH] Fix AArch64/arm64 detection.
+
+The detection needs to go before arm, else the system will detect AArch64/arm64
+as arm.
+
+This patch comes from Wookey, he has agreed to put it under BSD or Expat
+to allow it's inclusion in here:
+<https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=735488#255>
+
+Change-Id: Ic2171c03fca8bb871347940fa3a2bc467776f797
+
+
+Upstream-Status: Pending
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ configure | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/configure b/configure
+index a9ba7c8..eb88b72 100755
+--- a/configure
++++ b/configure
+@@ -3241,17 +3241,17 @@ if [ -z "${CFG_HOST_ARCH}" ]; then
+     	fi
+     	CFG_HOST_ARCH=s390
+     	;;
+-    *:*:arm*)
++    *:*:aarch64*|*:*:arm64*)
+         if [ "$OPT_VERBOSE" = "yes" ]; then
+-            echo "    ARM (arm)"
++            echo "    AArch64 (aarch64)"
+         fi
+-        CFG_HOST_ARCH=arm
++        CFG_HOST_ARCH=aarch64
+         ;;
+-    *:*:aarch64*)
++    *:*:arm*)
+         if [ "$OPT_VERBOSE" = "yes" ]; then
+-            echo "    AArch64 (aarch64)"
++            echo "    ARM (arm)"
+         fi
+-        CFG_HOST_ARCH=aarch64
++        CFG_HOST_ARCH=arm
+         ;;
+     Linux:*:sparc*)
+         if [ "$OPT_VERBOSE" = "yes" ]; then
+-- 
+2.1.0
diff --git a/meta/recipes-qt/qt4/qt4-4.8.6/0030-aarch64_arm64_qatomic_support.patch b/meta/recipes-qt/qt4/qt4-4.8.6/0030-aarch64_arm64_qatomic_support.patch
new file mode 100644
index 0000000..ba4c2a6
--- /dev/null
+++ b/meta/recipes-qt/qt4/qt4-4.8.6/0030-aarch64_arm64_qatomic_support.patch
@@ -0,0 +1,491 @@
+From 294010b562c9846bb2bc4ee9c63ff78adc7c1f4f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Lisandro=20Dami=C3=A1n=20Nicanor=20P=C3=A9rez=20Meyer?=
+ <perezmeyer@gmail.com>
+Date: Sat, 15 Mar 2014 15:40:49 -0300
+Subject: [PATCH] Add qatomic support for AArch64 (aka arm64).
+
+Patch by Mark Salter <msalter@redhat.com>
+licensed under BSD:
+
+<https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=735488#195>
+
+This patch is known to not be the most correct way
+to implement them, as it seems to be possible to do it in a faster way,
+but should work non the less until we can provide something better.
+
+Change-Id: Ib392b27dc54691fd4c2ea9896240ad71fb8128cc
+
+
+Upstream-Status: Pending
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+
+---
+ src/corelib/arch/aarch64/arch.pri            |   4 +
+ src/corelib/arch/aarch64/qatomic_aarch64.cpp |  70 ++++++
+ src/corelib/arch/arch.pri                    |   4 +-
+ src/corelib/arch/qatomic_aarch64.h           | 335 +++++++++++++++++++++++++++
+ src/corelib/arch/qatomic_arch.h              |   2 +
+ 5 files changed, 414 insertions(+), 1 deletion(-)
+ create mode 100644 src/corelib/arch/aarch64/arch.pri
+ create mode 100644 src/corelib/arch/aarch64/qatomic_aarch64.cpp
+ create mode 100644 src/corelib/arch/qatomic_aarch64.h
+
+diff --git a/src/corelib/arch/aarch64/arch.pri b/src/corelib/arch/aarch64/arch.pri
+new file mode 100644
+index 0000000..63523d9
+--- /dev/null
++++ b/src/corelib/arch/aarch64/arch.pri
+@@ -0,0 +1,4 @@
++#
++# AArch64 architecture
++#
++SOURCES += $$QT_ARCH_CPP/qatomic_aarch64.cpp
+diff --git a/src/corelib/arch/aarch64/qatomic_aarch64.cpp b/src/corelib/arch/aarch64/qatomic_aarch64.cpp
+new file mode 100644
+index 0000000..fc851b9
+--- /dev/null
++++ b/src/corelib/arch/aarch64/qatomic_aarch64.cpp
+@@ -0,0 +1,70 @@
++/****************************************************************************
++**
++** Copyright (C) 2012, 2013 Digia Plc and/or its subsidiary(-ies).
++** Contact: http://www.qt-project.org/legal
++**
++** This file is part of the QtCore module of the Qt Toolkit.
++**
++** $QT_BEGIN_LICENSE:LGPL$
++** Commercial License Usage
++** Licensees holding valid commercial Qt licenses may use this file in
++** accordance with the commercial license agreement provided with the
++** Software or, alternatively, in accordance with the terms contained in
++** a written agreement between you and Digia.  For licensing terms and
++** conditions see http://qt.digia.com/licensing.  For further information
++** use the contact form at http://qt.digia.com/contact-us.
++**
++** GNU Lesser General Public License Usage
++** Alternatively, this file may be used under the terms of the GNU Lesser
++** General Public License version 2.1 as published by the Free Software
++** Foundation and appearing in the file LICENSE.LGPL included in the
++** packaging of this file.  Please review the following information to
++** ensure the GNU Lesser General Public License version 2.1 requirements
++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
++**
++** In addition, as a special exception, Digia gives you certain additional
++** rights.  These rights are described in the Digia Qt LGPL Exception
++** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
++**
++** GNU General Public License Usage
++** Alternatively, this file may be used under the terms of the GNU
++** General Public License version 3.0 as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL included in the
++** packaging of this file.  Please review the following information to
++** ensure the GNU General Public License version 3.0 requirements will be
++** met: http://www.gnu.org/copyleft/gpl.html.
++**
++**
++** $QT_END_LICENSE$
++**
++****************************************************************************/
++
++#include <QtCore/qglobal.h>
++
++#include <unistd.h>
++#ifdef _POSIX_PRIORITY_SCHEDULING
++# include <sched.h>
++#endif
++#include <time.h>
++
++QT_BEGIN_NAMESPACE
++
++QT_USE_NAMESPACE
++
++Q_CORE_EXPORT void qt_atomic_yield(int *count)
++{
++#ifdef _POSIX_PRIORITY_SCHEDULING
++    if ((*count)++ < 50) {
++        sched_yield();
++    } else
++#endif
++    {
++        struct timespec tm;
++        tm.tv_sec = 0;
++        tm.tv_nsec = 2000001;
++        nanosleep(&tm, NULL);
++        *count = 0;
++    }
++}
++
++QT_END_NAMESPACE
+diff --git a/src/corelib/arch/arch.pri b/src/corelib/arch/arch.pri
+index cd23e5e..f50fca7 100644
+--- a/src/corelib/arch/arch.pri
++++ b/src/corelib/arch/arch.pri
+@@ -31,7 +31,9 @@ integrity:HEADERS += arch/qatomic_integrity.h
+                        arch/qatomic_s390.h \
+                        arch/qatomic_x86_64.h \
+                        arch/qatomic_sh.h \
+-                       arch/qatomic_sh4a.h
++                       arch/qatomic_sh4a.h \
++                       arch/qatomic_aarch64.h \
++
+ 
+ QT_ARCH_CPP = $$QT_SOURCE_TREE/src/corelib/arch/$$QT_ARCH
+ DEPENDPATH += $$QT_ARCH_CPP
+diff --git a/src/corelib/arch/qatomic_aarch64.h b/src/corelib/arch/qatomic_aarch64.h
+new file mode 100644
+index 0000000..de61ca8
+--- /dev/null
++++ b/src/corelib/arch/qatomic_aarch64.h
+@@ -0,0 +1,335 @@
++/****************************************************************************
++**
++** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
++** Contact: http://www.qt-project.org/legal
++**
++** This file is part of the QtCore module of the Qt Toolkit.
++**
++** $QT_BEGIN_LICENSE:LGPL$
++** Commercial License Usage
++** Licensees holding valid commercial Qt licenses may use this file in
++** accordance with the commercial license agreement provided with the
++** Software or, alternatively, in accordance with the terms contained in
++** a written agreement between you and Digia.  For licensing terms and
++** conditions see http://qt.digia.com/licensing.  For further information
++** use the contact form at http://qt.digia.com/contact-us.
++**
++** GNU Lesser General Public License Usage
++** Alternatively, this file may be used under the terms of the GNU Lesser
++** General Public License version 2.1 as published by the Free Software
++** Foundation and appearing in the file LICENSE.LGPL included in the
++** packaging of this file.  Please review the following information to
++** ensure the GNU Lesser General Public License version 2.1 requirements
++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
++**
++** In addition, as a special exception, Digia gives you certain additional
++** rights.  These rights are described in the Digia Qt LGPL Exception
++** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
++**
++** GNU General Public License Usage
++** Alternatively, this file may be used under the terms of the GNU
++** General Public License version 3.0 as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL included in the
++** packaging of this file.  Please review the following information to
++** ensure the GNU General Public License version 3.0 requirements will be
++** met: http://www.gnu.org/copyleft/gpl.html.
++**
++**
++** $QT_END_LICENSE$
++**
++****************************************************************************/
++
++#ifndef QATOMIC_AARCH64_H
++#define QATOMIC_AARCH64_H
++
++QT_BEGIN_HEADER
++
++QT_BEGIN_NAMESPACE
++
++#define Q_ATOMIC_INT_REFERENCE_COUNTING_IS_ALWAYS_NATIVE
++
++inline bool QBasicAtomicInt::isReferenceCountingNative()
++{ return true; }
++inline bool QBasicAtomicInt::isReferenceCountingWaitFree()
++{ return false; }
++
++#define Q_ATOMIC_INT_TEST_AND_SET_IS_ALWAYS_NATIVE
++
++inline bool QBasicAtomicInt::isTestAndSetNative()
++{ return true; }
++inline bool QBasicAtomicInt::isTestAndSetWaitFree()
++{ return false; }
++
++#define Q_ATOMIC_INT_FETCH_AND_STORE_IS_ALWAYS_NATIVE
++
++inline bool QBasicAtomicInt::isFetchAndStoreNative()
++{ return true; }
++inline bool QBasicAtomicInt::isFetchAndStoreWaitFree()
++{ return false; }
++
++#define Q_ATOMIC_INT_FETCH_AND_ADD_IS_ALWAYS_NATIVE
++
++inline bool QBasicAtomicInt::isFetchAndAddNative()
++{ return true; }
++inline bool QBasicAtomicInt::isFetchAndAddWaitFree()
++{ return false; }
++
++#define Q_ATOMIC_POINTER_TEST_AND_SET_IS_ALWAYS_NATIVE
++
++template <typename T>
++Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isTestAndSetNative()
++{ return true; }
++template <typename T>
++Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isTestAndSetWaitFree()
++{ return false; }
++
++#define Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_ALWAYS_NATIVE
++
++template <typename T>
++Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isFetchAndStoreNative()
++{ return true; }
++template <typename T>
++Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isFetchAndStoreWaitFree()
++{ return false; }
++
++#define Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_ALWAYS_NATIVE
++
++template <typename T>
++Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isFetchAndAddNative()
++{ return true; }
++template <typename T>
++Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isFetchAndAddWaitFree()
++{ return false; }
++
++#ifndef Q_DATA_MEMORY_BARRIER
++# define Q_DATA_MEMORY_BARRIER asm volatile("dmb sy\n":::"memory")
++#endif
++#ifndef Q_COMPILER_MEMORY_BARRIER
++# define Q_COMPILER_MEMORY_BARRIER asm volatile("":::"memory")
++#endif
++
++inline bool QBasicAtomicInt::ref()
++{
++    int newValue;
++
++    Q_COMPILER_MEMORY_BARRIER;
++    newValue = __atomic_add_fetch(&_q_value, 1, __ATOMIC_ACQ_REL);
++    Q_COMPILER_MEMORY_BARRIER;
++
++    return newValue != 0;
++}
++
++inline bool QBasicAtomicInt::deref()
++{
++    int newValue;
++
++    Q_COMPILER_MEMORY_BARRIER;
++    newValue = __atomic_sub_fetch(&_q_value, 1, __ATOMIC_ACQ_REL);
++    Q_COMPILER_MEMORY_BARRIER;
++
++    return newValue != 0;
++}
++
++inline bool QBasicAtomicInt::testAndSetRelaxed(int expectedValue, int newValue)
++{
++    bool val;
++
++    Q_COMPILER_MEMORY_BARRIER;
++    val =  __atomic_compare_exchange_n (&_q_value, &expectedValue, newValue,
++                                        false, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
++    Q_COMPILER_MEMORY_BARRIER;
++    return val;
++}
++
++inline int QBasicAtomicInt::fetchAndStoreRelaxed(int newValue)
++{
++    int val;
++    Q_COMPILER_MEMORY_BARRIER;
++    val = __atomic_exchange_n(&_q_value, newValue, __ATOMIC_RELAXED);
++    Q_COMPILER_MEMORY_BARRIER;
++    return val;
++}
++
++inline int QBasicAtomicInt::fetchAndAddRelaxed(int valueToAdd)
++{
++    int val;
++    Q_COMPILER_MEMORY_BARRIER;
++    val = __atomic_fetch_add(&_q_value, valueToAdd, __ATOMIC_RELAXED);
++    Q_COMPILER_MEMORY_BARRIER;
++    return val;
++}
++
++template <typename T>
++Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetRelaxed(T *expectedValue, T *newValue)
++{
++    bool val;
++    Q_COMPILER_MEMORY_BARRIER;
++    val =  __atomic_compare_exchange_n (&_q_value, &expectedValue, newValue,
++                                        false, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
++    Q_COMPILER_MEMORY_BARRIER;
++    return val;
++}
++
++template <typename T>
++Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreRelaxed(T *newValue)
++{
++    T *val;
++    Q_COMPILER_MEMORY_BARRIER;
++    val = __atomic_exchange_n(&_q_value, newValue, __ATOMIC_RELAXED);
++    Q_COMPILER_MEMORY_BARRIER;
++    return val;
++}
++
++template <typename T>
++Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelaxed(qptrdiff valueToAdd)
++{
++    T *val;
++    Q_COMPILER_MEMORY_BARRIER;
++    val = __atomic_fetch_add(&_q_value, valueToAdd, __ATOMIC_RELAXED);
++    Q_COMPILER_MEMORY_BARRIER;
++    return val;
++}
++
++inline bool QBasicAtomicInt::testAndSetAcquire(int expectedValue, int newValue)
++{
++    bool returnValue = testAndSetRelaxed(expectedValue, newValue);
++    Q_DATA_MEMORY_BARRIER;
++    return returnValue;
++}
++
++inline bool QBasicAtomicInt::testAndSetRelease(int expectedValue, int newValue)
++{
++    Q_DATA_MEMORY_BARRIER;
++    return testAndSetRelaxed(expectedValue, newValue);
++}
++
++inline bool QBasicAtomicInt::testAndSetOrdered(int expectedValue, int newValue)
++{
++    Q_DATA_MEMORY_BARRIER;
++    bool returnValue = testAndSetRelaxed(expectedValue, newValue);
++    Q_COMPILER_MEMORY_BARRIER;
++    return returnValue;
++}
++
++inline int QBasicAtomicInt::fetchAndStoreAcquire(int newValue)
++{
++    int returnValue = fetchAndStoreRelaxed(newValue);
++    Q_DATA_MEMORY_BARRIER;
++    return returnValue;
++}
++
++inline int QBasicAtomicInt::fetchAndStoreRelease(int newValue)
++{
++    Q_DATA_MEMORY_BARRIER;
++    return fetchAndStoreRelaxed(newValue);
++}
++
++inline int QBasicAtomicInt::fetchAndStoreOrdered(int newValue)
++{
++    Q_DATA_MEMORY_BARRIER;
++    int returnValue = fetchAndStoreRelaxed(newValue);
++    Q_COMPILER_MEMORY_BARRIER;
++    return returnValue;
++}
++
++inline int QBasicAtomicInt::fetchAndAddAcquire(int valueToAdd)
++{
++    int returnValue = fetchAndAddRelaxed(valueToAdd);
++    Q_DATA_MEMORY_BARRIER;
++    return returnValue;
++}
++
++inline int QBasicAtomicInt::fetchAndAddRelease(int valueToAdd)
++{
++    Q_DATA_MEMORY_BARRIER;
++    return fetchAndAddRelaxed(valueToAdd);
++}
++
++inline int QBasicAtomicInt::fetchAndAddOrdered(int valueToAdd)
++{
++    Q_DATA_MEMORY_BARRIER;
++    int returnValue = fetchAndAddRelaxed(valueToAdd);
++    Q_COMPILER_MEMORY_BARRIER;
++    return returnValue;
++}
++
++template <typename T>
++Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetAcquire(T *expectedValue, T *newValue)
++{
++    bool returnValue = testAndSetRelaxed(expectedValue, newValue);
++    Q_DATA_MEMORY_BARRIER;
++    return returnValue;
++}
++
++template <typename T>
++Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetRelease(T *expectedValue, T *newValue)
++{
++    Q_DATA_MEMORY_BARRIER;
++    return testAndSetRelaxed(expectedValue, newValue);
++}
++
++template <typename T>
++Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetOrdered(T *expectedValue, T *newValue)
++{
++    Q_DATA_MEMORY_BARRIER;
++    bool returnValue = testAndSetAcquire(expectedValue, newValue);
++    Q_COMPILER_MEMORY_BARRIER;
++    return returnValue;
++}
++
++template <typename T>
++Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreAcquire(T *newValue)
++{
++    T *returnValue = fetchAndStoreRelaxed(newValue);
++    Q_DATA_MEMORY_BARRIER;
++    return returnValue;
++}
++
++template <typename T>
++Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreRelease(T *newValue)
++{
++    Q_DATA_MEMORY_BARRIER;
++    return fetchAndStoreRelaxed(newValue);
++}
++
++template <typename T>
++Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreOrdered(T *newValue)
++{
++    Q_DATA_MEMORY_BARRIER;
++    T *returnValue = fetchAndStoreRelaxed(newValue);
++    Q_COMPILER_MEMORY_BARRIER;
++    return returnValue;
++}
++
++template <typename T>
++Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddAcquire(qptrdiff valueToAdd)
++{
++    T *returnValue = fetchAndAddRelaxed(valueToAdd);
++    Q_DATA_MEMORY_BARRIER;
++    return returnValue;
++}
++
++template <typename T>
++Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelease(qptrdiff valueToAdd)
++{
++    Q_DATA_MEMORY_BARRIER;
++    return fetchAndAddRelaxed(valueToAdd);
++}
++
++template <typename T>
++Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddOrdered(qptrdiff valueToAdd)
++{
++    Q_DATA_MEMORY_BARRIER;
++    T *returnValue = fetchAndAddRelaxed(valueToAdd);
++    Q_COMPILER_MEMORY_BARRIER;
++    return returnValue;
++}
++
++#undef Q_DATA_MEMORY_BARRIER
++#undef Q_COMPILER_MEMORY_BARRIER
++
++QT_END_NAMESPACE
++
++QT_END_HEADER
++
++#endif // QATOMIC_AARCH64_H
+diff --git a/src/corelib/arch/qatomic_arch.h b/src/corelib/arch/qatomic_arch.h
+index 141726c..3e96926 100644
+--- a/src/corelib/arch/qatomic_arch.h
++++ b/src/corelib/arch/qatomic_arch.h
+@@ -94,6 +94,8 @@ QT_BEGIN_HEADER
+ #  include "QtCore/qatomic_sh4a.h"
+ #elif defined(QT_ARCH_NACL)
+ #  include "QtCore/qatomic_generic.h"
++#elif defined(QT_ARCH_AARCH64)
++#  include "QtCore/qatomic_aarch64.h"
+ #else
+ #  error "Qt has not been ported to this architecture"
+ #endif
+-- 
+2.1.0
+
diff --git a/meta/recipes-qt/qt4/qt4-4.8.6/0031-aarch64_arm64_mkspecs.patch b/meta/recipes-qt/qt4/qt4-4.8.6/0031-aarch64_arm64_mkspecs.patch
new file mode 100644
index 0000000..a01e7ad
--- /dev/null
+++ b/meta/recipes-qt/qt4/qt4-4.8.6/0031-aarch64_arm64_mkspecs.patch
@@ -0,0 +1,124 @@
+From 7090fc80ff630712a90de92403190f647dd38a39 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Lisandro=20Dami=C3=A1n=20Nicanor=20P=C3=A9rez=20Meyer?=
+ <perezmeyer@gmail.com>
+Date: Sat, 15 Mar 2014 15:35:00 -0300
+Subject: [PATCH] mkspecs for AArch64 (aka arm64).
+
+Patch by Marcin Juszkiewicz <marcin@juszkiewicz.com.pl>
+licensed under either Public Domain or BSD:
+
+<https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=735488#179>
+
+Change-Id: I21f17953234cfb176bac023e52ecdc927fc5c1a9
+
+
+Upstream-Status: Pending
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+
+---
+ configure                                 |  3 +++
+ mkspecs/linux-g++-aarch64/qmake.conf      | 27 ++++++++++++++++++++
+ mkspecs/linux-g++-aarch64/qplatformdefs.h | 42 +++++++++++++++++++++++++++++++
+ 3 files changed, 72 insertions(+)
+ create mode 100644 mkspecs/linux-g++-aarch64/qmake.conf
+ create mode 100644 mkspecs/linux-g++-aarch64/qplatformdefs.h
+
+diff --git a/configure b/configure
+index a9ba7c8..e57d053 100755
+--- a/configure
++++ b/configure
+@@ -2808,6 +2808,9 @@ if [ "$CFG_EMBEDDED" != "no" ]; then
+             *86_64)
+                 PLATFORM=qws/linux-x86_64-g++
+                 ;;
++            aarch64)
++                PLATFORM=linux-aarch64-g++
++                ;;
+             *)
+                 PLATFORM=qws/linux-generic-g++
+                 ;;
+diff --git a/mkspecs/linux-g++-aarch64/qmake.conf b/mkspecs/linux-g++-aarch64/qmake.conf
+new file mode 100644
+index 0000000..ebc0a92
+--- /dev/null
++++ b/mkspecs/linux-g++-aarch64/qmake.conf
+@@ -0,0 +1,27 @@
++#
++# qmake configuration for linux-g++
++#
++# Written for GNU/Linux platforms that have both lib and lib64 directories,
++# like the AMD Opteron.
++#
++
++MAKEFILE_GENERATOR    = UNIX
++TARGET_PLATFORM       = unix
++TEMPLATE              = app
++CONFIG               += qt warn_on release incremental link_prl gdb_dwarf_index
++QT                   += core gui
++QMAKE_INCREMENTAL_STYLE = sublib
++
++QMAKE_CFLAGS     =
++QMAKE_LFLAGS     =
++
++QMAKE_CFLAGS_RELEASE   += -O2
++
++include(../common/linux.conf)
++include(../common/gcc-base-unix.conf)
++include(../common/g++-unix.conf)
++
++QMAKE_LIBDIR_X11      = /usr/X11R6/lib64
++QMAKE_LIBDIR_OPENGL   = /usr/X11R6/lib64
++
++load(qt_config)
+diff --git a/mkspecs/linux-g++-aarch64/qplatformdefs.h b/mkspecs/linux-g++-aarch64/qplatformdefs.h
+new file mode 100644
+index 0000000..562128b
+--- /dev/null
++++ b/mkspecs/linux-g++-aarch64/qplatformdefs.h
+@@ -0,0 +1,42 @@
++/****************************************************************************
++**
++** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
++** Contact: http://www.qt-project.org/legal
++**
++** This file is part of the qmake spec of the Qt Toolkit.
++**
++** $QT_BEGIN_LICENSE:LGPL$
++** Commercial License Usage
++** Licensees holding valid commercial Qt licenses may use this file in
++** accordance with the commercial license agreement provided with the
++** Software or, alternatively, in accordance with the terms contained in
++** a written agreement between you and Digia.  For licensing terms and
++** conditions see http://qt.digia.com/licensing.  For further information
++** use the contact form at http://qt.digia.com/contact-us.
++**
++** GNU Lesser General Public License Usage
++** Alternatively, this file may be used under the terms of the GNU Lesser
++** General Public License version 2.1 as published by the Free Software
++** Foundation and appearing in the file LICENSE.LGPL included in the
++** packaging of this file.  Please review the following information to
++** ensure the GNU Lesser General Public License version 2.1 requirements
++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
++**
++** In addition, as a special exception, Digia gives you certain additional
++** rights.  These rights are described in the Digia Qt LGPL Exception
++** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
++**
++** GNU General Public License Usage
++** Alternatively, this file may be used under the terms of the GNU
++** General Public License version 3.0 as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL included in the
++** packaging of this file.  Please review the following information to
++** ensure the GNU General Public License version 3.0 requirements will be
++** met: http://www.gnu.org/copyleft/gpl.html.
++**
++**
++** $QT_END_LICENSE$
++**
++****************************************************************************/
++
++#include "../linux-g++/qplatformdefs.h"
+-- 
+2.1.0
+
diff --git a/meta/recipes-qt/qt4/qt4-4.8.6/0032-aarch64_add_header.patch b/meta/recipes-qt/qt4/qt4-4.8.6/0032-aarch64_add_header.patch
new file mode 100644
index 0000000..7132224
--- /dev/null
+++ b/meta/recipes-qt/qt4/qt4-4.8.6/0032-aarch64_add_header.patch
@@ -0,0 +1,18 @@
+Add missing header for aarch64. And install ../corelib/arch/qatomic_aarch64.h.
+
+Upstream-Status: Pending
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+diff -Nru qt-everywhere-opensource-src-4.8.6.orig/include/QtCore/qatomic_aarch64.h qt-everywhere-opensource-src-4.8.6/include/QtCore/qatomic_aarch64.h
+--- qt-everywhere-opensource-src-4.8.6.orig/include/QtCore/qatomic_aarch64.h	1970-01-01 08:30:00.000000000 +0830
++++ qt-everywhere-opensource-src-4.8.6/include/QtCore/qatomic_aarch64.h	2014-09-09 17:18:03.768352551 +0800
+@@ -0,0 +1 @@
++#include "../../src/corelib/arch/qatomic_aarch64.h"
+--- qt-everywhere-opensource-src-4.8.6/include/QtCore/headers.pri.orig	2014-09-09 18:05:37.100430311 +0800
++++ qt-everywhere-opensource-src-4.8.6/include/QtCore/headers.pri	2014-09-09 18:05:59.112430911 +0800
+@@ -1,3 +1,3 @@
+-SYNCQT.HEADER_FILES = ../corelib/statemachine/qabstractstate.h ../corelib/statemachine/qabstracttransition.h ../corelib/statemachine/qeventtransition.h ../corelib/statemachine/qfinalstate.h ../corelib/statemachine/qhistorystate.h ../corelib/statemachine/qsignaltransition.h ../corelib/statemachine/qstate.h ../corelib/statemachine/qstatemachine.h ../corelib/arch/qatomic_alpha.h ../corelib/arch/qatomic_arch.h ../corelib/arch/qatomic_arm.h ../corelib/arch/qatomic_armv5.h ../corelib/arch/qatomic_armv6.h ../corelib/arch/qatomic_armv7.h ../corelib/arch/qatomic_avr32.h ../corelib/arch/qatomic_bfin.h ../corelib/arch/qatomic_bootstrap.h ../corelib/arch/qatomic_generic.h ../corelib/arch/qatomic_i386.h ../corelib/arch/qatomic_ia64.h ../corelib/arch/qatomic_integrity.h ../corelib/arch/qatomic_m68k.h ../corelib/arch/qatomic_macosx.h ../corelib/arch/qatomic_mips.h ../corelib/arch/qatomic_parisc.h ../corelib/arch/qatomic_powerpc.h ../corelib/arch/qatomic_s390.h ../corelib/arch/qatomic_sh.h ../corelib/arch/qatomic_sh4a.h ../corelib/arch/qatomic_sparc.h ../corelib/arch/qatomic_symbian.h ../corelib/arch/qatomic_vxworks.h ../corelib/arch/qatomic_windows.h ../corelib/arch/qatomic_windowsce.h ../corelib/arch/qatomic_x86_64.h ../corelib/thread/qatomic.h ../corelib/thread/qbasicatomic.h ../corelib/thread/qmutex.h ../corelib/thread/qreadwritelock.h ../corelib/thread/qsemaphore.h ../corelib/thread/qthread.h ../corelib/thread/qthreadstorage.h ../corelib/thread/qwaitcondition.h ../corelib/xml/qxmlstream.h ../corelib/concurrent/qfuture.h ../corelib/concurrent/qfutureinterface.h ../corelib/concurrent/qfuturesynchronizer.h ../corelib/concurrent/qfuturewatcher.h ../corelib/concurrent/qrunnable.h ../corelib/concurrent/qtconcurrentcompilertest.h ../corelib/concurrent/qtconcurrentexception.h ../corelib/concurrent/qtconcurrentfilter.h ../corelib/concurrent/qtconcurrentfilterkernel.h ../corelib/concurrent/qtconcurrentfunctionwrappers.h ../corelib/concurrent/qtconcurrentiteratekernel.h ../corelib/concurrent/qtconcurrentmap.h ../corelib/concurrent/qtconcurrentmapkernel.h ../corelib/concurrent/qtconcurrentmedian.h ../corelib/concurrent/qtconcurrentreducekernel.h ../corelib/concurrent/qtconcurrentresultstore.h ../corelib/concurrent/qtconcurrentrun.h ../corelib/concurrent/qtconcurrentrunbase.h ../corelib/concurrent/qtconcurrentstoredfunctioncall.h ../corelib/concurrent/qtconcurrentthreadengine.h ../corelib/concurrent/qthreadpool.h ../corelib/kernel/qabstracteventdispatcher.h ../corelib/kernel/qabstractitemmodel.h ../corelib/kernel/qbasictimer.h ../corelib/kernel/qcoreapplication.h ../corelib/kernel/qcoreevent.h ../corelib/kernel/qeventloop.h ../corelib/kernel/qfunctions_nacl.h ../corelib/kernel/qfunctions_vxworks.h ../corelib/kernel/qfunctions_wince.h ../corelib/kernel/qmath.h ../corelib/kernel/qmetaobject.h ../corelib/kernel/qmetatype.h ../corelib/kernel/qmimedata.h ../corelib/kernel/qobject.h ../corelib/kernel/qobjectcleanuphandler.h ../corelib/kernel/qobjectdefs.h ../corelib/kernel/qpointer.h ../corelib/kernel/qsharedmemory.h ../corelib/kernel/qsignalmapper.h ../corelib/kernel/qsocketnotifier.h ../corelib/kernel/qsystemsemaphore.h ../corelib/kernel/qtimer.h ../corelib/kernel/qtranslator.h ../corelib/kernel/qvariant.h ../corelib/plugin/qfactoryinterface.h ../corelib/plugin/qlibrary.h ../corelib/plugin/qplugin.h ../corelib/plugin/qpluginloader.h ../corelib/plugin/quuid.h ../corelib/global/qconfig-dist.h ../corelib/global/qconfig-large.h ../corelib/global/qconfig-medium.h ../corelib/global/qconfig-minimal.h ../corelib/global/qconfig-nacl.h ../corelib/global/qconfig-small.h ../corelib/global/qendian.h ../corelib/global/qfeatures.h ../corelib/global/qglobal.h ../corelib/global/qlibraryinfo.h ../corelib/global/qnamespace.h ../corelib/global/qnumeric.h ../corelib/global/qt_windows.h ../corelib/global/qconfig.h ../corelib/codecs/qtextcodec.h ../corelib/codecs/qtextcodecplugin.h ../corelib/io/qabstractfileengine.h ../corelib/io/qbuffer.h ../corelib/io/qdatastream.h ../corelib/io/qdebug.h ../corelib/io/qdir.h ../corelib/io/qdiriterator.h ../corelib/io/qfile.h ../corelib/io/qfileinfo.h ../corelib/io/qfilesystemwatcher.h ../corelib/io/qfsfileengine.h ../corelib/io/qiodevice.h ../corelib/io/qprocess.h ../corelib/io/qresource.h ../corelib/io/qsettings.h ../corelib/io/qtemporaryfile.h ../corelib/io/qtextstream.h ../corelib/io/qurl.h ../corelib/animation/qabstractanimation.h ../corelib/animation/qanimationgroup.h ../corelib/animation/qparallelanimationgroup.h ../corelib/animation/qpauseanimation.h ../corelib/animation/qpropertyanimation.h ../corelib/animation/qsequentialanimationgroup.h ../corelib/animation/qvariantanimation.h ../corelib/tools/qalgorithms.h ../corelib/tools/qbitarray.h ../corelib/tools/qbytearray.h ../corelib/tools/qbytearraymatcher.h ../corelib/tools/qcache.h ../corelib/tools/qchar.h ../corelib/tools/qcontainerfwd.h ../corelib/tools/qcontiguouscache.h ../corelib/tools/qcryptographichash.h ../corelib/tools/qdatetime.h ../corelib/tools/qeasingcurve.h ../corelib/tools/qelapsedtimer.h ../corelib/tools/qhash.h ../corelib/tools/qiterator.h ../corelib/tools/qline.h ../corelib/tools/qlinkedlist.h ../corelib/tools/qlist.h ../corelib/tools/qlocale.h ../corelib/tools/qlocale_blackberry.h ../corelib/tools/qmap.h ../corelib/tools/qmargins.h ../corelib/tools/qpair.h ../corelib/tools/qpoint.h ../corelib/tools/qqueue.h ../corelib/tools/qrect.h ../corelib/tools/qregexp.h ../corelib/tools/qscopedpointer.h ../corelib/tools/qscopedvaluerollback.h ../corelib/tools/qset.h ../corelib/tools/qshareddata.h ../corelib/tools/qsharedpointer.h ../corelib/tools/qsharedpointer_impl.h ../corelib/tools/qsize.h ../corelib/tools/qstack.h ../corelib/tools/qstring.h ../corelib/tools/qstringbuilder.h ../corelib/tools/qstringlist.h ../corelib/tools/qstringmatcher.h ../corelib/tools/qtextboundaryfinder.h ../corelib/tools/qtimeline.h ../corelib/tools/qvarlengtharray.h ../corelib/tools/qvector.h ../../include/QtCore/QtCore 
++SYNCQT.HEADER_FILES = ../corelib/statemachine/qabstractstate.h ../corelib/statemachine/qabstracttransition.h ../corelib/statemachine/qeventtransition.h ../corelib/statemachine/qfinalstate.h ../corelib/statemachine/qhistorystate.h ../corelib/statemachine/qsignaltransition.h ../corelib/statemachine/qstate.h ../corelib/statemachine/qstatemachine.h ../corelib/arch/qatomic_alpha.h ../corelib/arch/qatomic_arch.h ../corelib/arch/qatomic_arm.h ../corelib/arch/qatomic_armv5.h ../corelib/arch/qatomic_armv6.h ../corelib/arch/qatomic_armv7.h ../corelib/arch/qatomic_aarch64.h ../corelib/arch/qatomic_avr32.h ../corelib/arch/qatomic_bfin.h ../corelib/arch/qatomic_bootstrap.h ../corelib/arch/qatomic_generic.h ../corelib/arch/qatomic_i386.h ../corelib/arch/qatomic_ia64.h ../corelib/arch/qatomic_integrity.h ../corelib/arch/qatomic_m68k.h ../corelib/arch/qatomic_macosx.h ../corelib/arch/qatomic_mips.h ../corelib/arch/qatomic_parisc.h ../corelib/arch/qatomic_powerpc.h ../corelib/arch/qatomic_s390.h ../corelib/arch/qatomic_sh.h ../corelib/arch/qatomic_sh4a.h ../corelib/arch/qatomic_sparc.h ../corelib/arch/qatomic_symbian.h ../corelib/arch/qatomic_vxworks.h ../corelib/arch/qatomic_windows.h ../corelib/arch/qatomic_windowsce.h ../corelib/arch/qatomic_x86_64.h ../corelib/thread/qatomic.h ../corelib/thread/qbasicatomic.h ../corelib/thread/qmutex.h ../corelib/thread/qreadwritelock.h ../corelib/thread/qsemaphore.h ../corelib/thread/qthread.h ../corelib/thread/qthreadstorage.h ../corelib/thread/qwaitcondition.h ../corelib/xml/qxmlstream.h ../corelib/concurrent/qfuture.h ../corelib/concurrent/qfutureinterface.h ../corelib/concurrent/qfuturesynchronizer.h ../corelib/concurrent/qfuturewatcher.h ../corelib/concurrent/qrunnable.h ../corelib/concurrent/qtconcurrentcompilertest.h ../corelib/concurrent/qtconcurrentexception.h ../corelib/concurrent/qtconcurrentfilter.h ../corelib/concurrent/qtconcurrentfilterkernel.h ../corelib/concurrent/qtconcurrentfunctionwrappers.h ../corelib/concurrent/qtconcurrentiteratekernel.h ../corelib/concurrent/qtconcurrentmap.h ../corelib/concurrent/qtconcurrentmapkernel.h ../corelib/concurrent/qtconcurrentmedian.h ../corelib/concurrent/qtconcurrentreducekernel.h ../corelib/concurrent/qtconcurrentresultstore.h ../corelib/concurrent/qtconcurrentrun.h ../corelib/concurrent/qtconcurrentrunbase.h ../corelib/concurrent/qtconcurrentstoredfunctioncall.h ../corelib/concurrent/qtconcurrentthreadengine.h ../corelib/concurrent/qthreadpool.h ../corelib/kernel/qabstracteventdispatcher.h ../corelib/kernel/qabstractitemmodel.h ../corelib/kernel/qbasictimer.h ../corelib/kernel/qcoreapplication.h ../corelib/kernel/qcoreevent.h ../corelib/kernel/qeventloop.h ../corelib/kernel/qfunctions_nacl.h ../corelib/kernel/qfunctions_vxworks.h ../corelib/kernel/qfunctions_wince.h ../corelib/kernel/qmath.h ../corelib/kernel/qmetaobject.h ../corelib/kernel/qmetatype.h ../corelib/kernel/qmimedata.h ../corelib/kernel/qobject.h ../corelib/kernel/qobjectcleanuphandler.h ../corelib/kernel/qobjectdefs.h ../corelib/kernel/qpointer.h ../corelib/kernel/qsharedmemory.h ../corelib/kernel/qsignalmapper.h ../corelib/kernel/qsocketnotifier.h ../corelib/kernel/qsystemsemaphore.h ../corelib/kernel/qtimer.h ../corelib/kernel/qtranslator.h ../corelib/kernel/qvariant.h ../corelib/plugin/qfactoryinterface.h ../corelib/plugin/qlibrary.h ../corelib/plugin/qplugin.h ../corelib/plugin/qpluginloader.h ../corelib/plugin/quuid.h ../corelib/global/qconfig-dist.h ../corelib/global/qconfig-large.h ../corelib/global/qconfig-medium.h ../corelib/global/qconfig-minimal.h ../corelib/global/qconfig-nacl.h ../corelib/global/qconfig-small.h ../corelib/global/qendian.h ../corelib/global/qfeatures.h ../corelib/global/qglobal.h ../corelib/global/qlibraryinfo.h ../corelib/global/qnamespace.h ../corelib/global/qnumeric.h ../corelib/global/qt_windows.h ../corelib/global/qconfig.h ../corelib/codecs/qtextcodec.h ../corelib/codecs/qtextcodecplugin.h ../corelib/io/qabstractfileengine.h ../corelib/io/qbuffer.h ../corelib/io/qdatastream.h ../corelib/io/qdebug.h ../corelib/io/qdir.h ../corelib/io/qdiriterator.h ../corelib/io/qfile.h ../corelib/io/qfileinfo.h ../corelib/io/qfilesystemwatcher.h ../corelib/io/qfsfileengine.h ../corelib/io/qiodevice.h ../corelib/io/qprocess.h ../corelib/io/qresource.h ../corelib/io/qsettings.h ../corelib/io/qtemporaryfile.h ../corelib/io/qtextstream.h ../corelib/io/qurl.h ../corelib/animation/qabstractanimation.h ../corelib/animation/qanimationgroup.h ../corelib/animation/qparallelanimationgroup.h ../corelib/animation/qpauseanimation.h ../corelib/animation/qpropertyanimation.h ../corelib/animation/qsequentialanimationgroup.h ../corelib/animation/qvariantanimation.h ../corelib/tools/qalgorithms.h ../corelib/tools/qbitarray.h ../corelib/tools/qbytearray.h ../corelib/tools/qbytearraymatcher.h ../corelib/tools/qcache.h ../corelib/tools/qchar.h ../corelib/tools/qcontainerfwd.h ../corelib/tools/qcontiguouscache.h ../corelib/tools/qcryptographichash.h ../corelib/tools/qdatetime.h ../corelib/tools/qeasingcurve.h ../corelib/tools/qelapsedtimer.h ../corelib/tools/qhash.h ../corelib/tools/qiterator.h ../corelib/tools/qline.h ../corelib/tools/qlinkedlist.h ../corelib/tools/qlist.h ../corelib/tools/qlocale.h ../corelib/tools/qlocale_blackberry.h ../corelib/tools/qmap.h ../corelib/tools/qmargins.h ../corelib/tools/qpair.h ../corelib/tools/qpoint.h ../corelib/tools/qqueue.h ../corelib/tools/qrect.h ../corelib/tools/qregexp.h ../corelib/tools/qscopedpointer.h ../corelib/tools/qscopedvaluerollback.h ../corelib/tools/qset.h ../corelib/tools/qshareddata.h ../corelib/tools/qsharedpointer.h ../corelib/tools/qsharedpointer_impl.h ../corelib/tools/qsize.h ../corelib/tools/qstack.h ../corelib/tools/qstring.h ../corelib/tools/qstringbuilder.h ../corelib/tools/qstringlist.h ../corelib/tools/qstringmatcher.h ../corelib/tools/qtextboundaryfinder.h ../corelib/tools/qtimeline.h ../corelib/tools/qvarlengtharray.h ../corelib/tools/qvector.h ../../include/QtCore/QtCore 
+ SYNCQT.HEADER_CLASSES = ../../include/QtCore/QAbstractState ../../include/QtCore/QAbstractTransition ../../include/QtCore/QEventTransition ../../include/QtCore/QFinalState ../../include/QtCore/QHistoryState ../../include/QtCore/QSignalTransition ../../include/QtCore/QState ../../include/QtCore/QStateMachine ../../include/QtCore/QAtomicInt ../../include/QtCore/QAtomicPointer ../../include/QtCore/QBasicAtomicInt ../../include/QtCore/QBasicAtomicPointer ../../include/QtCore/QMutex ../../include/QtCore/QMutexLocker ../../include/QtCore/QMutexData ../../include/QtCore/QReadWriteLock ../../include/QtCore/QReadLocker ../../include/QtCore/QWriteLocker ../../include/QtCore/QSemaphore ../../include/QtCore/QThread ../../include/QtCore/QThreadStorageData ../../include/QtCore/QThreadStorage ../../include/QtCore/QWaitCondition ../../include/QtCore/QXmlStreamStringRef ../../include/QtCore/QXmlStreamAttribute ../../include/QtCore/QXmlStreamAttributes ../../include/QtCore/QXmlStreamNamespaceDeclaration ../../include/QtCore/QXmlStreamNamespaceDeclarations ../../include/QtCore/QXmlStreamNotationDeclaration ../../include/QtCore/QXmlStreamNotationDeclarations ../../include/QtCore/QXmlStreamEntityDeclaration ../../include/QtCore/QXmlStreamEntityDeclarations ../../include/QtCore/QXmlStreamEntityResolver ../../include/QtCore/QXmlStreamReader ../../include/QtCore/QXmlStreamWriter ../../include/QtCore/QFuture ../../include/QtCore/QFutureIterator ../../include/QtCore/QMutableFutureIterator ../../include/QtCore/QFutureInterfaceBase ../../include/QtCore/QFutureInterface ../../include/QtCore/QFutureSynchronizer ../../include/QtCore/QFutureWatcherBase ../../include/QtCore/QFutureWatcher ../../include/QtCore/QRunnable ../../include/QtCore/QtConcurrentFilter ../../include/QtCore/QtConcurrentMap ../../include/QtCore/QtConcurrentRun ../../include/QtCore/QThreadPool ../../include/QtCore/QAbstractEventDispatcher ../../include/QtCore/QModelIndex ../../include/QtCore/QPersistentModelIndex ../../include/QtCore/QModelIndexList ../../include/QtCore/QAbstractItemModel ../../include/QtCore/QAbstractTableModel ../../include/QtCore/QAbstractListModel ../../include/QtCore/QBasicTimer ../../include/QtCore/QCoreApplication ../../include/QtCore/QtCleanUpFunction ../../include/QtCore/QEvent ../../include/QtCore/QTimerEvent ../../include/QtCore/QChildEvent ../../include/QtCore/QCustomEvent ../../include/QtCore/QDynamicPropertyChangeEvent ../../include/QtCore/QEventLoop ../../include/QtCore/QMetaMethod ../../include/QtCore/QMetaEnum ../../include/QtCore/QMetaProperty ../../include/QtCore/QMetaClassInfo ../../include/QtCore/QMetaType ../../include/QtCore/QMetaTypeId ../../include/QtCore/QMetaTypeId2 ../../include/QtCore/QMimeData ../../include/QtCore/QObjectList ../../include/QtCore/QObjectData ../../include/QtCore/QObject ../../include/QtCore/QObjectUserData ../../include/QtCore/QObjectCleanupHandler ../../include/QtCore/QGenericArgument ../../include/QtCore/QGenericReturnArgument ../../include/QtCore/QArgument ../../include/QtCore/QReturnArgument ../../include/QtCore/QMetaObject ../../include/QtCore/QMetaObjectAccessor ../../include/QtCore/QMetaObjectExtraData ../../include/QtCore/QPointer ../../include/QtCore/QSharedMemory ../../include/QtCore/QSignalMapper ../../include/QtCore/QSocketNotifier ../../include/QtCore/QSystemSemaphore ../../include/QtCore/QTimer ../../include/QtCore/QTranslator ../../include/QtCore/QVariant ../../include/QtCore/QVariantList ../../include/QtCore/QVariantMap ../../include/QtCore/QVariantHash ../../include/QtCore/QVariantComparisonHelper ../../include/QtCore/QFactoryInterface ../../include/QtCore/QLibrary ../../include/QtCore/QtPlugin ../../include/QtCore/QtPluginInstanceFunction ../../include/QtCore/QPluginLoader ../../include/QtCore/QUuid ../../include/QtCore/QtEndian ../../include/QtCore/QtGlobal ../../include/QtCore/QIntegerForSize ../../include/QtCore/QNoImplicitBoolCast ../../include/QtCore/Q_INT8 ../../include/QtCore/Q_UINT8 ../../include/QtCore/Q_INT16 ../../include/QtCore/Q_UINT16 ../../include/QtCore/Q_INT32 ../../include/QtCore/Q_UINT32 ../../include/QtCore/Q_INT64 ../../include/QtCore/Q_UINT64 ../../include/QtCore/Q_LLONG ../../include/QtCore/Q_ULLONG ../../include/QtCore/Q_LONG ../../include/QtCore/Q_ULONG ../../include/QtCore/QSysInfo ../../include/QtCore/QtMsgHandler ../../include/QtCore/QGlobalStatic ../../include/QtCore/QGlobalStaticDeleter ../../include/QtCore/QBool ../../include/QtCore/QTypeInfo ../../include/QtCore/QFlag ../../include/QtCore/QIncompatibleFlag ../../include/QtCore/QFlags ../../include/QtCore/QForeachContainer ../../include/QtCore/QForeachContainerBase ../../include/QtCore/QLibraryInfo ../../include/QtCore/Qt ../../include/QtCore/QInternal ../../include/QtCore/QCOORD ../../include/QtCore/QtConfig ../../include/QtCore/QTextCodec ../../include/QtCore/QTextEncoder ../../include/QtCore/QTextDecoder ../../include/QtCore/QTextCodecFactoryInterface ../../include/QtCore/QTextCodecPlugin ../../include/QtCore/QAbstractFileEngine ../../include/QtCore/QAbstractFileEngineHandler ../../include/QtCore/QAbstractFileEngineIterator ../../include/QtCore/QBuffer ../../include/QtCore/QDataStream ../../include/QtCore/QtDebug ../../include/QtCore/QDebug ../../include/QtCore/QNoDebug ../../include/QtCore/QDir ../../include/QtCore/QDirIterator ../../include/QtCore/QFile ../../include/QtCore/QFileInfo ../../include/QtCore/QFileInfoList ../../include/QtCore/QFileInfoListIterator ../../include/QtCore/QFileSystemWatcher ../../include/QtCore/QFSFileEngine ../../include/QtCore/QIODevice ../../include/QtCore/Q_PID ../../include/QtCore/QProcessEnvironment ../../include/QtCore/QProcess ../../include/QtCore/QResource ../../include/QtCore/QSettings ../../include/QtCore/QTemporaryFile ../../include/QtCore/QTextStream ../../include/QtCore/QTextStreamFunction ../../include/QtCore/QTextStreamManipulator ../../include/QtCore/QTS ../../include/QtCore/QTextIStream ../../include/QtCore/QTextOStream ../../include/QtCore/QUrl ../../include/QtCore/QAbstractAnimation ../../include/QtCore/QAnimationDriver ../../include/QtCore/QAnimationGroup ../../include/QtCore/QParallelAnimationGroup ../../include/QtCore/QPauseAnimation ../../include/QtCore/QPropertyAnimation ../../include/QtCore/QSequentialAnimationGroup ../../include/QtCore/QVariantAnimation ../../include/QtCore/QtAlgorithms ../../include/QtCore/QBitArray ../../include/QtCore/QBitRef ../../include/QtCore/QByteArray ../../include/QtCore/QByteRef ../../include/QtCore/QByteArrayMatcher ../../include/QtCore/QCache ../../include/QtCore/QLatin1Char ../../include/QtCore/QChar ../../include/QtCore/QtContainerFwd ../../include/QtCore/QContiguousCacheData ../../include/QtCore/QContiguousCacheTypedData ../../include/QtCore/QContiguousCache ../../include/QtCore/QCryptographicHash ../../include/QtCore/QDate ../../include/QtCore/QTime ../../include/QtCore/QDateTime ../../include/QtCore/QEasingCurve ../../include/QtCore/QElapsedTimer ../../include/QtCore/QHashData ../../include/QtCore/QHashDummyValue ../../include/QtCore/QHashDummyNode ../../include/QtCore/QHashNode ../../include/QtCore/QHash ../../include/QtCore/QMultiHash ../../include/QtCore/QHashIterator ../../include/QtCore/QMutableHashIterator ../../include/QtCore/QLine ../../include/QtCore/QLineF ../../include/QtCore/QLinkedListData ../../include/QtCore/QLinkedListNode ../../include/QtCore/QLinkedList ../../include/QtCore/QLinkedListIterator ../../include/QtCore/QMutableLinkedListIterator ../../include/QtCore/QListData ../../include/QtCore/QList ../../include/QtCore/QListIterator ../../include/QtCore/QMutableListIterator ../../include/QtCore/QSystemLocale ../../include/QtCore/QLocale ../../include/QtCore/QBBSystemLocaleData ../../include/QtCore/QMapData ../../include/QtCore/QMapNode ../../include/QtCore/QMapPayloadNode ../../include/QtCore/QMap ../../include/QtCore/QMultiMap ../../include/QtCore/QMapIterator ../../include/QtCore/QMutableMapIterator ../../include/QtCore/QMargins ../../include/QtCore/QPair ../../include/QtCore/QPoint ../../include/QtCore/QPointF ../../include/QtCore/QQueue ../../include/QtCore/QRect ../../include/QtCore/QRectF ../../include/QtCore/QRegExp ../../include/QtCore/QScopedPointerDeleter ../../include/QtCore/QScopedPointerArrayDeleter ../../include/QtCore/QScopedPointerPodDeleter ../../include/QtCore/QScopedPointer ../../include/QtCore/QScopedArrayPointer ../../include/QtCore/QScopedValueRollback ../../include/QtCore/QSet ../../include/QtCore/QSetIterator ../../include/QtCore/QMutableSetIterator ../../include/QtCore/QSharedData ../../include/QtCore/QSharedDataPointer ../../include/QtCore/QExplicitlySharedDataPointer ../../include/QtCore/QSharedPointer ../../include/QtCore/QWeakPointer ../../include/QtCore/QSize ../../include/QtCore/QSizeF ../../include/QtCore/QStack ../../include/QtCore/QStdWString ../../include/QtCore/QString ../../include/QtCore/QLatin1String ../../include/QtCore/QCharRef ../../include/QtCore/QConstString ../../include/QtCore/QStringRef ../../include/QtCore/QLatin1Literal ../../include/QtCore/QAbstractConcatenable ../../include/QtCore/QConcatenable ../../include/QtCore/QStringBuilder ../../include/QtCore/QStringListIterator ../../include/QtCore/QMutableStringListIterator ../../include/QtCore/QStringList ../../include/QtCore/QStringMatcher ../../include/QtCore/QTextBoundaryFinder ../../include/QtCore/QTimeLine ../../include/QtCore/QVarLengthArray ../../include/QtCore/QVectorData ../../include/QtCore/QVectorTypedData ../../include/QtCore/QVector ../../include/QtCore/QVectorIterator ../../include/QtCore/QMutableVectorIterator 
+ SYNCQT.PRIVATE_HEADER_FILES = ../corelib/statemachine/qabstractstate_p.h ../corelib/statemachine/qabstracttransition_p.h ../corelib/statemachine/qeventtransition_p.h ../corelib/statemachine/qhistorystate_p.h ../corelib/statemachine/qsignaleventgenerator_p.h ../corelib/statemachine/qsignaltransition_p.h ../corelib/statemachine/qstate_p.h ../corelib/statemachine/qstatemachine_p.h ../corelib/thread/qmutex_p.h ../corelib/thread/qmutexpool_p.h ../corelib/thread/qorderedmutexlocker_p.h ../corelib/thread/qreadwritelock_p.h ../corelib/thread/qthread_p.h ../corelib/xml/qxmlstream_p.h ../corelib/xml/qxmlutils_p.h ../corelib/concurrent/qfutureinterface_p.h ../corelib/concurrent/qfuturewatcher_p.h ../corelib/concurrent/qthreadpool_p.h ../corelib/kernel/qabstracteventdispatcher_p.h ../corelib/kernel/qabstractitemmodel_p.h ../corelib/kernel/qcore_mac_p.h ../corelib/kernel/qcore_symbian_p.h ../corelib/kernel/qcore_unix_p.h ../corelib/kernel/qcoreapplication_p.h ../corelib/kernel/qcorecmdlineargs_p.h ../corelib/kernel/qcoreglobaldata_p.h ../corelib/kernel/qcrashhandler_p.h ../corelib/kernel/qeventdispatcher_blackberry_p.h ../corelib/kernel/qeventdispatcher_glib_p.h ../corelib/kernel/qeventdispatcher_symbian_p.h ../corelib/kernel/qeventdispatcher_unix_p.h ../corelib/kernel/qeventdispatcher_win_p.h ../corelib/kernel/qfunctions_p.h ../corelib/kernel/qmetaobject_p.h ../corelib/kernel/qobject_p.h ../corelib/kernel/qsharedmemory_p.h ../corelib/kernel/qsystemerror_p.h ../corelib/kernel/qsystemsemaphore_p.h ../corelib/kernel/qtranslator_p.h ../corelib/kernel/qvariant_p.h ../corelib/kernel/qwineventnotifier_p.h ../corelib/plugin/qelfparser_p.h ../corelib/plugin/qfactoryloader_p.h ../corelib/plugin/qlibrary_p.h ../corelib/plugin/qsystemlibrary_p.h ../corelib/global/qnumeric_p.h ../corelib/global/qt_pch.h ../corelib/codecs/qfontlaocodec_p.h ../corelib/codecs/qiconvcodec_p.h ../corelib/codecs/qisciicodec_p.h ../corelib/codecs/qlatincodec_p.h ../corelib/codecs/qsimplecodec_p.h ../corelib/codecs/qtextcodec_p.h ../corelib/codecs/qtsciicodec_p.h ../corelib/codecs/qutfcodec_p.h ../corelib/io/qabstractfileengine_p.h ../corelib/io/qdatastream_p.h ../corelib/io/qdataurl_p.h ../corelib/io/qdir_p.h ../corelib/io/qfile_p.h ../corelib/io/qfileinfo_p.h ../corelib/io/qfilesystemengine_p.h ../corelib/io/qfilesystementry_p.h ../corelib/io/qfilesystemiterator_p.h ../corelib/io/qfilesystemmetadata_p.h ../corelib/io/qfilesystemwatcher_dnotify_p.h ../corelib/io/qfilesystemwatcher_fsevents_p.h ../corelib/io/qfilesystemwatcher_inotify_p.h ../corelib/io/qfilesystemwatcher_kqueue_p.h ../corelib/io/qfilesystemwatcher_p.h ../corelib/io/qfilesystemwatcher_symbian_p.h ../corelib/io/qfilesystemwatcher_win_p.h ../corelib/io/qfsfileengine_iterator_p.h ../corelib/io/qfsfileengine_p.h ../corelib/io/qiodevice_p.h ../corelib/io/qnoncontiguousbytedevice_p.h ../corelib/io/qprocess_p.h ../corelib/io/qresource_iterator_p.h ../corelib/io/qresource_p.h ../corelib/io/qsettings_p.h ../corelib/io/qtldurl_p.h ../corelib/io/qurltlds_p.h ../corelib/io/qwindowspipewriter_p.h ../corelib/animation/qabstractanimation_p.h ../corelib/animation/qanimationgroup_p.h ../corelib/animation/qparallelanimationgroup_p.h ../corelib/animation/qpropertyanimation_p.h ../corelib/animation/qsequentialanimationgroup_p.h ../corelib/animation/qvariantanimation_p.h ../corelib/tools/qbytedata_p.h ../corelib/tools/qdatetime_p.h ../corelib/tools/qharfbuzz_p.h ../corelib/tools/qlocale_data_p.h ../corelib/tools/qlocale_p.h ../corelib/tools/qlocale_tools_p.h ../corelib/tools/qpodlist_p.h ../corelib/tools/qringbuffer_p.h ../corelib/tools/qscopedpointer_p.h ../corelib/tools/qsimd_p.h ../corelib/tools/qtools_p.h ../corelib/tools/qunicodetables_p.h 
diff --git a/meta/recipes-qt/qt4/qt4-native.inc b/meta/recipes-qt/qt4/qt4-native.inc
index bb16da6..70bda73 100644
--- a/meta/recipes-qt/qt4/qt4-native.inc
+++ b/meta/recipes-qt/qt4/qt4-native.inc
@@ -18,6 +18,10 @@ SRC_URI = "http://download.qt-project.org/official_releases/qt/4.8/${PV}/qt-ever
            file://0002-qkbdtty_qws-fix-build-with-old-kernel-headers.patch \
            file://0003-webkit2-set-OUTPUT_DIR-value-if-empty.patch \
            file://0021-configure-make-qt4-native-work-with-long-building-pa.patch \
+           file://0029-aarch64_arm64_fix_arch_detection.patch \
+           file://0030-aarch64_arm64_qatomic_support.patch \
+           file://0031-aarch64_arm64_mkspecs.patch \
+           file://0032-aarch64_add_header.patch \
            file://g++.conf \
            file://linux.conf \
 	"
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 6/9] qt4: add aarch64 support
  2014-09-16 15:06 [PATCH 0/9] V2: Add machine qemuaarch64 Kai Kang
                   ` (4 preceding siblings ...)
  2014-09-16 15:06 ` [PATCH 5/9] qt4-native: add aarch64 support Kai Kang
@ 2014-09-16 15:06 ` Kai Kang
  2014-09-16 15:06 ` [PATCH 7/9] qt4-embedded: disable webkit Kai Kang
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 23+ messages in thread
From: Kai Kang @ 2014-09-16 15:06 UTC (permalink / raw)
  To: ross.burton; +Cc: openembedded-core, jslater

Add qt4 aarch64 support. Use same patches with qt-native. Add arch check
to set right QT_ARCH.

Disable webkit temporarily that it fails to build:

| runtime/JSValueInlineMethods.h: In constructor
'JSC::JSValue::JSValue(const JSC::JSCell*)':
| runtime/JSValueInlineMethods.h:242:78: error: cast from 'JSC::JSCell*'
to 'int32_t {aka int}' loses precision [-fpermissive]

It has been fix by Qt5, but didn't backport to Qt4. There is an still open
defect for it:
https://bugreports.qt-project.org/browse/QTBUG-35442

Signed-off-by: Kai Kang <kai.kang@windriver.com>
---
 meta/recipes-qt/qt4/qt4-4.8.6.inc         | 4 ++++
 meta/recipes-qt/qt4/qt4-x11-free_4.8.6.bb | 3 +++
 meta/recipes-qt/qt4/qt4_arch.inc          | 1 +
 3 files changed, 8 insertions(+)

diff --git a/meta/recipes-qt/qt4/qt4-4.8.6.inc b/meta/recipes-qt/qt4/qt4-4.8.6.inc
index ae6692b..d479bb3 100644
--- a/meta/recipes-qt/qt4/qt4-4.8.6.inc
+++ b/meta/recipes-qt/qt4/qt4-4.8.6.inc
@@ -22,6 +22,10 @@ SRC_URI = "http://download.qt-project.org/official_releases/qt/4.8/${PV}/qt-ever
            file://0019-Fixes-for-gcc-4.7.0-particularly-on-qemux86.patch \
            file://0027-tools.pro-disable-qmeegographicssystemhelper.patch \
            file://0028-Don-t-crash-on-broken-GIF-images.patch \
+           file://0029-aarch64_arm64_fix_arch_detection.patch \
+           file://0030-aarch64_arm64_qatomic_support.patch \
+           file://0031-aarch64_arm64_mkspecs.patch \
+           file://0032-aarch64_add_header.patch \
            file://g++.conf \
            file://linux.conf \
            "
diff --git a/meta/recipes-qt/qt4/qt4-x11-free_4.8.6.bb b/meta/recipes-qt/qt4/qt4-x11-free_4.8.6.bb
index 5cb5e68..dc792c5 100644
--- a/meta/recipes-qt/qt4/qt4-x11-free_4.8.6.bb
+++ b/meta/recipes-qt/qt4/qt4-x11-free_4.8.6.bb
@@ -7,3 +7,6 @@ QT_CONFIG_FLAGS += " \
  -no-embedded \
  -xrandr \
  -x11"
+
+# disable webkit for aarch64 temporarily that fails to compile
+QT_CONFIG_FLAGS_append_aarch64 = " -no-webkit"
diff --git a/meta/recipes-qt/qt4/qt4_arch.inc b/meta/recipes-qt/qt4/qt4_arch.inc
index c1d35ab..07512db 100644
--- a/meta/recipes-qt/qt4/qt4_arch.inc
+++ b/meta/recipes-qt/qt4/qt4_arch.inc
@@ -4,6 +4,7 @@ ARM_INSTRUCTION_SET = "arm"
 
 set_arch() {
    case ${TARGET_ARCH} in
+       aarch64)  QT_ARCH=aarch64 ;;
        arm*)     QT_ARCH=arm ;;
        i*86*)    QT_ARCH=i386 ;;
        mips*)    QT_ARCH=mips ;;
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 7/9] qt4-embedded: disable webkit
  2014-09-16 15:06 [PATCH 0/9] V2: Add machine qemuaarch64 Kai Kang
                   ` (5 preceding siblings ...)
  2014-09-16 15:06 ` [PATCH 6/9] qt4: " Kai Kang
@ 2014-09-16 15:06 ` Kai Kang
  2014-09-16 15:06 ` [PATCH 8/9] libpng: add neon option for aarch64 Kai Kang
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 23+ messages in thread
From: Kai Kang @ 2014-09-16 15:06 UTC (permalink / raw)
  To: ross.burton; +Cc: openembedded-core, jslater

Disable webkit for aarch64 that make qt4-embedded build.

Signed-off-by: Kai Kang <kai.kang@windriver.com>
---
 meta/recipes-qt/qt4/qt4-embedded_4.8.6.bb | 1 +
 1 file changed, 1 insertion(+)

diff --git a/meta/recipes-qt/qt4/qt4-embedded_4.8.6.bb b/meta/recipes-qt/qt4/qt4-embedded_4.8.6.bb
index 1435d85..a3995c9 100644
--- a/meta/recipes-qt/qt4/qt4-embedded_4.8.6.bb
+++ b/meta/recipes-qt/qt4/qt4-embedded_4.8.6.bb
@@ -7,3 +7,4 @@ QT_CONFIG_FLAGS += " \
  -exceptions \
 "
 
+QT_CONFIG_FLAGS_append_aarch64 = " -no-webkit"
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 8/9] libpng: add neon option for aarch64
  2014-09-16 15:06 [PATCH 0/9] V2: Add machine qemuaarch64 Kai Kang
                   ` (6 preceding siblings ...)
  2014-09-16 15:06 ` [PATCH 7/9] qt4-embedded: disable webkit Kai Kang
@ 2014-09-16 15:06 ` Kai Kang
  2014-09-16 15:06 ` [PATCH 9/9] perf: disable libunwind support " Kai Kang
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 23+ messages in thread
From: Kai Kang @ 2014-09-16 15:06 UTC (permalink / raw)
  To: ross.burton; +Cc: openembedded-core, jslater

Add neon option for aarch64 just as for arm. It fails with:

| ./.libs/libpng16.so: undefined reference to `png_init_filter_functions_neon'
| collect2: error: ld returned 1 exit status

Signed-off-by: Kai Kang <kai.kang@windriver.com>
---
 meta/recipes-multimedia/libpng/libpng_1.6.13.bb | 1 +
 1 file changed, 1 insertion(+)

diff --git a/meta/recipes-multimedia/libpng/libpng_1.6.13.bb b/meta/recipes-multimedia/libpng/libpng_1.6.13.bb
index 0c6fd1f..3d32bfe 100644
--- a/meta/recipes-multimedia/libpng/libpng_1.6.13.bb
+++ b/meta/recipes-multimedia/libpng/libpng_1.6.13.bb
@@ -20,6 +20,7 @@ inherit autotools binconfig-disabled pkgconfig
 
 # Work around missing symbols
 EXTRA_OECONF_append_arm = " ${@bb.utils.contains("TUNE_FEATURES", "neon", "--enable-arm-neon=on", "--enable-arm-neon=off" ,d)}"
+EXTRA_OECONF_append_aarch64 = " ${@bb.utils.contains("TUNE_FEATURES", "neon", "--enable-arm-neon=on", "--enable-arm-neon=off" ,d)}"
 
 PACKAGES =+ "${PN}-tools"
 
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 9/9] perf: disable libunwind support for aarch64
  2014-09-16 15:06 [PATCH 0/9] V2: Add machine qemuaarch64 Kai Kang
                   ` (7 preceding siblings ...)
  2014-09-16 15:06 ` [PATCH 8/9] libpng: add neon option for aarch64 Kai Kang
@ 2014-09-16 15:06 ` Kai Kang
  2014-09-18  7:07   ` Khem Raj
  2014-09-17  9:13 ` [PATCH 0/9] V2: Add machine qemuaarch64 Kang Kai
  2014-09-17 15:11 ` Burton, Ross
  10 siblings, 1 reply; 23+ messages in thread
From: Kai Kang @ 2014-09-16 15:06 UTC (permalink / raw)
  To: ross.burton; +Cc: openembedded-core, jslater

Disable libunwind support of perl for aarch aarch64 that libunwind
doesn't support aarch64.

Signed-off-by: Kai Kang <kai.kang@windriver.com>
---
 meta/recipes-kernel/perf/perf-features.inc | 1 +
 1 file changed, 1 insertion(+)

diff --git a/meta/recipes-kernel/perf/perf-features.inc b/meta/recipes-kernel/perf/perf-features.inc
index 2dbbb47..1782ae6 100644
--- a/meta/recipes-kernel/perf/perf-features.inc
+++ b/meta/recipes-kernel/perf/perf-features.inc
@@ -1,4 +1,5 @@
 PERF_FEATURES_ENABLE ?= "perf-scripting perf-tui perf-libunwind"
+PERF_FEATURES_ENABLE_aarch64 ?= "perf-scripting perf-tui"
 
 def perf_feature_enabled(feature, trueval, falseval, d):
     """
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 23+ messages in thread

* Re: [PATCH 0/9] V2: Add machine qemuaarch64
  2014-09-16 15:06 [PATCH 0/9] V2: Add machine qemuaarch64 Kai Kang
                   ` (8 preceding siblings ...)
  2014-09-16 15:06 ` [PATCH 9/9] perf: disable libunwind support " Kai Kang
@ 2014-09-17  9:13 ` Kang Kai
  2014-09-17 15:11 ` Burton, Ross
  10 siblings, 0 replies; 23+ messages in thread
From: Kang Kai @ 2014-09-17  9:13 UTC (permalink / raw)
  To: ross.burton; +Cc: jslater, openembedded-core

On 2014年09月16日 23:06, Kai Kang wrote:
> V2:
> * fix kernel linux-yocto build faiure
> * redefine position of dynamic linker from /lib to /lib64
> * other fixes of userspace packages
>
> Test with Joe Slater's patches:
> * siteinfo: account for 32 and 64 bit arm
> * sysprof: add aarch64 support

Add there are 2 known failures of build world:
1 meta/recipes-kernel/cryptodev/cryptodev-module_1.6.bb: it needs a 
valid kernel config. CONFIG_MODULES is not set for now.
2 meta/recipes-support/libunwind/libunwind_1.1.bb: it was added recently 
and seems not support aarch64. Maybe we should exclude it from world for 
aarch64.

Regards,
Kai

>
> The following changes since commit fceef0cace6670a8c5f15cd2f31a191176732730:
>
>    bitbake: data_smart: Fix remove operator and its interaction with data expansion (2014-09-13 08:52:49 +0100)
>
> are available in the git repository at:
>
>    git://git.pokylinux.org/poky-contrib kangkai/qemuarm64
>    http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=kangkai/qemuarm64
>
> Kai Kang (9):
>    linux-yocto: depend on libgcc for aarch64
>    Add machine qemuarm64
>    gcc-4.9: redefine dynamic linker for aarch64
>    libatomics-ops: add aarch64 target iniitial support
>    qt4-native: add aarch64 support
>    qt4: add aarch64 support
>    qt4-embedded: disable webkit
>    libpng: add neon option for aarch64
>    perf: disable libunwind support for aarch64
>
>   meta/conf/bitbake.conf                             |   1 +
>   meta/conf/machine/include/arm/arch-armv8.inc       |  20 +
>   meta/conf/machine/qemuarm64.conf                   |  12 +
>   meta/recipes-devtools/gcc/gcc-4.9.inc              |   1 +
>   .../0056-redefine-dynamic-linker-for-aarch64.patch |  34 ++
>   meta/recipes-kernel/linux/linux-yocto.inc          |   1 +
>   meta/recipes-kernel/perf/perf-features.inc         |   1 +
>   meta/recipes-multimedia/libpng/libpng_1.6.13.bb    |   1 +
>   .../0001-libatomic_ops-Aarch64-basic-port.patch    | 239 ++++++++++
>   .../pulseaudio/libatomics-ops_7.2.bb               |   1 +
>   meta/recipes-qt/qt4/qt4-4.8.6.inc                  |   4 +
>   .../0029-aarch64_arm64_fix_arch_detection.patch    |  53 +++
>   .../0030-aarch64_arm64_qatomic_support.patch       | 491 +++++++++++++++++++++
>   .../qt4/qt4-4.8.6/0031-aarch64_arm64_mkspecs.patch | 124 ++++++
>   .../qt4/qt4-4.8.6/0032-aarch64_add_header.patch    |  18 +
>   meta/recipes-qt/qt4/qt4-embedded_4.8.6.bb          |   1 +
>   meta/recipes-qt/qt4/qt4-native.inc                 |   4 +
>   meta/recipes-qt/qt4/qt4-x11-free_4.8.6.bb          |   3 +
>   meta/recipes-qt/qt4/qt4_arch.inc                   |   1 +
>   19 files changed, 1010 insertions(+)
>   create mode 100644 meta/conf/machine/include/arm/arch-armv8.inc
>   create mode 100644 meta/conf/machine/qemuarm64.conf
>   create mode 100644 meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch
>   create mode 100644 meta/recipes-multimedia/pulseaudio/files/0001-libatomic_ops-Aarch64-basic-port.patch
>   create mode 100644 meta/recipes-qt/qt4/qt4-4.8.6/0029-aarch64_arm64_fix_arch_detection.patch
>   create mode 100644 meta/recipes-qt/qt4/qt4-4.8.6/0030-aarch64_arm64_qatomic_support.patch
>   create mode 100644 meta/recipes-qt/qt4/qt4-4.8.6/0031-aarch64_arm64_mkspecs.patch
>   create mode 100644 meta/recipes-qt/qt4/qt4-4.8.6/0032-aarch64_add_header.patch
>


-- 
Regards,
Neil | Kai Kang



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 0/9] V2: Add machine qemuaarch64
  2014-09-16 15:06 [PATCH 0/9] V2: Add machine qemuaarch64 Kai Kang
                   ` (9 preceding siblings ...)
  2014-09-17  9:13 ` [PATCH 0/9] V2: Add machine qemuaarch64 Kang Kai
@ 2014-09-17 15:11 ` Burton, Ross
  2014-09-18  9:40   ` Kang Kai
  10 siblings, 1 reply; 23+ messages in thread
From: Burton, Ross @ 2014-09-17 15:11 UTC (permalink / raw)
  To: Kai Kang; +Cc: OE-core, Joe Slater

On 16 September 2014 16:06, Kai Kang <kai.kang@windriver.com> wrote:
> V2:
> * fix kernel linux-yocto build faiure
> * redefine position of dynamic linker from /lib to /lib64
> * other fixes of userspace packages
>
> Test with Joe Slater's patches:
> * siteinfo: account for 32 and 64 bit arm
> * sysprof: add aarch64 support

So aarch64 support really needs qemuarm64 in oe-core to be tested, and
qemuarm64 is a new feature, and we froze for new features two weeks
ago.  Blindly merging aarch64 patches that we can't currently test
doesn't seem sensible.

Could someone who is actually testing and working on the aarch64
support (you?) manage a single branch that tracks master, so when 1.7
branches off we can do a merge straight away.

Ross


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 1/9] linux-yocto: depend on libgcc for aarch64
  2014-09-16 15:06 ` [PATCH 1/9] linux-yocto: depend on libgcc for aarch64 Kai Kang
@ 2014-09-18  6:56   ` Khem Raj
  2014-09-18  9:27     ` Kang Kai
  0 siblings, 1 reply; 23+ messages in thread
From: Khem Raj @ 2014-09-18  6:56 UTC (permalink / raw)
  To: openembedded-core

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1



On 9/16/14 8:06 AM, Kai Kang wrote:
> Make aarch aarch64 kernel depend on libgcc. In arch/arm64/Makefile, it
> adds LIBGCC to libs-y:
> 
> LIBGCC          := $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name)
> libs-y          += $(LIBGCC)
> 
> If build without libgcc, the value of LIBGCC is just libgcc.a without
> parent directory. linux-yocto fails to build:
> 
> |   LD      vmlinux.o
> | aarch64-poky-linux-ld.bfd: cannot find libgcc.a: No such file or directory
> 
> Add libgcc to aarch64 kernel dependency.

really ? usually kernel has its own routines to substitute libgcc needs.
why is it different here.

> 
> Signed-off-by: Kai Kang <kai.kang@windriver.com>
> ---
>  meta/recipes-kernel/linux/linux-yocto.inc | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/meta/recipes-kernel/linux/linux-yocto.inc b/meta/recipes-kernel/linux/linux-yocto.inc
> index 4ed3188..db693e6 100644
> --- a/meta/recipes-kernel/linux/linux-yocto.inc
> +++ b/meta/recipes-kernel/linux/linux-yocto.inc
> @@ -7,6 +7,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7"
>  INC_PR = "r4"
>  
>  DEPENDS += "xz-native bc-native"
> +DEPENDS_aarch64 += "libgcc"
>  

this should be using append instead of +=

>  # A KMACHINE is the mapping of a yocto $MACHINE to what is built
>  # by the kernel. This is typically the branch that should be built,
> 

- -- 
- -Khem
-----BEGIN PGP SIGNATURE-----
Version: GnuPG/MacGPG2 v2.0.22 (Darwin)
Comment: GPGTools - https://gpgtools.org

iEYEARECAAYFAlQagi0ACgkQuwUzVZGdMxQfGwCaAuY+dIXbAnQ9tTOIA4MFSwhe
wEwAn1FxFeun292octWdy0sYJqtGRPOb
=5Tcg
-----END PGP SIGNATURE-----


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 9/9] perf: disable libunwind support for aarch64
  2014-09-16 15:06 ` [PATCH 9/9] perf: disable libunwind support " Kai Kang
@ 2014-09-18  7:07   ` Khem Raj
  2014-09-18  9:38     ` Kang Kai
  0 siblings, 1 reply; 23+ messages in thread
From: Khem Raj @ 2014-09-18  7:07 UTC (permalink / raw)
  To: openembedded-core

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1



On 9/16/14 8:06 AM, Kai Kang wrote:
> Disable libunwind support of perl for aarch aarch64 that libunwind
> doesn't support aarch64.
> 
> Signed-off-by: Kai Kang <kai.kang@windriver.com>
> ---
>  meta/recipes-kernel/perf/perf-features.inc | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/meta/recipes-kernel/perf/perf-features.inc b/meta/recipes-kernel/perf/perf-features.inc
> index 2dbbb47..1782ae6 100644
> --- a/meta/recipes-kernel/perf/perf-features.inc
> +++ b/meta/recipes-kernel/perf/perf-features.inc
> @@ -1,4 +1,5 @@
>  PERF_FEATURES_ENABLE ?= "perf-scripting perf-tui perf-libunwind"
> +PERF_FEATURES_ENABLE_aarch64 ?= "perf-scripting perf-tui"
>  

you could also say PERF_FEATURES_ENABLE_remove_aarch64 = "perf-libunwind"

>  def perf_feature_enabled(feature, trueval, falseval, d):
>      """
> 

- -- 
- -Khem
-----BEGIN PGP SIGNATURE-----
Version: GnuPG/MacGPG2 v2.0.22 (Darwin)
Comment: GPGTools - https://gpgtools.org

iEYEARECAAYFAlQahLUACgkQuwUzVZGdMxRUTgCbB9mselfaJ3OdHJTFnZp34n15
OacAni2H6G+Mri1zW7+W5OCHBbgzfE5L
=lgJC
-----END PGP SIGNATURE-----


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 3/9] gcc-4.9: redefine dynamic linker for aarch64
  2014-09-16 15:06 ` [PATCH 3/9] gcc-4.9: redefine dynamic linker for aarch64 Kai Kang
@ 2014-09-18  7:19   ` Khem Raj
  2014-09-18  9:37     ` Kang Kai
  2014-09-18 13:58     ` Mark Hatle
  0 siblings, 2 replies; 23+ messages in thread
From: Khem Raj @ 2014-09-18  7:19 UTC (permalink / raw)
  To: openembedded-core

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1



On 9/16/14 8:06 AM, Kai Kang wrote:
> Redefine dynamic linker for aarch64 from /lib to /lib64.
> 
> BASELIB of aarch64 has to be defined with 'lib64', then linker file
> ld-linux-aarch64.so.1 is installed into /lib64 rather than /lib. So
> update it here too.

hmmm since the ldso name is different it can still live in /lib
and there will be ilp32 version ldso multilib as well later. can we keep
ldso in /lib ?

> 
> Signed-off-by: Kai Kang <kai.kang@windriver.com>
> ---
>  meta/recipes-devtools/gcc/gcc-4.9.inc              |  1 +
>  .../0056-redefine-dynamic-linker-for-aarch64.patch | 34 ++++++++++++++++++++++
>  2 files changed, 35 insertions(+)
>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch
> 
> diff --git a/meta/recipes-devtools/gcc/gcc-4.9.inc b/meta/recipes-devtools/gcc/gcc-4.9.inc
> index 25778bd..c434a45 100644
> --- a/meta/recipes-devtools/gcc/gcc-4.9.inc
> +++ b/meta/recipes-devtools/gcc/gcc-4.9.inc
> @@ -70,6 +70,7 @@ SRC_URI = "\
>      file://0053-gcc-fix-segfault-from-calling-free-on-non-malloc-d-a.patch \
>      file://0054-gcc-Makefile.in-fix-parallel-building-failure.patch \
>      file://0055-PR-rtl-optimization-61801.patch \
> +    file://0056-redefine-dynamic-linker-for-aarch64.patch \
>  "
>  SRC_URI[md5sum] = "fddf71348546af523353bd43d34919c1"
>  SRC_URI[sha256sum] = "d334781a124ada6f38e63b545e2a3b8c2183049515a1abab6d513f109f1d717e"
> diff --git a/meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch b/meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch
> new file mode 100644
> index 0000000..6933e2f
> --- /dev/null
> +++ b/meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch
> @@ -0,0 +1,34 @@
> +From 8fbb60d89e569b68b13e4fd419e20640eb49cabc Mon Sep 17 00:00:00 2001
> +From: Kai Kang <kai.kang@windriver.com>
> +Date: Tue, 16 Sep 2014 16:01:31 +0800
> +Subject: [PATCH] Redefine dynamic linker for aarch64
> +
> +Redefine dynamic linker for aarch64 from /lib to /lib64.
> +
> +BASELIB of aarch64 has to be defined with 'lib64', then linker file
> +ld-linux-aarch64.so.1 is installed into /lib64 rather than /lib. So
> +update it here too.
> +
> +Upstream-Status: Pending
> +
> +Signed-off-by: Kai Kang <kai.kang@windriver.com>
> +---
> + gcc/config/aarch64/aarch64-linux.h | 2 +-
> + 1 file changed, 1 insertion(+), 1 deletion(-)
> +
> +diff --git a/gcc/config/aarch64/aarch64-linux.h b/gcc/config/aarch64/aarch64-linux.h
> +index a8f0771..2a6f06d 100644
> +--- a/gcc/config/aarch64/aarch64-linux.h
> ++++ b/gcc/config/aarch64/aarch64-linux.h
> +@@ -21,7 +21,7 @@
> + #ifndef GCC_AARCH64_LINUX_H
> + #define GCC_AARCH64_LINUX_H
> + 
> +-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-aarch64%{mbig-endian:_be}.so.1"
> ++#define GLIBC_DYNAMIC_LINKER "/lib64/ld-linux-aarch64%{mbig-endian:_be}.so.1"
> + 
> + #define CPP_SPEC "%{pthread:-D_REENTRANT}"
> + 
> +-- 
> +1.9.1
> +
> 

- -- 
- -Khem
-----BEGIN PGP SIGNATURE-----
Version: GnuPG/MacGPG2 v2.0.22 (Darwin)
Comment: GPGTools - https://gpgtools.org

iEYEARECAAYFAlQah2UACgkQuwUzVZGdMxT98wCghPbcAP/2xFgFn9Lv3Wisexa6
kHkAni6hykOqPq44VheOimbMbcimHaZD
=jpy6
-----END PGP SIGNATURE-----


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 1/9] linux-yocto: depend on libgcc for aarch64
  2014-09-18  6:56   ` Khem Raj
@ 2014-09-18  9:27     ` Kang Kai
  0 siblings, 0 replies; 23+ messages in thread
From: Kang Kai @ 2014-09-18  9:27 UTC (permalink / raw)
  To: Khem Raj, openembedded-core

On 2014年09月18日 14:56, Khem Raj wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
>
>
> On 9/16/14 8:06 AM, Kai Kang wrote:
>> Make aarch aarch64 kernel depend on libgcc. In arch/arm64/Makefile, it
>> adds LIBGCC to libs-y:
>>
>> LIBGCC          := $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name)
>> libs-y          += $(LIBGCC)
>>
>> If build without libgcc, the value of LIBGCC is just libgcc.a without
>> parent directory. linux-yocto fails to build:
>>
>> |   LD      vmlinux.o
>> | aarch64-poky-linux-ld.bfd: cannot find libgcc.a: No such file or directory
>>
>> Add libgcc to aarch64 kernel dependency.
> really ? usually kernel has its own routines to substitute libgcc needs.
> why is it different here.

It calls script link-vmlinux.sh to link vmlinux.o. It runs function 
vmlinux_link() in the script:

if [ "${SRCARCH}" != "um" ]; then
${LD} ${LDFLAGS} ${LDFLAGS_vmlinux} -o ${2} \
-T ${lds} ${KBUILD_VMLINUX_INIT} \
--start-group ${KBUILD_VMLINUX_MAIN} --end-group ${1}

var KBUILD_VMLINUX_MAIN is defined in top Makefile:

export KBUILD_VMLINUX_MAIN := $(core-y) $(libs-y) $(drivers-y) $(net-y)


And arch aarch64 adds LIBGCC to var libs-y:

LIBGCC          := $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name)
libs-y          += $(LIBGCC)


If doesn't do libgcc:popualte_sysroot, LIBGCC just get value 'libgcc.a' 
rather than 'absolute path' to libgcc.a.

In script link-vmlinux.sh, it expands to:

+ modpost_link vmlinux.o
+ aarch64-poky-linux-ld.bfd -r -o vmlinux.o arch/arm64/kernel/head.o 
init/built-in.o --start-group usr/built-in.o 
arch/arm64/kernel/built-in.o arch/arm64/mm/built-in.o kernel/built-in.o 
mm/built-in.o fs/built-in.o ipc/built-in.o security/built-in.o 
crypto/built-in.o block/built-in.o arch/arm64/lib/lib.a lib/lib.a 
*libgcc.a* arch/arm64/lib/built-in.o lib/built-in.o *libgcc.a* 
drivers/built-in.o sound/built-in.o firmware/built-in.o net/built-in.o 
--end-group

Because no libgcc.a in current directory, error shows twice:

aarch64-poky-linux-ld.bfd: cannot find libgcc.a: No such file or directory
aarch64-poky-linux-ld.bfd: cannot find libgcc.a: No such file or directory

So I add libgcc as dependency of aarch64 kernel.


And one thing more, in kernel source directory arch, only few arches 
depends on LIBGCC:

$ grep -rw LIBGCC arch/
./openrisc/Makefile:LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) 
-print-libgcc-file-name)
./openrisc/Makefile:libs-y += $(LIBGCC)
./parisc/Makefile:LIBGCC = $(shell $(CC) $(KBUILD_CFLAGS) 
-print-libgcc-file-name)
./parisc/Makefile:libs-y += arch/parisc/lib/ $(LIBGCC)
./hexagon/Makefile:LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) 
-print-libgcc-file-name)
./hexagon/Makefile:libs-y += $(LIBGCC)
./arc/Makefile:LIBGCC := $(shell $(CC) $(ARC_LIBGCC) $(cflags-y) 
--print-libgcc-file-name)
./arc/Makefile:libs-y += arch/arc/lib/ $(LIBGCC)
./m32r/Makefile:LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) 
-print-libgcc-file-name)
./m32r/Makefile:libs-y += arch/m32r/lib/ $(LIBGCC)
./xtensa/Makefile:LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) 
-print-libgcc-file-name)
./xtensa/Makefile:libs-y += arch/xtensa/lib/ $(LIBGCC)
./xtensa/boot/boot-redboot/Makefile:LIBGCC := $(shell $(CC) 
$(KBUILD_CFLAGS) -print-libgcc-file-name)
./xtensa/boot/boot-redboot/Makefile: $(Q)$(LD) $(LD_ARGS) -o $@ $^ 
-L/xtensa-elf/lib $(LIBGCC)
./cris/Makefile:LIBGCC = $(shell $(CC) $(KBUILD_CFLAGS) 
-print-file-name=libgcc.a)
./cris/Makefile:libs-y += arch/cris/$(SARCH)/lib/ $(LIBGCC)
./arm64/Makefile:LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) 
-print-libgcc-file-name)
./arm64/Makefile:libs-y += $(LIBGCC)


By coincidence, there is no arch Yocto support before.

Regards,
Kai


>
>> Signed-off-by: Kai Kang <kai.kang@windriver.com>
>> ---
>>   meta/recipes-kernel/linux/linux-yocto.inc | 1 +
>>   1 file changed, 1 insertion(+)
>>
>> diff --git a/meta/recipes-kernel/linux/linux-yocto.inc b/meta/recipes-kernel/linux/linux-yocto.inc
>> index 4ed3188..db693e6 100644
>> --- a/meta/recipes-kernel/linux/linux-yocto.inc
>> +++ b/meta/recipes-kernel/linux/linux-yocto.inc
>> @@ -7,6 +7,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7"
>>   INC_PR = "r4"
>>   
>>   DEPENDS += "xz-native bc-native"
>> +DEPENDS_aarch64 += "libgcc"
>>   
> this should be using append instead of +=

OK.

Thanks,
--Kai

>
>>   # A KMACHINE is the mapping of a yocto $MACHINE to what is built
>>   # by the kernel. This is typically the branch that should be built,
>>
> - -- 
> - -Khem
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG/MacGPG2 v2.0.22 (Darwin)
> Comment: GPGTools - https://gpgtools.org
>
> iEYEARECAAYFAlQagi0ACgkQuwUzVZGdMxQfGwCaAuY+dIXbAnQ9tTOIA4MFSwhe
> wEwAn1FxFeun292octWdy0sYJqtGRPOb
> =5Tcg
> -----END PGP SIGNATURE-----


-- 
Regards,
Neil | Kai Kang



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 3/9] gcc-4.9: redefine dynamic linker for aarch64
  2014-09-18  7:19   ` Khem Raj
@ 2014-09-18  9:37     ` Kang Kai
  2014-09-18 13:58     ` Mark Hatle
  1 sibling, 0 replies; 23+ messages in thread
From: Kang Kai @ 2014-09-18  9:37 UTC (permalink / raw)
  To: Khem Raj, openembedded-core

On 2014年09月18日 15:19, Khem Raj wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
>
>
> On 9/16/14 8:06 AM, Kai Kang wrote:
>> Redefine dynamic linker for aarch64 from /lib to /lib64.
>>
>> BASELIB of aarch64 has to be defined with 'lib64', then linker file
>> ld-linux-aarch64.so.1 is installed into /lib64 rather than /lib. So
>> update it here too.
> hmmm since the ldso name is different it can still live in /lib
> and there will be ilp32 version ldso multilib as well later. can we keep
> ldso in /lib ?

Should not we use '/lib64' and '/lib' for mutlilib? I remember 
intel-x86-64 uses that way rather than '/lib' and '/lib32'.

--Kai

>
>> Signed-off-by: Kai Kang <kai.kang@windriver.com>
>> ---
>>   meta/recipes-devtools/gcc/gcc-4.9.inc              |  1 +
>>   .../0056-redefine-dynamic-linker-for-aarch64.patch | 34 ++++++++++++++++++++++
>>   2 files changed, 35 insertions(+)
>>   create mode 100644 meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch
>>
>> diff --git a/meta/recipes-devtools/gcc/gcc-4.9.inc b/meta/recipes-devtools/gcc/gcc-4.9.inc
>> index 25778bd..c434a45 100644
>> --- a/meta/recipes-devtools/gcc/gcc-4.9.inc
>> +++ b/meta/recipes-devtools/gcc/gcc-4.9.inc
>> @@ -70,6 +70,7 @@ SRC_URI = "\
>>       file://0053-gcc-fix-segfault-from-calling-free-on-non-malloc-d-a.patch \
>>       file://0054-gcc-Makefile.in-fix-parallel-building-failure.patch \
>>       file://0055-PR-rtl-optimization-61801.patch \
>> +    file://0056-redefine-dynamic-linker-for-aarch64.patch \
>>   "
>>   SRC_URI[md5sum] = "fddf71348546af523353bd43d34919c1"
>>   SRC_URI[sha256sum] = "d334781a124ada6f38e63b545e2a3b8c2183049515a1abab6d513f109f1d717e"
>> diff --git a/meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch b/meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch
>> new file mode 100644
>> index 0000000..6933e2f
>> --- /dev/null
>> +++ b/meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch
>> @@ -0,0 +1,34 @@
>> +From 8fbb60d89e569b68b13e4fd419e20640eb49cabc Mon Sep 17 00:00:00 2001
>> +From: Kai Kang <kai.kang@windriver.com>
>> +Date: Tue, 16 Sep 2014 16:01:31 +0800
>> +Subject: [PATCH] Redefine dynamic linker for aarch64
>> +
>> +Redefine dynamic linker for aarch64 from /lib to /lib64.
>> +
>> +BASELIB of aarch64 has to be defined with 'lib64', then linker file
>> +ld-linux-aarch64.so.1 is installed into /lib64 rather than /lib. So
>> +update it here too.
>> +
>> +Upstream-Status: Pending
>> +
>> +Signed-off-by: Kai Kang <kai.kang@windriver.com>
>> +---
>> + gcc/config/aarch64/aarch64-linux.h | 2 +-
>> + 1 file changed, 1 insertion(+), 1 deletion(-)
>> +
>> +diff --git a/gcc/config/aarch64/aarch64-linux.h b/gcc/config/aarch64/aarch64-linux.h
>> +index a8f0771..2a6f06d 100644
>> +--- a/gcc/config/aarch64/aarch64-linux.h
>> ++++ b/gcc/config/aarch64/aarch64-linux.h
>> +@@ -21,7 +21,7 @@
>> + #ifndef GCC_AARCH64_LINUX_H
>> + #define GCC_AARCH64_LINUX_H
>> +
>> +-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-aarch64%{mbig-endian:_be}.so.1"
>> ++#define GLIBC_DYNAMIC_LINKER "/lib64/ld-linux-aarch64%{mbig-endian:_be}.so.1"
>> +
>> + #define CPP_SPEC "%{pthread:-D_REENTRANT}"
>> +
>> +--
>> +1.9.1
>> +
>>
> - -- 
> - -Khem
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG/MacGPG2 v2.0.22 (Darwin)
> Comment: GPGTools - https://gpgtools.org
>
> iEYEARECAAYFAlQah2UACgkQuwUzVZGdMxT98wCghPbcAP/2xFgFn9Lv3Wisexa6
> kHkAni6hykOqPq44VheOimbMbcimHaZD
> =jpy6
> -----END PGP SIGNATURE-----


-- 
Regards,
Neil | Kai Kang



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 9/9] perf: disable libunwind support for aarch64
  2014-09-18  7:07   ` Khem Raj
@ 2014-09-18  9:38     ` Kang Kai
  0 siblings, 0 replies; 23+ messages in thread
From: Kang Kai @ 2014-09-18  9:38 UTC (permalink / raw)
  To: Khem Raj, openembedded-core

On 2014年09月18日 15:07, Khem Raj wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
>
>
> On 9/16/14 8:06 AM, Kai Kang wrote:
>> Disable libunwind support of perl for aarch aarch64 that libunwind
>> doesn't support aarch64.
>>
>> Signed-off-by: Kai Kang <kai.kang@windriver.com>
>> ---
>>   meta/recipes-kernel/perf/perf-features.inc | 1 +
>>   1 file changed, 1 insertion(+)
>>
>> diff --git a/meta/recipes-kernel/perf/perf-features.inc b/meta/recipes-kernel/perf/perf-features.inc
>> index 2dbbb47..1782ae6 100644
>> --- a/meta/recipes-kernel/perf/perf-features.inc
>> +++ b/meta/recipes-kernel/perf/perf-features.inc
>> @@ -1,4 +1,5 @@
>>   PERF_FEATURES_ENABLE ?= "perf-scripting perf-tui perf-libunwind"
>> +PERF_FEATURES_ENABLE_aarch64 ?= "perf-scripting perf-tui"
>>   
> you could also say PERF_FEATURES_ENABLE_remove_aarch64 = "perf-libunwind"

Thanks. I'll try it.

--Kai

>
>>   def perf_feature_enabled(feature, trueval, falseval, d):
>>       """
>>
> - -- 
> - -Khem
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG/MacGPG2 v2.0.22 (Darwin)
> Comment: GPGTools - https://gpgtools.org
>
> iEYEARECAAYFAlQahLUACgkQuwUzVZGdMxRUTgCbB9mselfaJ3OdHJTFnZp34n15
> OacAni2H6G+Mri1zW7+W5OCHBbgzfE5L
> =lgJC
> -----END PGP SIGNATURE-----


-- 
Regards,
Neil | Kai Kang



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 0/9] V2: Add machine qemuaarch64
  2014-09-17 15:11 ` Burton, Ross
@ 2014-09-18  9:40   ` Kang Kai
  0 siblings, 0 replies; 23+ messages in thread
From: Kang Kai @ 2014-09-18  9:40 UTC (permalink / raw)
  To: Burton, Ross; +Cc: OE-core, Joe Slater

On 2014年09月17日 23:11, Burton, Ross wrote:
> On 16 September 2014 16:06, Kai Kang <kai.kang@windriver.com> wrote:
>> V2:
>> * fix kernel linux-yocto build faiure
>> * redefine position of dynamic linker from /lib to /lib64
>> * other fixes of userspace packages
>>
>> Test with Joe Slater's patches:
>> * siteinfo: account for 32 and 64 bit arm
>> * sysprof: add aarch64 support
> So aarch64 support really needs qemuarm64 in oe-core to be tested, and
> qemuarm64 is a new feature, and we froze for new features two weeks
> ago.  Blindly merging aarch64 patches that we can't currently test
> doesn't seem sensible.
>
> Could someone who is actually testing and working on the aarch64
> support (you?) manage a single branch that tracks master, so when 1.7
> branches off we can do a merge straight away.

OK. We will continue to work on arch aarch64 and do runtime tests.

--Kai

>
> Ross
>
>


-- 
Regards,
Neil | Kai Kang



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 3/9] gcc-4.9: redefine dynamic linker for aarch64
  2014-09-18  7:19   ` Khem Raj
  2014-09-18  9:37     ` Kang Kai
@ 2014-09-18 13:58     ` Mark Hatle
  2014-09-18 14:13       ` Mark Hatle
  1 sibling, 1 reply; 23+ messages in thread
From: Mark Hatle @ 2014-09-18 13:58 UTC (permalink / raw)
  To: openembedded-core

On 9/18/14, 2:19 AM, Khem Raj wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
>
>
> On 9/16/14 8:06 AM, Kai Kang wrote:
>> Redefine dynamic linker for aarch64 from /lib to /lib64.
>>
>> BASELIB of aarch64 has to be defined with 'lib64', then linker file
>> ld-linux-aarch64.so.1 is installed into /lib64 rather than /lib. So
>> update it here too.
>
> hmmm since the ldso name is different it can still live in /lib
> and there will be ilp32 version ldso multilib as well later. can we keep
> ldso in /lib ?

I thought the upstream definition (managed by ARM Ltd, and Linaro) for the ld.so 
had changed a few months back so that /lib64 was the 'standard' location for the 
ldso.  Perhaps I'm mistaken?

--Mark

>>
>> Signed-off-by: Kai Kang <kai.kang@windriver.com>
>> ---
>>   meta/recipes-devtools/gcc/gcc-4.9.inc              |  1 +
>>   .../0056-redefine-dynamic-linker-for-aarch64.patch | 34 ++++++++++++++++++++++
>>   2 files changed, 35 insertions(+)
>>   create mode 100644 meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch
>>
>> diff --git a/meta/recipes-devtools/gcc/gcc-4.9.inc b/meta/recipes-devtools/gcc/gcc-4.9.inc
>> index 25778bd..c434a45 100644
>> --- a/meta/recipes-devtools/gcc/gcc-4.9.inc
>> +++ b/meta/recipes-devtools/gcc/gcc-4.9.inc
>> @@ -70,6 +70,7 @@ SRC_URI = "\
>>       file://0053-gcc-fix-segfault-from-calling-free-on-non-malloc-d-a.patch \
>>       file://0054-gcc-Makefile.in-fix-parallel-building-failure.patch \
>>       file://0055-PR-rtl-optimization-61801.patch \
>> +    file://0056-redefine-dynamic-linker-for-aarch64.patch \
>>   "
>>   SRC_URI[md5sum] = "fddf71348546af523353bd43d34919c1"
>>   SRC_URI[sha256sum] = "d334781a124ada6f38e63b545e2a3b8c2183049515a1abab6d513f109f1d717e"
>> diff --git a/meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch b/meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch
>> new file mode 100644
>> index 0000000..6933e2f
>> --- /dev/null
>> +++ b/meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch
>> @@ -0,0 +1,34 @@
>> +From 8fbb60d89e569b68b13e4fd419e20640eb49cabc Mon Sep 17 00:00:00 2001
>> +From: Kai Kang <kai.kang@windriver.com>
>> +Date: Tue, 16 Sep 2014 16:01:31 +0800
>> +Subject: [PATCH] Redefine dynamic linker for aarch64
>> +
>> +Redefine dynamic linker for aarch64 from /lib to /lib64.
>> +
>> +BASELIB of aarch64 has to be defined with 'lib64', then linker file
>> +ld-linux-aarch64.so.1 is installed into /lib64 rather than /lib. So
>> +update it here too.
>> +
>> +Upstream-Status: Pending
>> +
>> +Signed-off-by: Kai Kang <kai.kang@windriver.com>
>> +---
>> + gcc/config/aarch64/aarch64-linux.h | 2 +-
>> + 1 file changed, 1 insertion(+), 1 deletion(-)
>> +
>> +diff --git a/gcc/config/aarch64/aarch64-linux.h b/gcc/config/aarch64/aarch64-linux.h
>> +index a8f0771..2a6f06d 100644
>> +--- a/gcc/config/aarch64/aarch64-linux.h
>> ++++ b/gcc/config/aarch64/aarch64-linux.h
>> +@@ -21,7 +21,7 @@
>> + #ifndef GCC_AARCH64_LINUX_H
>> + #define GCC_AARCH64_LINUX_H
>> +
>> +-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-aarch64%{mbig-endian:_be}.so.1"
>> ++#define GLIBC_DYNAMIC_LINKER "/lib64/ld-linux-aarch64%{mbig-endian:_be}.so.1"
>> +
>> + #define CPP_SPEC "%{pthread:-D_REENTRANT}"
>> +
>> +--
>> +1.9.1
>> +
>>
>
> - --
> - -Khem
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG/MacGPG2 v2.0.22 (Darwin)
> Comment: GPGTools - https://gpgtools.org
>
> iEYEARECAAYFAlQah2UACgkQuwUzVZGdMxT98wCghPbcAP/2xFgFn9Lv3Wisexa6
> kHkAni6hykOqPq44VheOimbMbcimHaZD
> =jpy6
> -----END PGP SIGNATURE-----
>



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 3/9] gcc-4.9: redefine dynamic linker for aarch64
  2014-09-18 13:58     ` Mark Hatle
@ 2014-09-18 14:13       ` Mark Hatle
  2014-09-19  6:17         ` Kang Kai
  0 siblings, 1 reply; 23+ messages in thread
From: Mark Hatle @ 2014-09-18 14:13 UTC (permalink / raw)
  To: openembedded-core

On 9/18/14, 8:58 AM, Mark Hatle wrote:
> On 9/18/14, 2:19 AM, Khem Raj wrote:
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>>
>>
>> On 9/16/14 8:06 AM, Kai Kang wrote:
>>> Redefine dynamic linker for aarch64 from /lib to /lib64.
>>>
>>> BASELIB of aarch64 has to be defined with 'lib64', then linker file
>>> ld-linux-aarch64.so.1 is installed into /lib64 rather than /lib. So
>>> update it here too.
>>
>> hmmm since the ldso name is different it can still live in /lib
>> and there will be ilp32 version ldso multilib as well later. can we keep
>> ldso in /lib ?
>
> I thought the upstream definition (managed by ARM Ltd, and Linaro) for the ld.so
> had changed a few months back so that /lib64 was the 'standard' location for the
> ldso.  Perhaps I'm mistaken?

I did some research and I'm confused.. aarch64 is screwed up by consensus 
apparently..

Dynamic libraries live in /lib64, and the dynamic linker in /lib.. Whee!

So ya, this patch isn't correct.. the dynamic linker needs to stay in /lib. 
(Nothing says you can't sym/hardlink to lib64.. but it has to refer to in in 
/lib for the ABI conformance.)

--Mark

> --Mark
>
>>>
>>> Signed-off-by: Kai Kang <kai.kang@windriver.com>
>>> ---
>>>    meta/recipes-devtools/gcc/gcc-4.9.inc              |  1 +
>>>    .../0056-redefine-dynamic-linker-for-aarch64.patch | 34 ++++++++++++++++++++++
>>>    2 files changed, 35 insertions(+)
>>>    create mode 100644 meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch
>>>
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.9.inc b/meta/recipes-devtools/gcc/gcc-4.9.inc
>>> index 25778bd..c434a45 100644
>>> --- a/meta/recipes-devtools/gcc/gcc-4.9.inc
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.9.inc
>>> @@ -70,6 +70,7 @@ SRC_URI = "\
>>>        file://0053-gcc-fix-segfault-from-calling-free-on-non-malloc-d-a.patch \
>>>        file://0054-gcc-Makefile.in-fix-parallel-building-failure.patch \
>>>        file://0055-PR-rtl-optimization-61801.patch \
>>> +    file://0056-redefine-dynamic-linker-for-aarch64.patch \
>>>    "
>>>    SRC_URI[md5sum] = "fddf71348546af523353bd43d34919c1"
>>>    SRC_URI[sha256sum] = "d334781a124ada6f38e63b545e2a3b8c2183049515a1abab6d513f109f1d717e"
>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch b/meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch
>>> new file mode 100644
>>> index 0000000..6933e2f
>>> --- /dev/null
>>> +++ b/meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch
>>> @@ -0,0 +1,34 @@
>>> +From 8fbb60d89e569b68b13e4fd419e20640eb49cabc Mon Sep 17 00:00:00 2001
>>> +From: Kai Kang <kai.kang@windriver.com>
>>> +Date: Tue, 16 Sep 2014 16:01:31 +0800
>>> +Subject: [PATCH] Redefine dynamic linker for aarch64
>>> +
>>> +Redefine dynamic linker for aarch64 from /lib to /lib64.
>>> +
>>> +BASELIB of aarch64 has to be defined with 'lib64', then linker file
>>> +ld-linux-aarch64.so.1 is installed into /lib64 rather than /lib. So
>>> +update it here too.
>>> +
>>> +Upstream-Status: Pending
>>> +
>>> +Signed-off-by: Kai Kang <kai.kang@windriver.com>
>>> +---
>>> + gcc/config/aarch64/aarch64-linux.h | 2 +-
>>> + 1 file changed, 1 insertion(+), 1 deletion(-)
>>> +
>>> +diff --git a/gcc/config/aarch64/aarch64-linux.h b/gcc/config/aarch64/aarch64-linux.h
>>> +index a8f0771..2a6f06d 100644
>>> +--- a/gcc/config/aarch64/aarch64-linux.h
>>> ++++ b/gcc/config/aarch64/aarch64-linux.h
>>> +@@ -21,7 +21,7 @@
>>> + #ifndef GCC_AARCH64_LINUX_H
>>> + #define GCC_AARCH64_LINUX_H
>>> +
>>> +-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-aarch64%{mbig-endian:_be}.so.1"
>>> ++#define GLIBC_DYNAMIC_LINKER "/lib64/ld-linux-aarch64%{mbig-endian:_be}.so.1"
>>> +
>>> + #define CPP_SPEC "%{pthread:-D_REENTRANT}"
>>> +
>>> +--
>>> +1.9.1
>>> +
>>>
>>
>> - --
>> - -Khem
>> -----BEGIN PGP SIGNATURE-----
>> Version: GnuPG/MacGPG2 v2.0.22 (Darwin)
>> Comment: GPGTools - https://gpgtools.org
>>
>> iEYEARECAAYFAlQah2UACgkQuwUzVZGdMxT98wCghPbcAP/2xFgFn9Lv3Wisexa6
>> kHkAni6hykOqPq44VheOimbMbcimHaZD
>> =jpy6
>> -----END PGP SIGNATURE-----
>>
>



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 3/9] gcc-4.9: redefine dynamic linker for aarch64
  2014-09-18 14:13       ` Mark Hatle
@ 2014-09-19  6:17         ` Kang Kai
  2014-09-20  5:06           ` Mark Hatle
  0 siblings, 1 reply; 23+ messages in thread
From: Kang Kai @ 2014-09-19  6:17 UTC (permalink / raw)
  To: Mark Hatle, openembedded-core

On 2014年09月18日 22:13, Mark Hatle wrote:
> On 9/18/14, 8:58 AM, Mark Hatle wrote:
>> On 9/18/14, 2:19 AM, Khem Raj wrote:
>>> -----BEGIN PGP SIGNED MESSAGE-----
>>> Hash: SHA1
>>>
>>>
>>>
>>> On 9/16/14 8:06 AM, Kai Kang wrote:
>>>> Redefine dynamic linker for aarch64 from /lib to /lib64.
>>>>
>>>> BASELIB of aarch64 has to be defined with 'lib64', then linker file
>>>> ld-linux-aarch64.so.1 is installed into /lib64 rather than /lib. So
>>>> update it here too.
>>>
>>> hmmm since the ldso name is different it can still live in /lib
>>> and there will be ilp32 version ldso multilib as well later. can we 
>>> keep
>>> ldso in /lib ?
>>
>> I thought the upstream definition (managed by ARM Ltd, and Linaro) 
>> for the ld.so
>> had changed a few months back so that /lib64 was the 'standard' 
>> location for the
>> ldso. Perhaps I'm mistaken?
>
> I did some research and I'm confused.. aarch64 is screwed up by 
> consensus apparently..
>
> Dynamic libraries live in /lib64, and the dynamic linker in /lib.. Whee!
>
> So ya, this patch isn't correct.. the dynamic linker needs to stay in 
> /lib. (Nothing says you can't sym/hardlink to lib64.. but it has to 
> refer to in in /lib for the ABI conformance.)

OK. Keep dynamic linker in /lib and change libraries directory from 
/lib64 to /lib.

--Kai

>
> --Mark
>
>> --Mark
>>
>>>>
>>>> Signed-off-by: Kai Kang <kai.kang@windriver.com>
>>>> ---
>>>> meta/recipes-devtools/gcc/gcc-4.9.inc | 1 +
>>>> .../0056-redefine-dynamic-linker-for-aarch64.patch | 34 
>>>> ++++++++++++++++++++++
>>>> 2 files changed, 35 insertions(+)
>>>> create mode 100644 
>>>> meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch
>>>>
>>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.9.inc 
>>>> b/meta/recipes-devtools/gcc/gcc-4.9.inc
>>>> index 25778bd..c434a45 100644
>>>> --- a/meta/recipes-devtools/gcc/gcc-4.9.inc
>>>> +++ b/meta/recipes-devtools/gcc/gcc-4.9.inc
>>>> @@ -70,6 +70,7 @@ SRC_URI = "\
>>>> file://0053-gcc-fix-segfault-from-calling-free-on-non-malloc-d-a.patch 
>>>> \
>>>> file://0054-gcc-Makefile.in-fix-parallel-building-failure.patch \
>>>> file://0055-PR-rtl-optimization-61801.patch \
>>>> + file://0056-redefine-dynamic-linker-for-aarch64.patch \
>>>> "
>>>> SRC_URI[md5sum] = "fddf71348546af523353bd43d34919c1"
>>>> SRC_URI[sha256sum] = 
>>>> "d334781a124ada6f38e63b545e2a3b8c2183049515a1abab6d513f109f1d717e"
>>>> diff --git 
>>>> a/meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch 
>>>> b/meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch 
>>>>
>>>> new file mode 100644
>>>> index 0000000..6933e2f
>>>> --- /dev/null
>>>> +++ 
>>>> b/meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch
>>>> @@ -0,0 +1,34 @@
>>>> +From 8fbb60d89e569b68b13e4fd419e20640eb49cabc Mon Sep 17 00:00:00 
>>>> 2001
>>>> +From: Kai Kang <kai.kang@windriver.com>
>>>> +Date: Tue, 16 Sep 2014 16:01:31 +0800
>>>> +Subject: [PATCH] Redefine dynamic linker for aarch64
>>>> +
>>>> +Redefine dynamic linker for aarch64 from /lib to /lib64.
>>>> +
>>>> +BASELIB of aarch64 has to be defined with 'lib64', then linker file
>>>> +ld-linux-aarch64.so.1 is installed into /lib64 rather than /lib. So
>>>> +update it here too.
>>>> +
>>>> +Upstream-Status: Pending
>>>> +
>>>> +Signed-off-by: Kai Kang <kai.kang@windriver.com>
>>>> +---
>>>> + gcc/config/aarch64/aarch64-linux.h | 2 +-
>>>> + 1 file changed, 1 insertion(+), 1 deletion(-)
>>>> +
>>>> +diff --git a/gcc/config/aarch64/aarch64-linux.h 
>>>> b/gcc/config/aarch64/aarch64-linux.h
>>>> +index a8f0771..2a6f06d 100644
>>>> +--- a/gcc/config/aarch64/aarch64-linux.h
>>>> ++++ b/gcc/config/aarch64/aarch64-linux.h
>>>> +@@ -21,7 +21,7 @@
>>>> + #ifndef GCC_AARCH64_LINUX_H
>>>> + #define GCC_AARCH64_LINUX_H
>>>> +
>>>> +-#define GLIBC_DYNAMIC_LINKER 
>>>> "/lib/ld-linux-aarch64%{mbig-endian:_be}.so.1"
>>>> ++#define GLIBC_DYNAMIC_LINKER 
>>>> "/lib64/ld-linux-aarch64%{mbig-endian:_be}.so.1"
>>>> +
>>>> + #define CPP_SPEC "%{pthread:-D_REENTRANT}"
>>>> +
>>>> +--
>>>> +1.9.1
>>>> +
>>>>
>>>
>>> - -- 
>>> - -Khem
>>> -----BEGIN PGP SIGNATURE-----
>>> Version: GnuPG/MacGPG2 v2.0.22 (Darwin)
>>> Comment: GPGTools - https://gpgtools.org
>>>
>>> iEYEARECAAYFAlQah2UACgkQuwUzVZGdMxT98wCghPbcAP/2xFgFn9Lv3Wisexa6
>>> kHkAni6hykOqPq44VheOimbMbcimHaZD
>>> =jpy6
>>> -----END PGP SIGNATURE-----
>>>
>>
>


-- 
Regards,
Neil | Kai Kang



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 3/9] gcc-4.9: redefine dynamic linker for aarch64
  2014-09-19  6:17         ` Kang Kai
@ 2014-09-20  5:06           ` Mark Hatle
  0 siblings, 0 replies; 23+ messages in thread
From: Mark Hatle @ 2014-09-20  5:06 UTC (permalink / raw)
  To: Kang Kai, openembedded-core

On 9/19/14, 1:17 AM, Kang Kai wrote:
> On 2014年09月18日 22:13, Mark Hatle wrote:
>> On 9/18/14, 8:58 AM, Mark Hatle wrote:
>>> On 9/18/14, 2:19 AM, Khem Raj wrote:
>>>> -----BEGIN PGP SIGNED MESSAGE-----
>>>> Hash: SHA1
>>>>
>>>>
>>>>
>>>> On 9/16/14 8:06 AM, Kai Kang wrote:
>>>>> Redefine dynamic linker for aarch64 from /lib to /lib64.
>>>>>
>>>>> BASELIB of aarch64 has to be defined with 'lib64', then linker file
>>>>> ld-linux-aarch64.so.1 is installed into /lib64 rather than /lib. So
>>>>> update it here too.
>>>>
>>>> hmmm since the ldso name is different it can still live in /lib
>>>> and there will be ilp32 version ldso multilib as well later. can we
>>>> keep
>>>> ldso in /lib ?
>>>
>>> I thought the upstream definition (managed by ARM Ltd, and Linaro)
>>> for the ld.so
>>> had changed a few months back so that /lib64 was the 'standard'
>>> location for the
>>> ldso. Perhaps I'm mistaken?
>>
>> I did some research and I'm confused.. aarch64 is screwed up by
>> consensus apparently..
>>
>> Dynamic libraries live in /lib64, and the dynamic linker in /lib.. Whee!
>>
>> So ya, this patch isn't correct.. the dynamic linker needs to stay in
>> /lib. (Nothing says you can't sym/hardlink to lib64.. but it has to
>> refer to in in /lib for the ABI conformance.)
>
> OK. Keep dynamic linker in /lib and change libraries directory from
> /lib64 to /lib.

The dynamic linker (ldso) goes into '/lib'.  The library directory is /lib or 
/lib64.  (/lib64 when multilib arm is enabled.)  It's a bit odd, but it means 
that the link inside of gcc must be hard coded to the default /lib/... path.

The shared libraries would be referenced in the same way they are in the other 
distributions where either lib, lib64 (or any alternative can be set in the OE 
code.)

--Mark

> --Kai
>
>>
>> --Mark
>>
>>> --Mark
>>>
>>>>>
>>>>> Signed-off-by: Kai Kang <kai.kang@windriver.com>
>>>>> ---
>>>>> meta/recipes-devtools/gcc/gcc-4.9.inc | 1 +
>>>>> .../0056-redefine-dynamic-linker-for-aarch64.patch | 34
>>>>> ++++++++++++++++++++++
>>>>> 2 files changed, 35 insertions(+)
>>>>> create mode 100644
>>>>> meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch
>>>>>
>>>>> diff --git a/meta/recipes-devtools/gcc/gcc-4.9.inc
>>>>> b/meta/recipes-devtools/gcc/gcc-4.9.inc
>>>>> index 25778bd..c434a45 100644
>>>>> --- a/meta/recipes-devtools/gcc/gcc-4.9.inc
>>>>> +++ b/meta/recipes-devtools/gcc/gcc-4.9.inc
>>>>> @@ -70,6 +70,7 @@ SRC_URI = "\
>>>>> file://0053-gcc-fix-segfault-from-calling-free-on-non-malloc-d-a.patch
>>>>> \
>>>>> file://0054-gcc-Makefile.in-fix-parallel-building-failure.patch \
>>>>> file://0055-PR-rtl-optimization-61801.patch \
>>>>> + file://0056-redefine-dynamic-linker-for-aarch64.patch \
>>>>> "
>>>>> SRC_URI[md5sum] = "fddf71348546af523353bd43d34919c1"
>>>>> SRC_URI[sha256sum] =
>>>>> "d334781a124ada6f38e63b545e2a3b8c2183049515a1abab6d513f109f1d717e"
>>>>> diff --git
>>>>> a/meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch
>>>>> b/meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch
>>>>>
>>>>> new file mode 100644
>>>>> index 0000000..6933e2f
>>>>> --- /dev/null
>>>>> +++
>>>>> b/meta/recipes-devtools/gcc/gcc-4.9/0056-redefine-dynamic-linker-for-aarch64.patch
>>>>> @@ -0,0 +1,34 @@
>>>>> +From 8fbb60d89e569b68b13e4fd419e20640eb49cabc Mon Sep 17 00:00:00
>>>>> 2001
>>>>> +From: Kai Kang <kai.kang@windriver.com>
>>>>> +Date: Tue, 16 Sep 2014 16:01:31 +0800
>>>>> +Subject: [PATCH] Redefine dynamic linker for aarch64
>>>>> +
>>>>> +Redefine dynamic linker for aarch64 from /lib to /lib64.
>>>>> +
>>>>> +BASELIB of aarch64 has to be defined with 'lib64', then linker file
>>>>> +ld-linux-aarch64.so.1 is installed into /lib64 rather than /lib. So
>>>>> +update it here too.
>>>>> +
>>>>> +Upstream-Status: Pending
>>>>> +
>>>>> +Signed-off-by: Kai Kang <kai.kang@windriver.com>
>>>>> +---
>>>>> + gcc/config/aarch64/aarch64-linux.h | 2 +-
>>>>> + 1 file changed, 1 insertion(+), 1 deletion(-)
>>>>> +
>>>>> +diff --git a/gcc/config/aarch64/aarch64-linux.h
>>>>> b/gcc/config/aarch64/aarch64-linux.h
>>>>> +index a8f0771..2a6f06d 100644
>>>>> +--- a/gcc/config/aarch64/aarch64-linux.h
>>>>> ++++ b/gcc/config/aarch64/aarch64-linux.h
>>>>> +@@ -21,7 +21,7 @@
>>>>> + #ifndef GCC_AARCH64_LINUX_H
>>>>> + #define GCC_AARCH64_LINUX_H
>>>>> +
>>>>> +-#define GLIBC_DYNAMIC_LINKER
>>>>> "/lib/ld-linux-aarch64%{mbig-endian:_be}.so.1"
>>>>> ++#define GLIBC_DYNAMIC_LINKER
>>>>> "/lib64/ld-linux-aarch64%{mbig-endian:_be}.so.1"
>>>>> +
>>>>> + #define CPP_SPEC "%{pthread:-D_REENTRANT}"
>>>>> +
>>>>> +--
>>>>> +1.9.1
>>>>> +
>>>>>
>>>>
>>>> - --
>>>> - -Khem
>>>> -----BEGIN PGP SIGNATURE-----
>>>> Version: GnuPG/MacGPG2 v2.0.22 (Darwin)
>>>> Comment: GPGTools - https://gpgtools.org
>>>>
>>>> iEYEARECAAYFAlQah2UACgkQuwUzVZGdMxT98wCghPbcAP/2xFgFn9Lv3Wisexa6
>>>> kHkAni6hykOqPq44VheOimbMbcimHaZD
>>>> =jpy6
>>>> -----END PGP SIGNATURE-----
>>>>
>>>
>>
>
>



^ permalink raw reply	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2014-09-20  5:06 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-09-16 15:06 [PATCH 0/9] V2: Add machine qemuaarch64 Kai Kang
2014-09-16 15:06 ` [PATCH 1/9] linux-yocto: depend on libgcc for aarch64 Kai Kang
2014-09-18  6:56   ` Khem Raj
2014-09-18  9:27     ` Kang Kai
2014-09-16 15:06 ` [PATCH 2/9] Add machine qemuarm64 Kai Kang
2014-09-16 15:06 ` [PATCH 3/9] gcc-4.9: redefine dynamic linker for aarch64 Kai Kang
2014-09-18  7:19   ` Khem Raj
2014-09-18  9:37     ` Kang Kai
2014-09-18 13:58     ` Mark Hatle
2014-09-18 14:13       ` Mark Hatle
2014-09-19  6:17         ` Kang Kai
2014-09-20  5:06           ` Mark Hatle
2014-09-16 15:06 ` [PATCH 4/9] libatomics-ops: add aarch64 target iniitial support Kai Kang
2014-09-16 15:06 ` [PATCH 5/9] qt4-native: add aarch64 support Kai Kang
2014-09-16 15:06 ` [PATCH 6/9] qt4: " Kai Kang
2014-09-16 15:06 ` [PATCH 7/9] qt4-embedded: disable webkit Kai Kang
2014-09-16 15:06 ` [PATCH 8/9] libpng: add neon option for aarch64 Kai Kang
2014-09-16 15:06 ` [PATCH 9/9] perf: disable libunwind support " Kai Kang
2014-09-18  7:07   ` Khem Raj
2014-09-18  9:38     ` Kang Kai
2014-09-17  9:13 ` [PATCH 0/9] V2: Add machine qemuaarch64 Kang Kai
2014-09-17 15:11 ` Burton, Ross
2014-09-18  9:40   ` Kang Kai

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.