From ffb811e18d7046d5bbe54ede5b1b7e14eaac0146 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Wed, 21 Aug 2019 15:44:18 +0800
Subject: [PATCH] hppa backend

Rebase to 0.177
Upstream-Status: Pending [from debian]
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>

---
 backends/Makefile.am      |   7 +-
 backends/libebl_parisc.h  |   9 ++
 backends/parisc_init.c    |  73 +++++++++++++
 backends/parisc_regs.c    | 159 ++++++++++++++++++++++++++++
 backends/parisc_reloc.def | 128 +++++++++++++++++++++++
 backends/parisc_retval.c  | 213 ++++++++++++++++++++++++++++++++++++++
 backends/parisc_symbol.c  | 113 ++++++++++++++++++++
 libelf/elf.h              |  11 ++
 8 files changed, 711 insertions(+), 2 deletions(-)
 create mode 100644 backends/libebl_parisc.h
 create mode 100644 backends/parisc_init.c
 create mode 100644 backends/parisc_regs.c
 create mode 100644 backends/parisc_reloc.def
 create mode 100644 backends/parisc_retval.c
 create mode 100644 backends/parisc_symbol.c

diff --git a/backends/Makefile.am b/backends/Makefile.am
index f405212..4755f61 100644
--- a/backends/Makefile.am
+++ b/backends/Makefile.am
@@ -37,7 +37,9 @@ AM_CPPFLAGS += -I$(top_srcdir)/libebl -I$(top_srcdir)/libasm \
 noinst_LIBRARIES = libebl_backends.a libebl_backends_pic.a
 
 modules = i386 sh x86_64 ia64 alpha arm aarch64 sparc ppc ppc64 s390 \
-	  tilegx m68k bpf riscv csky
+	  tilegx m68k bpf riscv csky parisc
+
+parisc_SRCS = parisc_init.c parisc_symbol.c parisc_regs.c parisc_retval.c
 
 i386_SRCS = i386_init.c i386_symbol.c i386_corenote.c i386_cfi.c \
 	    i386_retval.c i386_regs.c i386_auxv.c i386_syscall.c \
@@ -102,7 +104,8 @@ libebl_backends_a_SOURCES = $(i386_SRCS) $(sh_SRCS) $(x86_64_SRCS) \
 			    $(ia64_SRCS) $(alpha_SRCS) $(arm_SRCS) \
 			    $(aarch64_SRCS) $(sparc_SRCS) $(ppc_SRCS) \
 			    $(ppc64_SRCS) $(s390_SRCS) $(tilegx_SRCS) \
-			    $(m68k_SRCS) $(bpf_SRCS) $(riscv_SRCS) $(csky_SRCS)
+			    $(m68k_SRCS) $(bpf_SRCS) $(riscv_SRCS) $(csky_SRCS) \
+                            $(parisc_SRCS)
 
 libebl_backends_pic_a_SOURCES =
 am_libebl_backends_pic_a_OBJECTS = $(libebl_backends_a_SOURCES:.c=.os)
diff --git a/backends/libebl_parisc.h b/backends/libebl_parisc.h
new file mode 100644
index 0000000..f473b79
--- /dev/null
+++ b/backends/libebl_parisc.h
@@ -0,0 +1,9 @@
+#ifndef _LIBEBL_HPPA_H
+#define _LIBEBL_HPPA_H 1
+
+#include <libdw.h>
+
+extern int parisc_return_value_location_32(Dwarf_Die *, const Dwarf_Op **locp);
+extern int parisc_return_value_location_64(Dwarf_Die *, const Dwarf_Op **locp);
+
+#endif
diff --git a/backends/parisc_init.c b/backends/parisc_init.c
new file mode 100644
index 0000000..f1e401c
--- /dev/null
+++ b/backends/parisc_init.c
@@ -0,0 +1,73 @@
+/* Initialization of PA-RISC specific backend library.
+   Copyright (C) 2002, 2005, 2006 Red Hat, Inc.
+   This file is part of Red Hat elfutils.
+   Written by Ulrich Drepper <drepper@redhat.com>, 2002.
+
+   Red Hat elfutils is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by the
+   Free Software Foundation; version 2 of the License.
+
+   Red Hat elfutils is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License along
+   with Red Hat elfutils; if not, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
+
+   Red Hat elfutils is an included package of the Open Invention Network.
+   An included package of the Open Invention Network is a package for which
+   Open Invention Network licensees cross-license their patents.  No patent
+   license is granted, either expressly or impliedly, by designation as an
+   included package.  Should you wish to participate in the Open Invention
+   Network licensing program, please visit www.openinventionnetwork.com
+   <http://www.openinventionnetwork.com>.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#define BACKEND		parisc_
+#define RELOC_PREFIX	R_PARISC_
+#include "libebl_CPU.h"
+#include "libebl_parisc.h"
+
+/* This defines the common reloc hooks based on parisc_reloc.def.  */
+#include "common-reloc.c"
+
+
+const char *
+parisc_init (Elf *elf __attribute__ ((unused)),
+     GElf_Half machine __attribute__ ((unused)),
+     Ebl *eh,
+     size_t ehlen)
+{
+  int pa64 = 0;
+
+  /* Check whether the Elf_BH object has a sufficent size.  */
+  if (ehlen < sizeof (Ebl))
+    return NULL;
+
+  if (elf) {
+    GElf_Ehdr ehdr_mem;
+    GElf_Ehdr *ehdr = gelf_getehdr (elf, &ehdr_mem);
+    if (ehdr && (ehdr->e_flags & EF_PARISC_WIDE))
+      pa64 = 1;
+  }
+  /* We handle it.  */
+  eh->name = "PA-RISC";
+  parisc_init_reloc (eh);
+  HOOK (eh, reloc_simple_type);
+  HOOK (eh, machine_flag_check);
+  HOOK (eh, symbol_type_name);
+  HOOK (eh, segment_type_name);
+  HOOK (eh, section_type_name);
+  HOOK (eh, register_info);
+  if (pa64)
+    eh->return_value_location = parisc_return_value_location_64;
+  else
+    eh->return_value_location = parisc_return_value_location_32;
+
+  return MODVERSION;
+}
diff --git a/backends/parisc_regs.c b/backends/parisc_regs.c
new file mode 100644
index 0000000..3895f8e
--- /dev/null
+++ b/backends/parisc_regs.c
@@ -0,0 +1,159 @@
+/* Register names and numbers for PA-RISC DWARF.
+   Copyright (C) 2005, 2006 Red Hat, Inc.
+   This file is part of Red Hat elfutils.
+
+   Red Hat elfutils is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by the
+   Free Software Foundation; version 2 of the License.
+
+   Red Hat elfutils is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License along
+   with Red Hat elfutils; if not, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
+
+   Red Hat elfutils is an included package of the Open Invention Network.
+   An included package of the Open Invention Network is a package for which
+   Open Invention Network licensees cross-license their patents.  No patent
+   license is granted, either expressly or impliedly, by designation as an
+   included package.  Should you wish to participate in the Open Invention
+   Network licensing program, please visit www.openinventionnetwork.com
+   <http://www.openinventionnetwork.com>.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <string.h>
+#include <dwarf.h>
+
+#define BACKEND parisc_
+#include "libebl_CPU.h"
+
+ssize_t
+parisc_register_info (Ebl *ebl, int regno, char *name, size_t namelen,
+		     const char **prefix, const char **setname,
+		     int *bits, int *type)
+{
+  int pa64 = 0;
+
+  if (ebl->elf) {
+    GElf_Ehdr ehdr_mem;
+    GElf_Ehdr *ehdr = gelf_getehdr (ebl->elf, &ehdr_mem);
+    if (ehdr->e_flags & EF_PARISC_WIDE)
+      pa64 = 1;
+  }
+
+  int nregs = pa64 ? 127 : 128;
+
+  if (name == NULL)
+    return nregs;
+
+  if (regno < 0 || regno >= nregs || namelen < 6)
+    return -1;
+
+  *prefix = "%";
+
+  if (regno < 32)
+  {
+    *setname = "integer";
+    *type = DW_ATE_signed;
+    if (pa64)
+    {
+	*bits = 64;
+    }
+    else
+    {
+    	*bits = 32;
+    }
+  }
+  else if (regno == 32)
+  {
+    *setname = "special";
+    if (pa64)
+    {
+	*bits = 6;
+    }
+    else
+    {
+    	*bits = 5;
+    }
+    *type = DW_ATE_unsigned;
+  }
+  else
+  {
+    *setname = "FPU";
+    *type = DW_ATE_float;
+    if (pa64)
+    {
+	*bits = 64;
+    }
+    else
+    {
+    	*bits = 32;
+    }
+  }
+
+  if (regno < 33) {
+    switch (regno)
+      {
+      case 0 ... 9:
+        name[0] = 'r';
+        name[1] = regno + '0';
+        namelen = 2;
+        break;
+      case 10 ... 31:
+        name[0] = 'r';
+        name[1] = regno / 10 + '0';
+        name[2] = regno % 10 + '0';
+        namelen = 3;
+        break;
+      case 32:
+	*prefix = NULL;
+	name[0] = 'S';
+	name[1] = 'A';
+	name[2] = 'R';
+	namelen = 3;
+	break;
+      }
+  }
+  else {
+    if (pa64 && ((regno - 72) % 2)) {
+      *setname = NULL;
+      return 0;
+    }
+
+    switch (regno)
+      {
+      case 72 + 0 ... 72 + 11:
+        name[0] = 'f';
+	name[1] = 'r';
+        name[2] = (regno + 8 - 72) / 2 + '0';
+        namelen = 3;
+        if ((regno + 8 - 72) % 2) {
+	  name[3] = 'R';
+	  namelen++;
+        }
+        break;
+      case 72 + 12 ... 72 + 55:
+        name[0] = 'f';
+	name[1] = 'r';
+        name[2] = (regno + 8 - 72) / 2 / 10 + '0';
+        name[3] = (regno + 8 - 72) / 2 % 10 + '0';
+        namelen = 4;
+        if ((regno + 8 - 72) % 2) {
+	  name[4] = 'R';
+	  namelen++;
+        }
+        break;
+      default:
+        *setname = NULL;
+        return 0;
+      }
+  }
+  name[namelen++] = '\0';
+  return namelen;
+}
diff --git a/backends/parisc_reloc.def b/backends/parisc_reloc.def
new file mode 100644
index 0000000..1f875ba
--- /dev/null
+++ b/backends/parisc_reloc.def
@@ -0,0 +1,128 @@
+/* List the relocation types for PA-RISC.  -*- C -*-
+   Copyright (C) 2005 Red Hat, Inc.
+   This file is part of Red Hat elfutils.
+
+   Red Hat elfutils is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by the
+   Free Software Foundation; version 2 of the License.
+
+   Red Hat elfutils is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License along
+   with Red Hat elfutils; if not, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
+
+   Red Hat elfutils is an included package of the Open Invention Network.
+   An included package of the Open Invention Network is a package for which
+   Open Invention Network licensees cross-license their patents.  No patent
+   license is granted, either expressly or impliedly, by designation as an
+   included package.  Should you wish to participate in the Open Invention
+   Network licensing program, please visit www.openinventionnetwork.com
+   <http://www.openinventionnetwork.com>.  */
+
+/*	    NAME,		REL|EXEC|DYN	*/
+
+RELOC_TYPE (NONE,		EXEC|DYN)
+RELOC_TYPE (DIR32,		REL|EXEC|DYN)
+RELOC_TYPE (DIR21L,		REL|EXEC|DYN)
+RELOC_TYPE (DIR17R,		REL)
+RELOC_TYPE (DIR17F,		REL)
+RELOC_TYPE (DIR14R,		REL|DYN)
+RELOC_TYPE (PCREL32,		REL)
+RELOC_TYPE (PCREL21L,		REL)
+RELOC_TYPE (PCREL17R,		REL)
+RELOC_TYPE (PCREL17F,		REL)
+RELOC_TYPE (PCREL14R,		REL|EXEC)
+RELOC_TYPE (DPREL21L,		REL)
+RELOC_TYPE (DPREL14WR,		REL)
+RELOC_TYPE (DPREL14DR,          REL)
+RELOC_TYPE (DPREL14R,		REL)
+RELOC_TYPE (GPREL21L,		0)
+RELOC_TYPE (GPREL14R,		0)
+RELOC_TYPE (LTOFF21L,		REL)
+RELOC_TYPE (LTOFF14R,		REL)
+RELOC_TYPE (DLTIND14F,		0)
+RELOC_TYPE (SETBASE,		0)
+RELOC_TYPE (SECREL32,		REL)
+RELOC_TYPE (BASEREL21L,		0)
+RELOC_TYPE (BASEREL17R,		0)
+RELOC_TYPE (BASEREL14R,		0)
+RELOC_TYPE (SEGBASE,		0)
+RELOC_TYPE (SEGREL32,		REL)
+RELOC_TYPE (PLTOFF21L,		0)
+RELOC_TYPE (PLTOFF14R,		0)
+RELOC_TYPE (PLTOFF14F,		0)
+RELOC_TYPE (LTOFF_FPTR32,	0)
+RELOC_TYPE (LTOFF_FPTR21L,	0)
+RELOC_TYPE (LTOFF_FPTR14R,	0)
+RELOC_TYPE (FPTR64,		0)
+RELOC_TYPE (PLABEL32,		REL|DYN)
+RELOC_TYPE (PCREL64,		0)
+RELOC_TYPE (PCREL22C,		0)
+RELOC_TYPE (PCREL22F,		0)
+RELOC_TYPE (PCREL14WR,		0)
+RELOC_TYPE (PCREL14DR,		0)
+RELOC_TYPE (PCREL16F,		0)
+RELOC_TYPE (PCREL16WF,		0)
+RELOC_TYPE (PCREL16DF,		0)
+RELOC_TYPE (DIR64,		REL|DYN)
+RELOC_TYPE (DIR14WR,		REL)
+RELOC_TYPE (DIR14DR,		REL)
+RELOC_TYPE (DIR16F,		REL)
+RELOC_TYPE (DIR16WF,		REL)
+RELOC_TYPE (DIR16DF,		REL)
+RELOC_TYPE (GPREL64,		0)
+RELOC_TYPE (GPREL14WR,		0)
+RELOC_TYPE (GPREL14DR,		0)
+RELOC_TYPE (GPREL16F,		0)
+RELOC_TYPE (GPREL16WF,		0)
+RELOC_TYPE (GPREL16DF,		0)
+RELOC_TYPE (LTOFF64,		0)
+RELOC_TYPE (LTOFF14WR,		0)
+RELOC_TYPE (LTOFF14DR,		0)
+RELOC_TYPE (LTOFF16F,		0)
+RELOC_TYPE (LTOFF16WF,		0)
+RELOC_TYPE (LTOFF16DF,		0)
+RELOC_TYPE (SECREL64,		0)
+RELOC_TYPE (BASEREL14WR,	0)
+RELOC_TYPE (BASEREL14DR,	0)
+RELOC_TYPE (SEGREL64,		0)
+RELOC_TYPE (PLTOFF14WR,		0)
+RELOC_TYPE (PLTOFF14DR,		0)
+RELOC_TYPE (PLTOFF16F,		0)
+RELOC_TYPE (PLTOFF16WF,		0)
+RELOC_TYPE (PLTOFF16DF,		0)
+RELOC_TYPE (LTOFF_FPTR64,	0)
+RELOC_TYPE (LTOFF_FPTR14WR,	0)
+RELOC_TYPE (LTOFF_FPTR14DR,	0)
+RELOC_TYPE (LTOFF_FPTR16F,	0)
+RELOC_TYPE (LTOFF_FPTR16WF,	0)
+RELOC_TYPE (LTOFF_FPTR16DF,	0)
+RELOC_TYPE (COPY,		EXEC)
+RELOC_TYPE (IPLT,		EXEC|DYN)
+RELOC_TYPE (EPLT,		0)
+RELOC_TYPE (TPREL32,		DYN)
+RELOC_TYPE (TPREL21L,		0)
+RELOC_TYPE (TPREL14R,		0)
+RELOC_TYPE (LTOFF_TP21L,	0)
+RELOC_TYPE (LTOFF_TP14R,	0)
+RELOC_TYPE (LTOFF_TP14F,	0)
+RELOC_TYPE (TPREL64,		0)
+RELOC_TYPE (TPREL14WR,		0)
+RELOC_TYPE (TPREL14DR,		0)
+RELOC_TYPE (TPREL16F,		0)
+RELOC_TYPE (TPREL16WF,		0)
+RELOC_TYPE (TPREL16DF,		0)
+RELOC_TYPE (LTOFF_TP64,		0)
+RELOC_TYPE (LTOFF_TP14WR,	0)
+RELOC_TYPE (LTOFF_TP14DR,	0)
+RELOC_TYPE (LTOFF_TP16F,	0)
+RELOC_TYPE (LTOFF_TP16WF,	0)
+RELOC_TYPE (LTOFF_TP16DF,	0)
+RELOC_TYPE (TLS_DTPMOD32,	DYN)
+RELOC_TYPE (TLS_DTPMOD64,	DYN)
+
+#define NO_RELATIVE_RELOC       1
diff --git a/backends/parisc_retval.c b/backends/parisc_retval.c
new file mode 100644
index 0000000..df7ec3a
--- /dev/null
+++ b/backends/parisc_retval.c
@@ -0,0 +1,213 @@
+/* Function return value location for Linux/PA-RISC ABI.
+   Copyright (C) 2005 Red Hat, Inc.
+   This file is part of Red Hat elfutils.
+
+   Red Hat elfutils is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by the
+   Free Software Foundation; version 2 of the License.
+
+   Red Hat elfutils is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License along
+   with Red Hat elfutils; if not, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
+
+   Red Hat elfutils is an included package of the Open Invention Network.
+   An included package of the Open Invention Network is a package for which
+   Open Invention Network licensees cross-license their patents.  No patent
+   license is granted, either expressly or impliedly, by designation as an
+   included package.  Should you wish to participate in the Open Invention
+   Network licensing program, please visit www.openinventionnetwork.com
+   <http://www.openinventionnetwork.com>.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <assert.h>
+#include <dwarf.h>
+
+#define BACKEND parisc_
+#include "libebl_CPU.h"
+#include "libebl_parisc.h"
+
+/* %r28, or pair %r28, %r29.  */
+static const Dwarf_Op loc_intreg32[] =
+  {
+    { .atom = DW_OP_reg28 }, { .atom = DW_OP_piece, .number = 4 },
+    { .atom = DW_OP_reg29 }, { .atom = DW_OP_piece, .number = 4 },
+  };
+
+static const Dwarf_Op loc_intreg[] =
+  {
+    { .atom = DW_OP_reg28 }, { .atom = DW_OP_piece, .number = 8 },
+    { .atom = DW_OP_reg29 }, { .atom = DW_OP_piece, .number = 8 },
+  };
+#define nloc_intreg	1
+#define nloc_intregpair	4
+
+/* %fr4L, or pair %fr4L, %fr4R on pa-32 */
+static const Dwarf_Op loc_fpreg32[] =
+  {
+    { .atom = DW_OP_regx, .number = 72 }, { .atom = DW_OP_piece, .number = 4 },
+    { .atom = DW_OP_regx, .number = 73 }, { .atom = DW_OP_piece, .number = 4 },
+  };
+#define nloc_fpreg32 2
+#define nloc_fpregpair32 4
+
+/* $fr4 */
+static const Dwarf_Op loc_fpreg[] =
+  {
+    { .atom = DW_OP_regx, .number = 72 },
+  };
+#define nloc_fpreg  1
+
+#if 0
+/* The return value is a structure and is actually stored in stack space
+   passed in a hidden argument by the caller. Address of the location is stored
+   in %r28 before function call, but it may be changed by function. */
+static const Dwarf_Op loc_aggregate[] =
+  {
+    { .atom = DW_OP_breg28 },
+  };
+#define nloc_aggregate 1
+#endif
+
+static int
+parisc_return_value_location_ (Dwarf_Die *functypedie, const Dwarf_Op **locp, int pa64)
+{
+  Dwarf_Word regsize = pa64 ? 8 : 4;
+
+  /* Start with the function's type, and get the DW_AT_type attribute,
+     which is the type of the return value.  */
+
+  Dwarf_Attribute attr_mem;
+  Dwarf_Attribute *attr = dwarf_attr_integrate (functypedie, DW_AT_type, &attr_mem);
+  if (attr == NULL)
+    /* The function has no return value, like a `void' function in C.  */
+    return 0;
+
+  Dwarf_Die die_mem;
+  Dwarf_Die *typedie = dwarf_formref_die (attr, &die_mem);
+  int tag = dwarf_tag (typedie);
+
+  /* Follow typedefs and qualifiers to get to the actual type.  */
+  while (tag == DW_TAG_typedef
+	 || tag == DW_TAG_const_type || tag == DW_TAG_volatile_type
+	 || tag == DW_TAG_restrict_type)
+    {
+      attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem);
+      typedie = dwarf_formref_die (attr, &die_mem);
+      tag = dwarf_tag (typedie);
+    }
+
+  switch (tag)
+    {
+    case -1:
+      return -1;
+
+    case DW_TAG_subrange_type:
+      if (! dwarf_hasattr_integrate (typedie, DW_AT_byte_size))
+	{
+	  attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem);
+	  typedie = dwarf_formref_die (attr, &die_mem);
+	  tag = dwarf_tag (typedie);
+	}
+      /* Fall through.  */
+
+    case DW_TAG_base_type:
+    case DW_TAG_enumeration_type:
+    case DW_TAG_pointer_type:
+    case DW_TAG_ptr_to_member_type:
+      {
+        Dwarf_Word size;
+	if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_byte_size,
+					 &attr_mem), &size) != 0)
+	  {
+	    if (tag == DW_TAG_pointer_type || tag == DW_TAG_ptr_to_member_type)
+	      size = 4;
+	    else
+	      return -1;
+	  }
+	if (tag == DW_TAG_base_type)
+	  {
+	    Dwarf_Word encoding;
+	    if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_encoding,
+					     &attr_mem), &encoding) != 0)
+	      return -1;
+
+	    if (encoding == DW_ATE_float)
+	      {
+		if (pa64) {
+		  *locp = loc_fpreg;
+		  if (size <= 8)
+		      return nloc_fpreg;
+		}
+		else {
+		  *locp = loc_fpreg32;
+		  if (size <= 4)
+		    return nloc_fpreg32;
+		  else if (size <= 8)
+		    return nloc_fpregpair32;
+		}
+		goto aggregate;
+	      }
+	  }
+	if (pa64)
+	  *locp = loc_intreg;
+	else
+	  *locp = loc_intreg32;
+	if (size <= regsize)
+	  return nloc_intreg;
+	if (size <= 2 * regsize)
+	  return nloc_intregpair;
+
+	/* Else fall through.  */
+      }
+
+    case DW_TAG_structure_type:
+    case DW_TAG_class_type:
+    case DW_TAG_union_type:
+    case DW_TAG_array_type:
+    aggregate: {
+        Dwarf_Word size;
+	if (dwarf_aggregate_size (typedie, &size) != 0)
+	  return -1;
+	if (pa64)
+          *locp = loc_intreg;
+	else
+	  *locp = loc_intreg32;
+        if (size <= regsize)
+	  return nloc_intreg;
+        if (size <= 2 * regsize)
+	  return nloc_intregpair;
+#if 0
+	/* there should be some way to know this location... But I do not see it. */
+        *locp = loc_aggregate;
+        return nloc_aggregate;
+#endif
+	/* fall through.  */
+      }
+    }
+
+  /* XXX We don't have a good way to return specific errors from ebl calls.
+     This value means we do not understand the type, but it is well-formed
+     DWARF and might be valid.  */
+  return -2;
+}
+
+int
+parisc_return_value_location_32 (Dwarf_Die *functypedie, const Dwarf_Op **locp)
+{
+  return parisc_return_value_location_ (functypedie, locp, 0);
+}
+
+int
+parisc_return_value_location_64 (Dwarf_Die *functypedie, const Dwarf_Op **locp)
+{
+  return parisc_return_value_location_ (functypedie, locp, 1);
+}
+
diff --git a/backends/parisc_symbol.c b/backends/parisc_symbol.c
new file mode 100644
index 0000000..5754bd8
--- /dev/null
+++ b/backends/parisc_symbol.c
@@ -0,0 +1,113 @@
+/* PA-RISC specific symbolic name handling.
+   Copyright (C) 2002, 2005 Red Hat, Inc.
+   This file is part of Red Hat elfutils.
+   Written by Ulrich Drepper <drepper@redhat.com>, 2002.
+
+   Red Hat elfutils is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by the
+   Free Software Foundation; version 2 of the License.
+
+   Red Hat elfutils is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License along
+   with Red Hat elfutils; if not, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
+
+   Red Hat elfutils is an included package of the Open Invention Network.
+   An included package of the Open Invention Network is a package for which
+   Open Invention Network licensees cross-license their patents.  No patent
+   license is granted, either expressly or impliedly, by designation as an
+   included package.  Should you wish to participate in the Open Invention
+   Network licensing program, please visit www.openinventionnetwork.com
+   <http://www.openinventionnetwork.com>.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <elf.h>
+#include <stddef.h>
+
+#define BACKEND		parisc_
+#include "libebl_CPU.h"
+
+const char *
+parisc_segment_type_name (int segment, char *buf __attribute__ ((unused)),
+			size_t len __attribute__ ((unused)))
+{
+  switch (segment)
+    {
+    case PT_PARISC_ARCHEXT:
+      return "PARISC_ARCHEXT";
+    case PT_PARISC_UNWIND:
+      return "PARISC_UNWIND";
+    default:
+      break;
+    }
+  return NULL;
+}
+
+/* Return symbolic representation of symbol type.  */
+const char *
+parisc_symbol_type_name(int symbol, char *buf __attribute__ ((unused)),
+    size_t len __attribute__ ((unused)))
+{
+	if (symbol == STT_PARISC_MILLICODE)
+	  return "PARISC_MILLI";
+	return NULL;
+}
+
+/* Return symbolic representation of section type.  */
+const char *
+parisc_section_type_name (int type,
+			char *buf __attribute__ ((unused)),
+			size_t len __attribute__ ((unused)))
+{
+  switch (type)
+    {
+    case SHT_PARISC_EXT:
+      return "PARISC_EXT";
+    case SHT_PARISC_UNWIND:
+      return "PARISC_UNWIND";
+    case SHT_PARISC_DOC:
+      return "PARISC_DOC";
+    }
+
+  return NULL;
+}
+
+/* Check whether machine flags are valid.  */
+bool
+parisc_machine_flag_check (GElf_Word flags)
+{
+  if (flags &~ (EF_PARISC_TRAPNIL | EF_PARISC_EXT | EF_PARISC_LSB |
+	EF_PARISC_WIDE | EF_PARISC_NO_KABP |
+	EF_PARISC_LAZYSWAP | EF_PARISC_ARCH))
+    return 0;
+
+  GElf_Word arch = flags & EF_PARISC_ARCH;
+
+  return ((arch == EFA_PARISC_1_0) || (arch == EFA_PARISC_1_1) ||
+      (arch == EFA_PARISC_2_0));
+}
+
+/* Check for the simple reloc types.  */
+Elf_Type
+parisc_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type,
+                          int *addsub __attribute__ ((unused)))
+{
+  switch (type)
+    {
+    case R_PARISC_DIR64:
+    case R_PARISC_SECREL64:
+      return ELF_T_XWORD;
+    case R_PARISC_DIR32:
+    case R_PARISC_SECREL32:
+      return ELF_T_WORD;
+    default:
+      return ELF_T_NUM;
+    }
+}
diff --git a/libelf/elf.h b/libelf/elf.h
index 01648bd..218ceb2 100644
--- a/libelf/elf.h
+++ b/libelf/elf.h
@@ -2162,16 +2162,24 @@ enum
 #define R_PARISC_PCREL17F	12	/* 17 bits of rel. address.  */
 #define R_PARISC_PCREL14R	14	/* Right 14 bits of rel. address.  */
 #define R_PARISC_DPREL21L	18	/* Left 21 bits of rel. address.  */
+#define R_PARISC_DPREL14WR	19
+#define R_PARISC_DPREL14DR	20
 #define R_PARISC_DPREL14R	22	/* Right 14 bits of rel. address.  */
 #define R_PARISC_GPREL21L	26	/* GP-relative, left 21 bits.  */
 #define R_PARISC_GPREL14R	30	/* GP-relative, right 14 bits.  */
 #define R_PARISC_LTOFF21L	34	/* LT-relative, left 21 bits.  */
 #define R_PARISC_LTOFF14R	38	/* LT-relative, right 14 bits.  */
+#define R_PARISC_DLTIND14F	39
+#define R_PARISC_SETBASE	40
 #define R_PARISC_SECREL32	41	/* 32 bits section rel. address.  */
+#define R_PARISC_BASEREL21L	42
+#define R_PARISC_BASEREL17R	43
+#define R_PARISC_BASEREL14R	46
 #define R_PARISC_SEGBASE	48	/* No relocation, set segment base.  */
 #define R_PARISC_SEGREL32	49	/* 32 bits segment rel. address.  */
 #define R_PARISC_PLTOFF21L	50	/* PLT rel. address, left 21 bits.  */
 #define R_PARISC_PLTOFF14R	54	/* PLT rel. address, right 14 bits.  */
+#define R_PARISC_PLTOFF14F	55
 #define R_PARISC_LTOFF_FPTR32	57	/* 32 bits LT-rel. function pointer. */
 #define R_PARISC_LTOFF_FPTR21L	58	/* LT-rel. fct ptr, left 21 bits. */
 #define R_PARISC_LTOFF_FPTR14R	62	/* LT-rel. fct ptr, right 14 bits. */
@@ -2180,6 +2188,7 @@ enum
 #define R_PARISC_PLABEL21L	66	/* Left 21 bits of fdesc address.  */
 #define R_PARISC_PLABEL14R	70	/* Right 14 bits of fdesc address.  */
 #define R_PARISC_PCREL64	72	/* 64 bits PC-rel. address.  */
+#define R_PARISC_PCREL22C	73
 #define R_PARISC_PCREL22F	74	/* 22 bits PC-rel. address.  */
 #define R_PARISC_PCREL14WR	75	/* PC-rel. address, right 14 bits.  */
 #define R_PARISC_PCREL14DR	76	/* PC rel. address, right 14 bits.  */
@@ -2205,6 +2214,8 @@ enum
 #define R_PARISC_LTOFF16WF	102	/* 16 bits LT-rel. address.  */
 #define R_PARISC_LTOFF16DF	103	/* 16 bits LT-rel. address.  */
 #define R_PARISC_SECREL64	104	/* 64 bits section rel. address.  */
+#define R_PARISC_BASEREL14WR	107
+#define R_PARISC_BASEREL14DR	108
 #define R_PARISC_SEGREL64	112	/* 64 bits segment rel. address.  */
 #define R_PARISC_PLTOFF14WR	115	/* PLT-rel. address, right 14 bits.  */
 #define R_PARISC_PLTOFF14DR	116	/* PLT-rel. address, right 14 bits.  */
