* [Buildroot] [PATCH v2] uclibc: ARC: Support syscall ABI v4
@ 2016-08-18 5:52 Vlad Zakharov
2016-08-18 22:10 ` Thomas Petazzoni
0 siblings, 1 reply; 4+ messages in thread
From: Vlad Zakharov @ 2016-08-18 5:52 UTC (permalink / raw)
To: buildroot
When used with GCC 6 ABIv4 is used.
Missing this patch leads to numerous runtime errors.
The patch has already been accepted in uclibc-ng:
http://cgit.uclibc-ng.org/cgi/cgit/uclibc-ng.git/commit/?id=3e40f9669279f005f7154892539166f5081fbcb2
So the patch should be removed after update to a new version of uclibc-ng.
Signed-off-by: Vlad Zakharov <vzakhar@synopsys.com>
---
Changes v1-v2:
Added commit message and signed-off-by to the attached patch.
.../uclibc/0003-ARC-Support-syscall-ABI-v4.patch | 54 ++++++++++++++++++++++
1 file changed, 54 insertions(+)
create mode 100644 package/uclibc/0003-ARC-Support-syscall-ABI-v4.patch
diff --git a/package/uclibc/0003-ARC-Support-syscall-ABI-v4.patch b/package/uclibc/0003-ARC-Support-syscall-ABI-v4.patch
new file mode 100644
index 0000000..f0a5ae7
--- /dev/null
+++ b/package/uclibc/0003-ARC-Support-syscall-ABI-v4.patch
@@ -0,0 +1,54 @@
+From 3e40f9669279f005f7154892539166f5081fbcb2 Mon Sep 17 00:00:00 2001
+From: Vineet Gupta <Vineet.Gupta1@synopsys.com>
+Date: Tue, 16 Aug 2016 15:04:27 -0700
+Subject: [PATCH] ARC: Support syscall ABI v4
+
+The syscall ABI includes the gcc functional calling ABI since a syscall
+implies userland caller and kernel callee.
+
+The current gcc ABI (v3) for ARCv2 ISA required 64-bit data be passed in
+even-odd register pairs, (potentially punching reg holes when passing such
+values as args). This was partly driven by the fact that the double-word
+LDD/STD instructions in ARCv2 expect the register alignment and thus gcc
+forcing this avoids extra MOV at the cost of a few unused register (which we
+have plenty anyways).
+
+This however was rejected as part of upstreaming gcc port to HS. So the new
+ABI v4 doesn't enforce the even-odd reg restriction.
+
+Do note that for ARCompact ISA builds v3 and v4 are practically the same in
+terms of gcc code generation.
+
+This change is dormant for now (gcc 4.8.x based tools) and will only kick
+in with switch to gcc 6.x based tools.
+
+Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
+---
+ libc/sysdeps/linux/arc/bits/uClibc_arch_features.h | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/libc/sysdeps/linux/arc/bits/uClibc_arch_features.h b/libc/sysdeps/linux/arc/bits/uClibc_arch_features.h
+index 5160724..94e089d 100755
+--- a/libc/sysdeps/linux/arc/bits/uClibc_arch_features.h
++++ b/libc/sysdeps/linux/arc/bits/uClibc_arch_features.h
+@@ -41,8 +41,14 @@
+ /* The default ';' is a comment on ARC. */
+ #define __UCLIBC_ASM_LINE_SEP__ `
+
+-/* does your target align 64bit values in register pairs ? (32bit arches only) */
+-#if defined(__A7__)
++/* does your target align 64bit values in register pairs ? (32bit arches only)
++ * - ARC700 never had any constraint on reg pairs (even if ABI v3)
++ * - Inital HS ABI (v3: non upstream gcc) had 64-bit data aligned in even-odd
++ * reg pairs (thus allowed reg holes when passing such args to calls)
++ * - Upstream gcc (6.x) HS ABI doesn't have that restriction
++ */
++
++#if defined(__A7__) || (__GNUC__ > 4)
+ #undef __UCLIBC_SYSCALL_ALIGN_64BIT__
+ #else
+ #define __UCLIBC_SYSCALL_ALIGN_64BIT__
+--
+2.5.5
+
--
2.5.5
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [Buildroot] [PATCH v2] uclibc: ARC: Support syscall ABI v4
2016-08-18 5:52 [Buildroot] [PATCH v2] uclibc: ARC: Support syscall ABI v4 Vlad Zakharov
@ 2016-08-18 22:10 ` Thomas Petazzoni
2016-08-19 7:40 ` Vlad Zakharov
0 siblings, 1 reply; 4+ messages in thread
From: Thomas Petazzoni @ 2016-08-18 22:10 UTC (permalink / raw)
To: buildroot
Hello,
On Thu, 18 Aug 2016 08:52:33 +0300, Vlad Zakharov wrote:
> When used with GCC 6 ABIv4 is used.
> Missing this patch leads to numerous runtime errors.
>
> The patch has already been accepted in uclibc-ng:
> http://cgit.uclibc-ng.org/cgi/cgit/uclibc-ng.git/commit/?id=3e40f9669279f005f7154892539166f5081fbcb2
>
> So the patch should be removed after update to a new version of uclibc-ng.
>
> Signed-off-by: Vlad Zakharov <vzakhar@synopsys.com>
> ---
> Changes v1-v2:
> Added commit message and signed-off-by to the attached patch.
For some reason, your patch did not apply:
thomas at skate:~/projets/buildroot (master)$ git pwam 660333
Applying patch #660333 using 'git am -s -3'
Description: [v2] uclibc: ARC: Support syscall ABI v4
Applying: uclibc: ARC: Support syscall ABI v4
fatal: corrupt patch at line 69
error: could not build fake ancestor
Patch failed at 0001 uclibc: ARC: Support syscall ABI v4
The copy of the patch that failed is found in: .git/rebase-apply/patch
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
ethomas at skate:~/projets/buildroot (master|AM 1/1)$ cat .git/rebase-apply/patch | patch -p1
patching file package/uclibc/0003-ARC-Support-syscall-ABI-v4.patch
patch: **** malformed patch at line 68: --
So I simply re-created it from the uClibc-ng Git repository, and
applied to master. Thanks!
Thomas
--
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Buildroot] [PATCH v2] uclibc: ARC: Support syscall ABI v4
2016-08-18 22:10 ` Thomas Petazzoni
@ 2016-08-19 7:40 ` Vlad Zakharov
2016-08-19 7:46 ` Vlad Zakharov
0 siblings, 1 reply; 4+ messages in thread
From: Vlad Zakharov @ 2016-08-19 7:40 UTC (permalink / raw)
To: buildroot
Hi Thomas,?
Seems like the patch has been already applied:
https://git.buildroot.net/buildroot/commit/?id=9914215d8992b66bf7ccedf0befb31581955fae5
--
Best regards,
Vlad Zakharov <vzakhar@synopsys.com>
On Fri, 2016-08-19 at 00:10 +0200, Thomas Petazzoni wrote:
> Hello,
>
> On Thu, 18 Aug 2016 08:52:33 +0300, Vlad Zakharov wrote:
> >
> > When used with GCC 6 ABIv4 is used.
> > Missing this patch leads to numerous runtime errors.
> >
> > The patch has already been accepted in uclibc-ng:
> > http://cgit.uclibc-ng.org/cgi/cgit/uclibc-ng.git/commit/?id=3e40f9669279f005f7154892539166f5081fbcb2
> >
> > So the patch should be removed after update to a new version of uclibc-ng.
> >
> > Signed-off-by: Vlad Zakharov <vzakhar@synopsys.com>
> > ---
> > Changes v1-v2:
> > ?Added commit message and signed-off-by to the attached patch.
> For some reason, your patch did not apply:
>
> thomas at skate:~/projets/buildroot (master)$ git pwam 660333
> Applying patch #660333 using 'git am -s -3'
> Description: [v2] uclibc: ARC: Support syscall ABI v4
> Applying: uclibc: ARC: Support syscall ABI v4
> fatal: corrupt patch at line 69
> error: could not build fake ancestor
> Patch failed at 0001 uclibc: ARC: Support syscall ABI v4
> The copy of the patch that failed is found in: .git/rebase-apply/patch
> When you have resolved this problem, run "git am --continue".
> If you prefer to skip this patch, run "git am --skip" instead.
> To restore the original branch and stop patching, run "git am --abort".
> ethomas at skate:~/projets/buildroot (master|AM 1/1)$ cat .git/rebase-apply/patch | patch -p1
> patching file package/uclibc/0003-ARC-Support-syscall-ABI-v4.patch
> patch: **** malformed patch at line 68: --?
>
> So I simply re-created it from the uClibc-ng Git repository, and
> applied to master. Thanks!
>
> Thomas
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2016-08-19 7:46 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-08-18 5:52 [Buildroot] [PATCH v2] uclibc: ARC: Support syscall ABI v4 Vlad Zakharov
2016-08-18 22:10 ` Thomas Petazzoni
2016-08-19 7:40 ` Vlad Zakharov
2016-08-19 7:46 ` Vlad Zakharov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox