[v2,5/9] libgpg-error: Add ARC support

Message ID 20180920204232.10583-6-abrodkin@synopsys.com
State New
Headers show
Series
  • Introduce ARC port of OpenEmbedded
Related show

Commit Message

Alexey Brodkin Sept. 20, 2018, 8:42 p.m.
Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
---

Changes v1 -> v2:

 * Added upstream status

 ...port-ARC-CPUs-and-simplify-aliasing-table.patch | 298 +++++++++++++++++++++
 .../libgpg-error/libgpg-error_1.32.bb              |   2 +
 2 files changed, 300 insertions(+)
 create mode 100644 meta/recipes-support/libgpg-error/libgpg-error/0001-syscfg-Support-ARC-CPUs-and-simplify-aliasing-table.patch

Comments

Burton, Ross Sept. 21, 2018, 10:43 a.m. | #1
On Thu, 20 Sep 2018 at 21:44, Alexey Brodkin
<Alexey.Brodkin@synopsys.com> wrote:

>         case ${TARGET_ARCH} in
>           aarch64_be) TUPLE=aarch64-unknown-linux-gnu ;;
> +         arc)        TUPLE=i686-unknown-linux-gnu ;;
>           arm)        TUPLE=arm-unknown-linux-gnueabi ;;
>           armeb)      TUPLE=arm-unknown-linux-gnueabi ;;
>           i586|i686)  TUPLE=i686-pc-linux-gnu ;;

Is that right?  Just saying, it looks wrong...

Ross
Alexey Brodkin Sept. 21, 2018, 11:31 a.m. | #2
Hi Ross,

On Fri, 2018-09-21 at 11:43 +0100, Burton, Ross wrote:
> On Thu, 20 Sep 2018 at 21:44, Alexey Brodkin
> <Alexey.Brodkin@synopsys.com> wrote:
> 
> >         case ${TARGET_ARCH} in
> >           aarch64_be) TUPLE=aarch64-unknown-linux-gnu ;;
> > +         arc)        TUPLE=i686-unknown-linux-gnu ;;
> >           arm)        TUPLE=arm-unknown-linux-gnueabi ;;
> >           armeb)      TUPLE=arm-unknown-linux-gnueabi ;;
> >           i586|i686)  TUPLE=i686-pc-linux-gnu ;;
> 
> Is that right?  Just saying, it looks wrong...

That's indeed a hack :)

libgpg-error [upstream] patch mentioned in this commit
adds support of ARC architecture as an alias to "i686-unknown-linux-gnu"
(that's because headers are the same).

But since I provided generate headers only for arc-xxx-linux-uclibc
(and there's no guarantee glibc header matches uclibc) Werner only
added support for uClibc.

That said if we were building uClibc toolchain in OE then no mapping
would be required at all but for Glibc toolchain we still need to
use explicit header for ARC and the one that matches our needs is
essentially "ock-obj-pub.i686-unknown-linux-gnu.h", see
https://lists.gt.net/gnupg/devel/84636#84636

-Alexey
Alexey Brodkin Sept. 21, 2018, 12:51 p.m. | #3
Hi Ross,

On Fri, 2018-09-21 at 14:31 +0300, Alexey Brodkin wrote:
> Hi Ross,
> 
> On Fri, 2018-09-21 at 11:43 +0100, Burton, Ross wrote:
> > On Thu, 20 Sep 2018 at 21:44, Alexey Brodkin
> > <Alexey.Brodkin@synopsys.com> wrote:
> > 
> > >         case ${TARGET_ARCH} in
> > >           aarch64_be) TUPLE=aarch64-unknown-linux-gnu ;;
> > > +         arc)        TUPLE=i686-unknown-linux-gnu ;;
> > >           arm)        TUPLE=arm-unknown-linux-gnueabi ;;
> > >           armeb)      TUPLE=arm-unknown-linux-gnueabi ;;
> > >           i586|i686)  TUPLE=i686-pc-linux-gnu ;;
> > 
> > Is that right?  Just saying, it looks wrong...
> 
> That's indeed a hack :)
> 
> libgpg-error [upstream] patch mentioned in this commit
> adds support of ARC architecture as an alias to "i686-unknown-linux-gnu"
> (that's because headers are the same).
> 
> But since I provided generate headers only for arc-xxx-linux-uclibc
> (and there's no guarantee glibc header matches uclibc) Werner only
> added support for uClibc.
> 
> That said if we were building uClibc toolchain in OE then no mapping
> would be required at all but for Glibc toolchain we still need to
> use explicit header for ARC and the one that matches our needs is
> essentially "ock-obj-pub.i686-unknown-linux-gnu.h", see
> https://lists.gt.net/gnupg/devel/84636#84636

So this is fixed now in libgpg-error upstrema, see
http://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgpg-error.git;a=commit;h=f4f0da74f526d7e35cedbc2e93454df6440dbfa5

I'll send v3 soonish with that patch back-ported.

-Alexey
Burton, Ross Sept. 21, 2018, 12:53 p.m. | #4
Can you check that v3 works with x86-64 targets?

ERROR: libgpg-error-1.32-r0 do_compile: Function failed: do_compile
(log file is located at
/data/poky-tmp/master/work/corei7-64-poky-linux/libgpg-error/1.32-r0/temp/log.do_compile.13345)
ERROR: Logfile of failure stored in:
/data/poky-tmp/master/work/corei7-64-poky-linux/libgpg-error/1.32-r0/temp/log.do_compile.13345
Log data follows:
| DEBUG: SITE files ['endian-little', 'common-linux', 'common-glibc',
'bit-64', 'x86_64-linux', 'common']
| DEBUG: Executing shell function do_compile
| cp: cannot stat
'/data/poky-tmp/master/work/corei7-64-poky-linux/libgpg-error/1.32-r0/libgpg-error-1.32/src/syscfg/lock-obj-pub.x86_64-pc-linux-gnu.h':
No such file or directory
| WARNING: exit code 1 from a shell command.
| ERROR: Function failed: do_compile (log file is located at
/data/poky-tmp/master/work/corei7-64-poky-linux/libgpg-error/1.32-r0/temp/log.do_compile.13345)

Ross
On Fri, 21 Sep 2018 at 13:51, Alexey Brodkin
<Alexey.Brodkin@synopsys.com> wrote:
>
> Hi Ross,
>
> On Fri, 2018-09-21 at 14:31 +0300, Alexey Brodkin wrote:
> > Hi Ross,
> >
> > On Fri, 2018-09-21 at 11:43 +0100, Burton, Ross wrote:
> > > On Thu, 20 Sep 2018 at 21:44, Alexey Brodkin
> > > <Alexey.Brodkin@synopsys.com> wrote:
> > >
> > > >         case ${TARGET_ARCH} in
> > > >           aarch64_be) TUPLE=aarch64-unknown-linux-gnu ;;
> > > > +         arc)        TUPLE=i686-unknown-linux-gnu ;;
> > > >           arm)        TUPLE=arm-unknown-linux-gnueabi ;;
> > > >           armeb)      TUPLE=arm-unknown-linux-gnueabi ;;
> > > >           i586|i686)  TUPLE=i686-pc-linux-gnu ;;
> > >
> > > Is that right?  Just saying, it looks wrong...
> >
> > That's indeed a hack :)
> >
> > libgpg-error [upstream] patch mentioned in this commit
> > adds support of ARC architecture as an alias to "i686-unknown-linux-gnu"
> > (that's because headers are the same).
> >
> > But since I provided generate headers only for arc-xxx-linux-uclibc
> > (and there's no guarantee glibc header matches uclibc) Werner only
> > added support for uClibc.
> >
> > That said if we were building uClibc toolchain in OE then no mapping
> > would be required at all but for Glibc toolchain we still need to
> > use explicit header for ARC and the one that matches our needs is
> > essentially "ock-obj-pub.i686-unknown-linux-gnu.h", see
> > https://lists.gt.net/gnupg/devel/84636#84636
>
> So this is fixed now in libgpg-error upstrema, see
> http://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgpg-error.git;a=commit;h=f4f0da74f526d7e35cedbc2e93454df6440dbfa5
>
> I'll send v3 soonish with that patch back-ported.
>
> -Alexey
Alexey Brodkin Sept. 21, 2018, 1:07 p.m. | #5
Hi Ross,

On Fri, 2018-09-21 at 13:53 +0100, Burton, Ross wrote:
> Can you check that v3 works with x86-64 targets?
> 
> ERROR: libgpg-error-1.32-r0 do_compile: Function failed: do_compile
> (log file is located at
> /data/poky-tmp/master/work/corei7-64-poky-linux/libgpg-error/1.32-r0/temp/log.do_compile.13345)
> ERROR: Logfile of failure stored in:
> /data/poky-tmp/master/work/corei7-64-poky-linux/libgpg-error/1.32-r0/temp/log.do_compile.13345
> Log data follows:
> > DEBUG: SITE files ['endian-little', 'common-linux', 'common-glibc',
> 
> 'bit-64', 'x86_64-linux', 'common']
> > DEBUG: Executing shell function do_compile
> > cp: cannot stat
> 
> '/data/poky-tmp/master/work/corei7-64-poky-linux/libgpg-error/1.32-r0/libgpg-error-1.32/src/syscfg/lock-obj-pub.x86_64-pc-linux-gnu.h':
> No such file or directory
> > WARNING: exit code 1 from a shell command.
> > ERROR: Function failed: do_compile (log file is located at
> 
> /data/poky-tmp/master/work/corei7-64-poky-linux/libgpg-error/1.32-r0/temp/log.do_compile.13345)

Yeah that's pretty unfortunate that "simple addition of ARC"
broke anther arch :(

What happened is in the same one commit that adds ARC quite a few
headers for other arches get renamed, see:
http://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgpg-error.git;a=commit;h=48c8f8ddfc80551db7615e1eb3555c1dc3f6a657

And "lock-obj-pub.x86_64-pc-linux-gnu.h" is one of them.
So I'll update libgpg-error_1.32.bb with:
-------------------------->8-----------------------
--- a/meta/recipes-support/libgpg-error/libgpg-error_1.32.bb
+++ b/meta/recipes-support/libgpg-error/libgpg-error_1.32.bb
@@ -44,7 +44,7 @@ do_compile_prepend() {
          mips64*)    TUPLE=mips64el-unknown-linux-gnuabi64 ;;
          mips*el)    TUPLE=mipsel-unknown-linux-gnu ;;
          mips*)      TUPLE=mips-unknown-linux-gnu ;;
-         x86_64)     TUPLE=x86_64-pc-linux-gnu ;;
+         x86_64)     TUPLE=x86_64-unknown-linux-gnu ;;
          *)          TUPLE=${TARGET_ARCH}-unknown-linux-gnu ;;
        esac
-------------------------->8-----------------------

Care to try that change in your setup once you have eveything else built for x86_64?

-Alexey
Burton, Ross Sept. 21, 2018, 1:20 p.m. | #6
Yes, that fixes it.

Ross
On Fri, 21 Sep 2018 at 14:08, Alexey Brodkin
<Alexey.Brodkin@synopsys.com> wrote:
>
> Hi Ross,
>
> On Fri, 2018-09-21 at 13:53 +0100, Burton, Ross wrote:
> > Can you check that v3 works with x86-64 targets?
> >
> > ERROR: libgpg-error-1.32-r0 do_compile: Function failed: do_compile
> > (log file is located at
> > /data/poky-tmp/master/work/corei7-64-poky-linux/libgpg-error/1.32-r0/temp/log.do_compile.13345)
> > ERROR: Logfile of failure stored in:
> > /data/poky-tmp/master/work/corei7-64-poky-linux/libgpg-error/1.32-r0/temp/log.do_compile.13345
> > Log data follows:
> > > DEBUG: SITE files ['endian-little', 'common-linux', 'common-glibc',
> >
> > 'bit-64', 'x86_64-linux', 'common']
> > > DEBUG: Executing shell function do_compile
> > > cp: cannot stat
> >
> > '/data/poky-tmp/master/work/corei7-64-poky-linux/libgpg-error/1.32-r0/libgpg-error-1.32/src/syscfg/lock-obj-pub.x86_64-pc-linux-gnu.h':
> > No such file or directory
> > > WARNING: exit code 1 from a shell command.
> > > ERROR: Function failed: do_compile (log file is located at
> >
> > /data/poky-tmp/master/work/corei7-64-poky-linux/libgpg-error/1.32-r0/temp/log.do_compile.13345)
>
> Yeah that's pretty unfortunate that "simple addition of ARC"
> broke anther arch :(
>
> What happened is in the same one commit that adds ARC quite a few
> headers for other arches get renamed, see:
> http://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgpg-error.git;a=commit;h=48c8f8ddfc80551db7615e1eb3555c1dc3f6a657
>
> And "lock-obj-pub.x86_64-pc-linux-gnu.h" is one of them.
> So I'll update libgpg-error_1.32.bb with:
> -------------------------->8-----------------------
> --- a/meta/recipes-support/libgpg-error/libgpg-error_1.32.bb
> +++ b/meta/recipes-support/libgpg-error/libgpg-error_1.32.bb
> @@ -44,7 +44,7 @@ do_compile_prepend() {
>           mips64*)    TUPLE=mips64el-unknown-linux-gnuabi64 ;;
>           mips*el)    TUPLE=mipsel-unknown-linux-gnu ;;
>           mips*)      TUPLE=mips-unknown-linux-gnu ;;
> -         x86_64)     TUPLE=x86_64-pc-linux-gnu ;;
> +         x86_64)     TUPLE=x86_64-unknown-linux-gnu ;;
>           *)          TUPLE=${TARGET_ARCH}-unknown-linux-gnu ;;
>         esac
> -------------------------->8-----------------------
>
> Care to try that change in your setup once you have eveything else built for x86_64?
>
> -Alexey

Patch

diff --git a/meta/recipes-support/libgpg-error/libgpg-error/0001-syscfg-Support-ARC-CPUs-and-simplify-aliasing-table.patch b/meta/recipes-support/libgpg-error/libgpg-error/0001-syscfg-Support-ARC-CPUs-and-simplify-aliasing-table.patch
new file mode 100644
index 0000000000..03b0ce77ed
--- /dev/null
+++ b/meta/recipes-support/libgpg-error/libgpg-error/0001-syscfg-Support-ARC-CPUs-and-simplify-aliasing-table.patch
@@ -0,0 +1,298 @@ 
+From d4fd6975671477721936060771aa4d7d07fb0910 Mon Sep 17 00:00:00 2001
+From: Werner Koch <wk@gnupg.org>
+Date: Tue, 18 Sep 2018 14:54:08 +0200
+Subject: [PATCH libgpg-error] syscfg: Support ARC CPUs and simplify aliasing
+ table.
+
+* src/mkheader.c (xmalloc): New.
+(xstrdup): Implement using xmalloc.
+(canon_host_triplet): Add supporr for arc CPU.  Adjust alias table to
+also alias *-pc-*.  Rename ibm to unknown. Add internal arg.  Add
+unknown vendor hack.
+(main): New mode to just print the canonicalized form.
+* src/Makefile.am (lock_obj_pub): s/-(pc|ibm)-/-unknown/.  Also rename
+files accordingly.
+--
+
+config.sub does no real aliasing and thus we would need to add several
+vendors to the alising tables despite that this has no technical
+meanding.  Instead we now replace the vendor with "unknown" for the
+4-part-"triplets".  This change will make maintenace easier.
+
+Signed-off-by: Werner Koch <wk@gnupg.org>
+
+Upstream-Status: Backport [ http://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgpg-error.git;a=commit;h=48c8f8ddfc80 ]
+---
+ src/Makefile.am                               | 16 ++--
+ src/mkheader.c                                | 92 ++++++++++++++++---
+ ...-gnu.h => lock-obj-pub.i686-unknown-gnu.h} |  0
+ ... lock-obj-pub.i686-unknown-kfreebsd-gnu.h} |  0
+ ... => lock-obj-pub.i686-unknown-linux-gnu.h} |  0
+ ...=> lock-obj-pub.s390x-unknown-linux-gnu.h} |  0
+ ...ock-obj-pub.x86_64-unknown-kfreebsd-gnu.h} |  0
+ ...> lock-obj-pub.x86_64-unknown-linux-gnu.h} |  0
+ ...ock-obj-pub.x86_64-unknown-linux-gnux32.h} |  0
+ ... lock-obj-pub.x86_64-unknown-linux-musl.h} |  0
+ 10 files changed, 85 insertions(+), 23 deletions(-)
+ rename src/syscfg/{lock-obj-pub.i686-pc-gnu.h => lock-obj-pub.i686-unknown-gnu.h} (100%)
+ rename src/syscfg/{lock-obj-pub.i686-pc-kfreebsd-gnu.h => lock-obj-pub.i686-unknown-kfreebsd-gnu.h} (100%)
+ rename src/syscfg/{lock-obj-pub.i686-pc-linux-gnu.h => lock-obj-pub.i686-unknown-linux-gnu.h} (100%)
+ rename src/syscfg/{lock-obj-pub.s390x-ibm-linux-gnu.h => lock-obj-pub.s390x-unknown-linux-gnu.h} (100%)
+ rename src/syscfg/{lock-obj-pub.x86_64-pc-kfreebsd-gnu.h => lock-obj-pub.x86_64-unknown-kfreebsd-gnu.h} (100%)
+ rename src/syscfg/{lock-obj-pub.x86_64-pc-linux-gnu.h => lock-obj-pub.x86_64-unknown-linux-gnu.h} (100%)
+ rename src/syscfg/{lock-obj-pub.x86_64-pc-linux-gnux32.h => lock-obj-pub.x86_64-unknown-linux-gnux32.h} (100%)
+ rename src/syscfg/{lock-obj-pub.x86_64-pc-linux-musl.h => lock-obj-pub.x86_64-unknown-linux-musl.h} (100%)
+
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 42998e46a3bc..8ec582ef99fb 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -52,9 +52,9 @@ lock_obj_pub = \
+ 	syscfg/lock-obj-pub.arm-apple-darwin.h              \
+         syscfg/lock-obj-pub.hppa-unknown-linux-gnu.h        \
+ 	syscfg/lock-obj-pub.i386-apple-darwin.h             \
+-        syscfg/lock-obj-pub.i686-pc-gnu.h                   \
+-        syscfg/lock-obj-pub.i686-pc-kfreebsd-gnu.h          \
+-        syscfg/lock-obj-pub.i686-pc-linux-gnu.h             \
++        syscfg/lock-obj-pub.i686-unknown-gnu.h              \
++        syscfg/lock-obj-pub.i686-unknown-kfreebsd-gnu.h     \
++        syscfg/lock-obj-pub.i686-unknown-linux-gnu.h        \
+         syscfg/lock-obj-pub.m68k-unknown-linux-gnu.h        \
+         syscfg/lock-obj-pub.mips-unknown-linux-gnu.h        \
+         syscfg/lock-obj-pub.mips64el-unknown-linux-gnuabi64.h \
+@@ -66,16 +66,16 @@ lock_obj_pub = \
+ 	syscfg/lock-obj-pub.powerpc64le-unknown-linux-gnu.h \
+ 	syscfg/lock-obj-pub.powerpc-unknown-linux-gnuspe.h  \
+ 	syscfg/lock-obj-pub.riscv64-unknown-linux-gnu.h     \
+-        syscfg/lock-obj-pub.s390x-ibm-linux-gnu.h           \
++        syscfg/lock-obj-pub.s390x-unknown-linux-gnu.h       \
+         syscfg/lock-obj-pub.sh3-unknown-linux-gnu.h         \
+         syscfg/lock-obj-pub.sh4-unknown-linux-gnu.h         \
+         syscfg/lock-obj-pub.sparc-unknown-linux-gnu.h       \
+         syscfg/lock-obj-pub.sparc64-unknown-linux-gnu.h     \
+ 	syscfg/lock-obj-pub.x86_64-apple-darwin.h           \
+-        syscfg/lock-obj-pub.x86_64-pc-kfreebsd-gnu.h        \
+-        syscfg/lock-obj-pub.x86_64-pc-linux-gnu.h           \
+-        syscfg/lock-obj-pub.x86_64-pc-linux-gnux32.h        \
+-        syscfg/lock-obj-pub.x86_64-pc-linux-musl.h          \
++        syscfg/lock-obj-pub.x86_64-unknown-kfreebsd-gnu.h   \
++        syscfg/lock-obj-pub.x86_64-unknown-linux-gnu.h      \
++        syscfg/lock-obj-pub.x86_64-unknown-linux-gnux32.h   \
++        syscfg/lock-obj-pub.x86_64-unknown-linux-musl.h     \
+ 	syscfg/lock-obj-pub.tilegx-unknown-linux-gnu.h      \
+ 	syscfg/lock-obj-pub.ia64-unknown-linux-gnu.h        \
+ 	syscfg/lock-obj-pub.mingw32.h
+diff --git a/src/mkheader.c b/src/mkheader.c
+index 2fc5fada66a4..7a38a1bec1a4 100644
+--- a/src/mkheader.c
++++ b/src/mkheader.c
+@@ -51,17 +51,27 @@ xfree (void *a)
+ 
+ 
+ static char *
+-xstrdup (const char *string)
++xmalloc (size_t n)
+ {
+   char *p;
+-  size_t len = strlen (string) + 1;
+ 
+-  p = malloc (len);
++  p = malloc (n);
+   if (!p)
+     {
+       fputs (PGM ": out of core\n", stderr);
+       exit (1);
+     }
++  return p;
++}
++
++
++static char *
++xstrdup (const char *string)
++{
++  char *p;
++  size_t len = strlen (string) + 1;
++
++  p = xmalloc (len);
+   memcpy (p, string, len);
+   return p;
+ }
+@@ -69,23 +79,31 @@ xstrdup (const char *string)
+ 
+ /* Return a malloced string with TRIPLET.  If TRIPLET has an alias
+    return that instead.  In general build-aux/config.sub should do the
+-   aliasing but some returned triplets are anyway identical and thus we
+-   use this function to map it to the canonical form.  */
++   aliasing but some returned triplets are anyway identical and thus
++   we use this function to map it to the canonical form.
++   NO_VENDOR_HACK is for internal use; caller must call with 0. */
+ static char *
+-canon_host_triplet (const char *triplet)
++canon_host_triplet (const char *triplet, int no_vendor_hack)
+ {
+   struct {
+     const char *name;
+     const char *alias;
+   } tbl[] = {
+-    {"i486-pc-linux-gnu", "i686-pc-linux-gnu" },
++    {"i486-pc-linux-gnu", "i686-unknown-linux-gnu" },
+     {"i586-pc-linux-gnu" },
+-    {"i486-pc-gnu", "i686-pc-gnu"},
++    {"i686-pc-linux-gnu" },
++    {"arc-oe-linux-uclibc" }, /* Other CPU but same struct.  */
++
++    {"i486-pc-gnu", "i686-unknown-gnu"},
+     {"i586-pc-gnu"},
+-    {"i486-pc-kfreebsd-gnu", "i686-pc-kfreebsd-gnu"},
++    {"i686-pc-gnu"},
++
++    {"i486-pc-kfreebsd-gnu", "i686-unknown-kfreebsd-gnu"},
+     {"i586-pc-kfreebsd-gnu"},
++    {"i686-pc-kfreebsd-gnu"},
+ 
+-    {"x86_64-pc-linux-gnuhardened1", "x86_64-pc-linux-gnu" },
++    {"x86_64-pc-linux-gnuhardened1", "x86_64-unknown-linux-gnu" },
++    {"x86_64-pc-linux-gnu" },
+ 
+     {"powerpc-unknown-linux-gnuspe", "powerpc-unknown-linux-gnu" },
+ 
+@@ -98,6 +116,7 @@ canon_host_triplet (const char *triplet)
+   };
+   int i;
+   const char *lastalias = NULL;
++  const char *s;
+ 
+   for (i=0; tbl[i].name; i++)
+     {
+@@ -110,6 +129,36 @@ canon_host_triplet (const char *triplet)
+           return xstrdup (lastalias);
+         }
+     }
++  for (i=0, s=triplet; *s; s++)
++    if (*s == '-')
++      i++;
++  if (i > 2 && !no_vendor_hack)
++    {
++      /* We have a 4 part "triplet": CPU-VENDOR-KERNEL-SYSTEM where
++       * the last two parts replace the OS part of a real triplet.
++       * The VENDOR part is then in general useless because
++       * KERNEL-SYSTEM is specific enough.  We now do a second pass by
++       * replacing VENDOR with "unknown".  */
++      char *p;
++      char *buf = xmalloc (strlen (triplet) + 7 + 1);
++
++      for (p=buf,s=triplet,i=0; *s; s++)
++        {
++          *p++ = *s;
++          if (*s == '-' && ++i == 1)
++            {
++              memcpy (p, "unknown-",8);
++              p += 8;
++              for (s++; *s != '-'; s++)
++                ;
++            }
++        }
++      *p = 0;
++      p = canon_host_triplet (buf, 1);
++      xfree (buf);
++      return p;
++    }
++
+   return xstrdup (triplet);
+ }
+ 
+@@ -558,7 +607,7 @@ write_special (const char *fname, int lnr, const char *tag)
+ int
+ main (int argc, char **argv)
+ {
+-  FILE *fp;
++  FILE *fp = NULL;
+   char line[LINESIZE];
+   int lnr = 0;
+   const char *fname, *s;
+@@ -571,11 +620,22 @@ main (int argc, char **argv)
+       argc--; argv++;
+     }
+ 
+-  if (argc != 6)
++  if (argc == 1)
++    {
++      /* Print just the canonicalized host triplet.  */
++      host_triplet = canon_host_triplet (argv[0], 0);
++      printf ("%s\n", host_triplet);
++      goto leave;
++    }
++  else if (argc == 6)
++    ; /* Standard operation.  */
++  else
+     {
+       fputs ("usage: " PGM
+              " host_os host_triplet template.h config.h"
+-             " version version_number\n",
++             " version version_number\n"
++             "       " PGM
++             " host_triplet\n",
+              stderr);
+       return 1;
+     }
+@@ -586,7 +646,7 @@ main (int argc, char **argv)
+   hdr_version = argv[4];
+   hdr_version_number = argv[5];
+ 
+-  host_triplet = canon_host_triplet (host_triplet_raw);
++  host_triplet = canon_host_triplet (host_triplet_raw, 0);
+ 
+   srcdir = malloc (strlen (fname) + 2 + 1);
+   if (!srcdir)
+@@ -677,13 +737,15 @@ main (int argc, char **argv)
+          "End:\n"
+          "*/\n", stdout);
+ 
++ leave:
+   if (ferror (stdout))
+     {
+       fprintf (stderr, PGM ": error writing to stdout: %s\n", strerror (errno));
+       return 1;
+     }
+ 
+-  fclose (fp);
++  if (fp)
++    fclose (fp);
+ 
+   xfree (host_triplet);
+   return 0;
+diff --git a/src/syscfg/lock-obj-pub.i686-pc-gnu.h b/src/syscfg/lock-obj-pub.i686-unknown-gnu.h
+similarity index 100%
+rename from src/syscfg/lock-obj-pub.i686-pc-gnu.h
+rename to src/syscfg/lock-obj-pub.i686-unknown-gnu.h
+diff --git a/src/syscfg/lock-obj-pub.i686-pc-kfreebsd-gnu.h b/src/syscfg/lock-obj-pub.i686-unknown-kfreebsd-gnu.h
+similarity index 100%
+rename from src/syscfg/lock-obj-pub.i686-pc-kfreebsd-gnu.h
+rename to src/syscfg/lock-obj-pub.i686-unknown-kfreebsd-gnu.h
+diff --git a/src/syscfg/lock-obj-pub.i686-pc-linux-gnu.h b/src/syscfg/lock-obj-pub.i686-unknown-linux-gnu.h
+similarity index 100%
+rename from src/syscfg/lock-obj-pub.i686-pc-linux-gnu.h
+rename to src/syscfg/lock-obj-pub.i686-unknown-linux-gnu.h
+diff --git a/src/syscfg/lock-obj-pub.s390x-ibm-linux-gnu.h b/src/syscfg/lock-obj-pub.s390x-unknown-linux-gnu.h
+similarity index 100%
+rename from src/syscfg/lock-obj-pub.s390x-ibm-linux-gnu.h
+rename to src/syscfg/lock-obj-pub.s390x-unknown-linux-gnu.h
+diff --git a/src/syscfg/lock-obj-pub.x86_64-pc-kfreebsd-gnu.h b/src/syscfg/lock-obj-pub.x86_64-unknown-kfreebsd-gnu.h
+similarity index 100%
+rename from src/syscfg/lock-obj-pub.x86_64-pc-kfreebsd-gnu.h
+rename to src/syscfg/lock-obj-pub.x86_64-unknown-kfreebsd-gnu.h
+diff --git a/src/syscfg/lock-obj-pub.x86_64-pc-linux-gnu.h b/src/syscfg/lock-obj-pub.x86_64-unknown-linux-gnu.h
+similarity index 100%
+rename from src/syscfg/lock-obj-pub.x86_64-pc-linux-gnu.h
+rename to src/syscfg/lock-obj-pub.x86_64-unknown-linux-gnu.h
+diff --git a/src/syscfg/lock-obj-pub.x86_64-pc-linux-gnux32.h b/src/syscfg/lock-obj-pub.x86_64-unknown-linux-gnux32.h
+similarity index 100%
+rename from src/syscfg/lock-obj-pub.x86_64-pc-linux-gnux32.h
+rename to src/syscfg/lock-obj-pub.x86_64-unknown-linux-gnux32.h
+diff --git a/src/syscfg/lock-obj-pub.x86_64-pc-linux-musl.h b/src/syscfg/lock-obj-pub.x86_64-unknown-linux-musl.h
+similarity index 100%
+rename from src/syscfg/lock-obj-pub.x86_64-pc-linux-musl.h
+rename to src/syscfg/lock-obj-pub.x86_64-unknown-linux-musl.h
+-- 
+2.17.1
+
diff --git a/meta/recipes-support/libgpg-error/libgpg-error_1.32.bb b/meta/recipes-support/libgpg-error/libgpg-error_1.32.bb
index a4c720be9d..e771630258 100644
--- a/meta/recipes-support/libgpg-error/libgpg-error_1.32.bb
+++ b/meta/recipes-support/libgpg-error/libgpg-error_1.32.bb
@@ -14,6 +14,7 @@  SECTION = "libs"
 UPSTREAM_CHECK_URI = "https://gnupg.org/download/index.html"
 SRC_URI = "${GNUPG_MIRROR}/libgpg-error/libgpg-error-${PV}.tar.bz2 \
            file://pkgconfig.patch \
+           file://0001-syscfg-Support-ARC-CPUs-and-simplify-aliasing-table.patch \
 	  "
 SRC_URI[md5sum] = "ef3d928a5a453fa701ecc3bb22be1c64"
 SRC_URI[sha256sum] = "c345c5e73cc2332f8d50db84a2280abfb1d8f6d4f1858b9daa30404db44540ca"
@@ -36,6 +37,7 @@  do_compile_prepend() {
 
 	case ${TARGET_ARCH} in
 	  aarch64_be) TUPLE=aarch64-unknown-linux-gnu ;;
+	  arc)	      TUPLE=i686-unknown-linux-gnu ;;
 	  arm)	      TUPLE=arm-unknown-linux-gnueabi ;;
 	  armeb)      TUPLE=arm-unknown-linux-gnueabi ;;
 	  i586|i686)  TUPLE=i686-pc-linux-gnu ;;