elfutils: Upgrade to v0.155

*license changed to GPLv3
*several patches were absolete so I removed them
*redhat-portability & redhat-robustify backported from
 latest elfutils-portability & elfutils-robustify from
 upstream

(From OE-Core rev: 6edbaf14f875b7759672e8d118c59a01dbdeb853)

Signed-off-by: Radu Moisan <radu.moisan@intel.com>
Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Radu Moisan 2013-06-19 12:12:09 +03:00 committed by Richard Purdie
parent 749fcafb08
commit 1f5bd7639d
17 changed files with 11458 additions and 0 deletions

View File

@ -0,0 +1,450 @@
Upstream-Status: Backport
Index: elfutils-0.155/backends/arm_init.c
===================================================================
--- elfutils-0.155.orig/backends/arm_init.c
+++ elfutils-0.155/backends/arm_init.c
@@ -35,21 +35,32 @@
#define RELOC_PREFIX R_ARM_
#include "libebl_CPU.h"
+#include "libebl_arm.h"
+
/* This defines the common reloc hooks based on arm_reloc.def. */
#include "common-reloc.c"
const char *
arm_init (elf, machine, eh, ehlen)
- Elf *elf __attribute__ ((unused));
+ Elf *elf;
GElf_Half machine __attribute__ ((unused));
Ebl *eh;
size_t ehlen;
{
+ int soft_float = 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_ARM_SOFT_FLOAT))
+ soft_float = 1;
+ }
+
/* We handle it. */
eh->name = "ARM";
arm_init_reloc (eh);
@@ -61,7 +72,10 @@ arm_init (elf, machine, eh, ehlen)
HOOK (eh, core_note);
HOOK (eh, auxv_info);
HOOK (eh, check_object_attribute);
- HOOK (eh, return_value_location);
+ if (soft_float)
+ eh->return_value_location = arm_return_value_location_soft;
+ else
+ eh->return_value_location = arm_return_value_location_hard;
return MODVERSION;
}
Index: elfutils-0.155/backends/arm_regs.c
===================================================================
--- elfutils-0.155.orig/backends/arm_regs.c
+++ elfutils-0.155/backends/arm_regs.c
@@ -31,6 +31,7 @@
#endif
#include <string.h>
+#include <stdio.h>
#include <dwarf.h>
#define BACKEND arm_
@@ -61,7 +62,15 @@ arm_register_info (Ebl *ebl __attribute_
namelen = 2;
break;
- case 10 ... 12:
+ case 10 ... 11:
+ name[0] = 'r';
+ name[1] = '1';
+ name[2] = regno % 10 + '0';
+ namelen = 3;
+ break;
+
+ case 12:
+ *type = DW_ATE_unsigned;
name[0] = 'r';
name[1] = '1';
name[2] = regno % 10 + '0';
@@ -76,6 +85,9 @@ arm_register_info (Ebl *ebl __attribute_
break;
case 16 + 0 ... 16 + 7:
+ /* AADWARF says that there are no registers in that range,
+ * but gcc maps FPA registers here
+ */
regno += 96 - 16;
/* Fall through. */
case 96 + 0 ... 96 + 7:
@@ -87,11 +99,139 @@ arm_register_info (Ebl *ebl __attribute_
namelen = 2;
break;
+ case 64 + 0 ... 64 + 9:
+ *setname = "VFP";
+ *bits = 32;
+ *type = DW_ATE_float;
+ name[0] = 's';
+ name[1] = regno - 64 + '0';
+ namelen = 2;
+ break;
+
+ case 64 + 10 ... 64 + 31:
+ *setname = "VFP";
+ *bits = 32;
+ *type = DW_ATE_float;
+ name[0] = 's';
+ name[1] = (regno - 64) / 10 + '0';
+ name[2] = (regno - 64) % 10 + '0';
+ namelen = 3;
+ break;
+
+ case 104 + 0 ... 104 + 7:
+ /* XXX TODO:
+ * This can be either intel wireless MMX general purpose/control
+ * registers or xscale accumulator, which have different usage.
+ * We only have the intel wireless MMX here now.
+ * The name needs to be changed for the xscale accumulator too. */
+ *setname = "MMX";
+ *type = DW_ATE_unsigned;
+ *bits = 32;
+ memcpy(name, "wcgr", 4);
+ name[4] = regno - 104 + '0';
+ namelen = 5;
+ break;
+
+ case 112 + 0 ... 112 + 9:
+ *setname = "MMX";
+ *type = DW_ATE_unsigned;
+ *bits = 64;
+ name[0] = 'w';
+ name[1] = 'r';
+ name[2] = regno - 112 + '0';
+ namelen = 3;
+ break;
+
+ case 112 + 10 ... 112 + 15:
+ *setname = "MMX";
+ *type = DW_ATE_unsigned;
+ *bits = 64;
+ name[0] = 'w';
+ name[1] = 'r';
+ name[2] = '1';
+ name[3] = regno - 112 - 10 + '0';
+ namelen = 4;
+ break;
+
case 128:
+ *setname = "special";
*type = DW_ATE_unsigned;
return stpcpy (name, "spsr") + 1 - name;
+ case 129:
+ *setname = "special";
+ *type = DW_ATE_unsigned;
+ return stpcpy(name, "spsr_fiq") + 1 - name;
+
+ case 130:
+ *setname = "special";
+ *type = DW_ATE_unsigned;
+ return stpcpy(name, "spsr_irq") + 1 - name;
+
+ case 131:
+ *setname = "special";
+ *type = DW_ATE_unsigned;
+ return stpcpy(name, "spsr_abt") + 1 - name;
+
+ case 132:
+ *setname = "special";
+ *type = DW_ATE_unsigned;
+ return stpcpy(name, "spsr_und") + 1 - name;
+
+ case 133:
+ *setname = "special";
+ *type = DW_ATE_unsigned;
+ return stpcpy(name, "spsr_svc") + 1 - name;
+
+ case 144 ... 150:
+ *setname = "integer";
+ *type = DW_ATE_signed;
+ *bits = 32;
+ return sprintf(name, "r%d_usr", regno - 144 + 8) + 1;
+
+ case 151 ... 157:
+ *setname = "integer";
+ *type = DW_ATE_signed;
+ *bits = 32;
+ return sprintf(name, "r%d_fiq", regno - 151 + 8) + 1;
+
+ case 158 ... 159:
+ *setname = "integer";
+ *type = DW_ATE_signed;
+ *bits = 32;
+ return sprintf(name, "r%d_irq", regno - 158 + 13) + 1;
+
+ case 160 ... 161:
+ *setname = "integer";
+ *type = DW_ATE_signed;
+ *bits = 32;
+ return sprintf(name, "r%d_abt", regno - 160 + 13) + 1;
+
+ case 162 ... 163:
+ *setname = "integer";
+ *type = DW_ATE_signed;
+ *bits = 32;
+ return sprintf(name, "r%d_und", regno - 162 + 13) + 1;
+
+ case 164 ... 165:
+ *setname = "integer";
+ *type = DW_ATE_signed;
+ *bits = 32;
+ return sprintf(name, "r%d_svc", regno - 164 + 13) + 1;
+
+ case 192 ... 199:
+ *setname = "MMX";
+ *bits = 32;
+ *type = DW_ATE_unsigned;
+ name[0] = 'w';
+ name[1] = 'c';
+ name[2] = regno - 192 + '0';
+ namelen = 3;
+ break;
+
case 256 + 0 ... 256 + 9:
+ /* XXX TODO: Neon also uses those registers and can contain
+ * both float and integers */
*setname = "VFP";
*type = DW_ATE_float;
*bits = 64;
Index: elfutils-0.155/backends/arm_retval.c
===================================================================
--- elfutils-0.155.orig/backends/arm_retval.c
+++ elfutils-0.155/backends/arm_retval.c
@@ -48,6 +48,13 @@ static const Dwarf_Op loc_intreg[] =
#define nloc_intreg 1
#define nloc_intregs(n) (2 * (n))
+/* f1 */ /* XXX TODO: f0 can also have number 96 if program was compiled with -mabi=aapcs */
+static const Dwarf_Op loc_fpreg[] =
+ {
+ { .atom = DW_OP_reg16 },
+ };
+#define nloc_fpreg 1
+
/* The return value is a structure and is actually stored in stack space
passed in a hidden argument by the caller. But, the compiler
helpfully returns the address of that space in r0. */
@@ -58,8 +65,9 @@ static const Dwarf_Op loc_aggregate[] =
#define nloc_aggregate 1
-int
-arm_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp)
+static int
+arm_return_value_location_ (Dwarf_Die *functypedie, const Dwarf_Op **locp,
+ int soft_float)
{
/* Start with the function's type, and get the DW_AT_type attribute,
which is the type of the return value. */
@@ -112,14 +120,31 @@ arm_return_value_location (Dwarf_Die *fu
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) && !soft_float)
+ {
+ *locp = loc_fpreg;
+ if (size <= 8)
+ return nloc_fpreg;
+ goto aggregate;
+ }
+ }
if (size <= 16)
{
intreg:
*locp = loc_intreg;
return size <= 4 ? nloc_intreg : nloc_intregs ((size + 3) / 4);
}
+ /* fall through. */
aggregate:
+ /* XXX TODO sometimes aggregates are returned in r0 (-mabi=aapcs) */
*locp = loc_aggregate;
return nloc_aggregate;
@@ -138,3 +163,18 @@ arm_return_value_location (Dwarf_Die *fu
DWARF and might be valid. */
return -2;
}
+
+/* return location for -mabi=apcs-gnu -msoft-float */
+int
+arm_return_value_location_soft (Dwarf_Die *functypedie, const Dwarf_Op **locp)
+{
+ return arm_return_value_location_ (functypedie, locp, 1);
+}
+
+/* return location for -mabi=apcs-gnu -mhard-float (current default) */
+int
+arm_return_value_location_hard (Dwarf_Die *functypedie, const Dwarf_Op **locp)
+{
+ return arm_return_value_location_ (functypedie, locp, 0);
+}
+
Index: elfutils-0.155/libelf/elf.h
===================================================================
--- elfutils-0.155.orig/libelf/elf.h
+++ elfutils-0.155/libelf/elf.h
@@ -2281,6 +2281,9 @@ typedef Elf32_Addr Elf32_Conflict;
#define EF_ARM_EABI_VER4 0x04000000
#define EF_ARM_EABI_VER5 0x05000000
+/* EI_OSABI values */
+#define ELFOSABI_ARM_AEABI 64 /* Contains symbol versioning. */
+
/* Additional symbol types for Thumb. */
#define STT_ARM_TFUNC STT_LOPROC /* A Thumb function. */
#define STT_ARM_16BIT STT_HIPROC /* A Thumb label. */
@@ -2298,12 +2301,19 @@ typedef Elf32_Addr Elf32_Conflict;
/* Processor specific values for the Phdr p_type field. */
#define PT_ARM_EXIDX (PT_LOPROC + 1) /* ARM unwind segment. */
+#define PT_ARM_UNWIND PT_ARM_EXIDX
/* Processor specific values for the Shdr sh_type field. */
#define SHT_ARM_EXIDX (SHT_LOPROC + 1) /* ARM unwind section. */
#define SHT_ARM_PREEMPTMAP (SHT_LOPROC + 2) /* Preemption details. */
#define SHT_ARM_ATTRIBUTES (SHT_LOPROC + 3) /* ARM attributes section. */
+/* Processor specific values for the Dyn d_tag field. */
+#define DT_ARM_RESERVED1 (DT_LOPROC + 0)
+#define DT_ARM_SYMTABSZ (DT_LOPROC + 1)
+#define DT_ARM_PREEMTMAB (DT_LOPROC + 2)
+#define DT_ARM_RESERVED2 (DT_LOPROC + 3)
+#define DT_ARM_NUM 4
/* ARM relocs. */
@@ -2336,12 +2346,75 @@ typedef Elf32_Addr Elf32_Conflict;
#define R_ARM_GOTPC 25 /* 32 bit PC relative offset to GOT */
#define R_ARM_GOT32 26 /* 32 bit GOT entry */
#define R_ARM_PLT32 27 /* 32 bit PLT address */
+#define R_ARM_CALL 28
+#define R_ARM_JUMP24 29
+#define R_ARM_THM_JUMP24 30
+#define R_ARM_BASE_ABS 31
#define R_ARM_ALU_PCREL_7_0 32
#define R_ARM_ALU_PCREL_15_8 33
#define R_ARM_ALU_PCREL_23_15 34
#define R_ARM_LDR_SBREL_11_0 35
#define R_ARM_ALU_SBREL_19_12 36
#define R_ARM_ALU_SBREL_27_20 37
+#define R_ARM_TARGET1 38
+#define R_ARM_SBREL31 39
+#define R_ARM_V4BX 40
+#define R_ARM_TARGET2 41
+#define R_ARM_PREL31 42
+#define R_ARM_MOVW_ABS_NC 43
+#define R_ARM_MOVT_ABS 44
+#define R_ARM_MOVW_PREL_NC 45
+#define R_ARM_MOVT_PREL 46
+#define R_ARM_THM_MOVW_ABS_NC 47
+#define R_ARM_THM_MOVT_ABS 48
+#define R_ARM_THM_MOVW_PREL_NC 49
+#define R_ARM_THM_MOVT_PREL 50
+#define R_ARM_THM_JUMP19 51
+#define R_ARM_THM_JUMP6 52
+#define R_ARM_THM_ALU_PREL_11_0 53
+#define R_ARM_THM_PC12 54
+#define R_ARM_ABS32_NO 55
+#define R_ARM_REL32_NO 56
+#define R_ARM_ALU_PC_G0_NC 57
+#define R_ARM_ALU_PC_G0 58
+#define R_ARM_ALU_PC_G1_NC 59
+#define R_ARM_ALU_PC_G1 60
+#define R_ARM_ALU_PC_G2 61
+#define R_ARM_LDR_PC_G1 62
+#define R_ARM_LDR_PC_G2 63
+#define R_ARM_LDRS_PC_G0 64
+#define R_ARM_LDRS_PC_G1 65
+#define R_ARM_LDRS_PC_G2 66
+#define R_ARM_LDC_PC_G0 67
+#define R_ARM_LDC_PC_G1 68
+#define R_ARM_LDC_PC_G2 69
+#define R_ARM_ALU_SB_G0_NC 70
+#define R_ARM_ALU_SB_G0 71
+#define R_ARM_ALU_SB_G1_NC 72
+#define R_ARM_ALU_SB_G1 73
+#define R_ARM_ALU_SB_G2 74
+#define R_ARM_LDR_SB_G0 75
+#define R_ARM_LDR_SB_G1 76
+#define R_ARM_LDR_SB_G2 77
+#define R_ARM_LDRS_SB_G0 78
+#define R_ARM_LDRS_SB_G1 79
+#define R_ARM_LDRS_SB_G2 80
+#define R_ARM_LDC_G0 81
+#define R_ARM_LDC_G1 82
+#define R_ARM_LDC_G2 83
+#define R_ARM_MOVW_BREL_NC 84
+#define R_ARM_MOVT_BREL 85
+#define R_ARM_MOVW_BREL 86
+#define R_ARM_THM_MOVW_BREL_NC 87
+#define R_ARM_THM_MOVT_BREL 88
+#define R_ARM_THM_MOVW_BREL 89
+/* 90-93 unallocated */
+#define R_ARM_PLT32_ABS 94
+#define R_ARM_GOT_ABS 95
+#define R_ARM_GOT_PREL 96
+#define R_ARM_GOT_BREL12 97
+#define R_ARM_GOTOFF12 98
+#define R_ARM_GOTRELAX 99
#define R_ARM_TLS_GOTDESC 90
#define R_ARM_TLS_CALL 91
#define R_ARM_TLS_DESCSEQ 92
@@ -2360,6 +2433,13 @@ typedef Elf32_Addr Elf32_Conflict;
static TLS block offset */
#define R_ARM_TLS_LE32 108 /* 32 bit offset relative to static
TLS block */
+#define R_ARM_TLS_LDO12 109
+#define R_ARM_TLS_LE12 110
+#define R_ARM_TLS_IE12GP 111
+/* 112 - 127 private range */
+#define R_ARM_ME_TOO 128|/* obsolete */
+
+
#define R_ARM_THM_TLS_DESCSEQ 129
#define R_ARM_IRELATIVE 160
#define R_ARM_RXPC25 249
Index: elfutils-0.155/backends/libebl_arm.h
===================================================================
--- /dev/null
+++ elfutils-0.155/backends/libebl_arm.h
@@ -0,0 +1,9 @@
+#ifndef _LIBEBL_ARM_H
+#define _LIBEBL_ARM_H 1
+
+#include <libdw.h>
+
+extern int arm_return_value_location_soft(Dwarf_Die *, const Dwarf_Op **locp);
+extern int arm_return_value_location_hard(Dwarf_Die *, const Dwarf_Op **locp);
+
+#endif

View File

@ -0,0 +1,215 @@
Upstream-Status: Backport
Generated by copying the whole dir, running `sh debian/autogen.sh` and diffing.
Index: elfutils-0.155/backends/Makefile.in
===================================================================
--- elfutils-0.155.orig/backends/Makefile.in
+++ elfutils-0.155/backends/Makefile.in
@@ -78,39 +78,54 @@ libebl_ia64_pic_a_LIBADD =
am__objects_4 = ia64_init.$(OBJEXT) ia64_symbol.$(OBJEXT) \
ia64_regs.$(OBJEXT) ia64_retval.$(OBJEXT)
libebl_ia64_pic_a_OBJECTS = $(am_libebl_ia64_pic_a_OBJECTS)
+libebl_m68k_pic_a_AR = $(AR) $(ARFLAGS)
+libebl_m68k_pic_a_LIBADD =
+am__objects_5 = m68k_init.$(OBJEXT) m68k_symbol.$(OBJEXT) \
+ m68k_regs.$(OBJEXT)
+libebl_m68k_pic_a_OBJECTS = $(am_libebl_m68k_pic_a_OBJECTS)
+libebl_mips_pic_a_AR = $(AR) $(ARFLAGS)
+libebl_mips_pic_a_LIBADD =
+am__objects_6 = mips_init.$(OBJEXT) mips_symbol.$(OBJEXT) \
+ mips_regs.$(OBJEXT) mips_retval.$(OBJEXT)
+libebl_mips_pic_a_OBJECTS = $(am_libebl_mips_pic_a_OBJECTS)
+libebl_parisc_pic_a_AR = $(AR) $(ARFLAGS)
+libebl_parisc_pic_a_LIBADD =
+am__objects_7 = parisc_init.$(OBJEXT) parisc_symbol.$(OBJEXT) \
+ parisc_regs.$(OBJEXT) parisc_retval.$(OBJEXT)
+libebl_parisc_pic_a_OBJECTS = $(am_libebl_parisc_pic_a_OBJECTS)
libebl_ppc64_pic_a_AR = $(AR) $(ARFLAGS)
libebl_ppc64_pic_a_LIBADD =
-am__objects_5 = ppc64_init.$(OBJEXT) ppc64_symbol.$(OBJEXT) \
+am__objects_8 = ppc64_init.$(OBJEXT) ppc64_symbol.$(OBJEXT) \
ppc64_retval.$(OBJEXT) ppc64_corenote.$(OBJEXT) \
ppc_regs.$(OBJEXT) ppc_auxv.$(OBJEXT) ppc_attrs.$(OBJEXT) \
ppc_syscall.$(OBJEXT)
libebl_ppc64_pic_a_OBJECTS = $(am_libebl_ppc64_pic_a_OBJECTS)
libebl_ppc_pic_a_AR = $(AR) $(ARFLAGS)
libebl_ppc_pic_a_LIBADD =
-am__objects_6 = ppc_init.$(OBJEXT) ppc_symbol.$(OBJEXT) \
+am__objects_9 = ppc_init.$(OBJEXT) ppc_symbol.$(OBJEXT) \
ppc_retval.$(OBJEXT) ppc_regs.$(OBJEXT) ppc_corenote.$(OBJEXT) \
ppc_auxv.$(OBJEXT) ppc_attrs.$(OBJEXT) ppc_syscall.$(OBJEXT)
libebl_ppc_pic_a_OBJECTS = $(am_libebl_ppc_pic_a_OBJECTS)
libebl_s390_pic_a_AR = $(AR) $(ARFLAGS)
libebl_s390_pic_a_LIBADD =
-am__objects_7 = s390_init.$(OBJEXT) s390_symbol.$(OBJEXT) \
+am__objects_10 = s390_init.$(OBJEXT) s390_symbol.$(OBJEXT) \
s390_regs.$(OBJEXT) s390_retval.$(OBJEXT)
libebl_s390_pic_a_OBJECTS = $(am_libebl_s390_pic_a_OBJECTS)
libebl_sh_pic_a_AR = $(AR) $(ARFLAGS)
libebl_sh_pic_a_LIBADD =
-am__objects_8 = sh_init.$(OBJEXT) sh_symbol.$(OBJEXT) \
+am__objects_11 = sh_init.$(OBJEXT) sh_symbol.$(OBJEXT) \
sh_corenote.$(OBJEXT) sh_regs.$(OBJEXT) sh_retval.$(OBJEXT)
libebl_sh_pic_a_OBJECTS = $(am_libebl_sh_pic_a_OBJECTS)
libebl_sparc_pic_a_AR = $(AR) $(ARFLAGS)
libebl_sparc_pic_a_LIBADD =
-am__objects_9 = sparc_init.$(OBJEXT) sparc_symbol.$(OBJEXT) \
+am__objects_12 = sparc_init.$(OBJEXT) sparc_symbol.$(OBJEXT) \
sparc_regs.$(OBJEXT) sparc_retval.$(OBJEXT) \
sparc_corenote.$(OBJEXT) sparc64_corenote.$(OBJEXT) \
sparc_auxv.$(OBJEXT)
libebl_sparc_pic_a_OBJECTS = $(am_libebl_sparc_pic_a_OBJECTS)
libebl_tilegx_pic_a_AR = $(AR) $(ARFLAGS)
libebl_tilegx_pic_a_LIBADD =
-am__objects_10 = tilegx_init.$(OBJEXT) tilegx_symbol.$(OBJEXT) \
+am__objects_13 = x86_64_init.$(OBJEXT) x86_64_symbol.$(OBJEXT) \
tilegx_regs.$(OBJEXT) tilegx_retval.$(OBJEXT) \
tilegx_corenote.$(OBJEXT)
libebl_tilegx_pic_a_OBJECTS = $(am_libebl_tilegx_pic_a_OBJECTS)
@@ -131,16 +146,18 @@ CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(libebl_alpha_pic_a_SOURCES) $(libebl_arm_pic_a_SOURCES) \
$(libebl_i386_pic_a_SOURCES) $(libebl_ia64_pic_a_SOURCES) \
- $(libebl_ppc64_pic_a_SOURCES) $(libebl_ppc_pic_a_SOURCES) \
- $(libebl_s390_pic_a_SOURCES) $(libebl_sh_pic_a_SOURCES) \
- $(libebl_sparc_pic_a_SOURCES) $(libebl_tilegx_pic_a_SOURCES) \
+ $(libebl_m68k_pic_a_SOURCES) $(libebl_mips_pic_a_SOURCES) \
+ $(libebl_parisc_pic_a_SOURCES) $(libebl_ppc64_pic_a_SOURCES) \
+ $(libebl_ppc_pic_a_SOURCES) $(libebl_s390_pic_a_SOURCES) \
+ $(libebl_sh_pic_a_SOURCES) $(libebl_sparc_pic_a_SOURCES) \
$(libebl_x86_64_pic_a_SOURCES)
DIST_SOURCES = $(libebl_alpha_pic_a_SOURCES) \
$(libebl_arm_pic_a_SOURCES) $(libebl_i386_pic_a_SOURCES) \
- $(libebl_ia64_pic_a_SOURCES) $(libebl_ppc64_pic_a_SOURCES) \
- $(libebl_ppc_pic_a_SOURCES) $(libebl_s390_pic_a_SOURCES) \
- $(libebl_sh_pic_a_SOURCES) $(libebl_sparc_pic_a_SOURCES) \
- $(libebl_tilegx_pic_a_SOURCES) $(libebl_x86_64_pic_a_SOURCES)
+ $(libebl_ia64_pic_a_SOURCES) $(libebl_m68k_pic_a_SOURCES) \
+ $(libebl_mips_pic_a_SOURCES) $(libebl_parisc_pic_a_SOURCES) \
+ $(libebl_ppc64_pic_a_SOURCES) $(libebl_ppc_pic_a_SOURCES) \
+ $(libebl_s390_pic_a_SOURCES) $(libebl_sh_pic_a_SOURCES) \
+ $(libebl_sparc_pic_a_SOURCES) $(libebl_x86_64_pic_a_SOURCES)
DATA = $(noinst_DATA)
HEADERS = $(noinst_HEADERS)
ETAGS = etags
@@ -277,11 +294,12 @@ COMPILE.os = $(filter-out -fprofile-arcs
CLEANFILES = *.gcno *.gcda $(foreach m,$(modules), libebl_$(m).map \
libebl_$(m).so $(am_libebl_$(m)_pic_a_OBJECTS))
textrel_check = if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi
-modules = i386 sh x86_64 ia64 alpha arm sparc ppc ppc64 s390 tilegx
+modules = i386 sh x86_64 ia64 alpha arm sparc ppc ppc64 s390 tilegx parisc mips m68k
libebl_pic = libebl_i386_pic.a libebl_sh_pic.a libebl_x86_64_pic.a \
libebl_ia64_pic.a libebl_alpha_pic.a libebl_arm_pic.a \
libebl_sparc_pic.a libebl_ppc_pic.a libebl_ppc64_pic.a \
- libebl_s390_pic.a libebl_tilegx_pic.a
+ libebl_s390_pic.a libebl_parisc_pic.a libebl_mips_pic.a \
+ libebl_tilegx_pic.a libebl_m68k_pic.a
noinst_LIBRARIES = $(libebl_pic)
noinst_DATA = $(libebl_pic:_pic.a=.so)
@@ -298,46 +316,60 @@ am_libebl_i386_pic_a_OBJECTS = $(i386_SR
sh_SRCS = sh_init.c sh_symbol.c sh_corenote.c sh_regs.c sh_retval.c
libebl_sh_pic_a_SOURCES = $(sh_SRCS)
am_libebl_sh_pic_a_OBJECTS = $(sh_SRCS:.c=.os)
+
x86_64_SRCS = x86_64_init.c x86_64_symbol.c x86_64_corenote.c x86_64_cfi.c \
x86_64_retval.c x86_64_regs.c i386_auxv.c x86_64_syscall.c
-
cpu_x86_64 = ../libcpu/libcpu_x86_64.a
libebl_x86_64_pic_a_SOURCES = $(x86_64_SRCS)
am_libebl_x86_64_pic_a_OBJECTS = $(x86_64_SRCS:.c=.os)
+
ia64_SRCS = ia64_init.c ia64_symbol.c ia64_regs.c ia64_retval.c
libebl_ia64_pic_a_SOURCES = $(ia64_SRCS)
am_libebl_ia64_pic_a_OBJECTS = $(ia64_SRCS:.c=.os)
+
alpha_SRCS = alpha_init.c alpha_symbol.c alpha_retval.c alpha_regs.c \
alpha_corenote.c alpha_auxv.c
-
libebl_alpha_pic_a_SOURCES = $(alpha_SRCS)
am_libebl_alpha_pic_a_OBJECTS = $(alpha_SRCS:.c=.os)
+
arm_SRCS = arm_init.c arm_symbol.c arm_regs.c arm_corenote.c \
arm_auxv.c arm_attrs.c arm_retval.c
-
libebl_arm_pic_a_SOURCES = $(arm_SRCS)
am_libebl_arm_pic_a_OBJECTS = $(arm_SRCS:.c=.os)
+
sparc_SRCS = sparc_init.c sparc_symbol.c sparc_regs.c sparc_retval.c \
sparc_corenote.c sparc64_corenote.c sparc_auxv.c
-
libebl_sparc_pic_a_SOURCES = $(sparc_SRCS)
am_libebl_sparc_pic_a_OBJECTS = $(sparc_SRCS:.c=.os)
+
ppc_SRCS = ppc_init.c ppc_symbol.c ppc_retval.c ppc_regs.c \
ppc_corenote.c ppc_auxv.c ppc_attrs.c ppc_syscall.c
-
libebl_ppc_pic_a_SOURCES = $(ppc_SRCS)
am_libebl_ppc_pic_a_OBJECTS = $(ppc_SRCS:.c=.os)
+
ppc64_SRCS = ppc64_init.c ppc64_symbol.c ppc64_retval.c \
ppc64_corenote.c ppc_regs.c ppc_auxv.c ppc_attrs.c ppc_syscall.c
-
libebl_ppc64_pic_a_SOURCES = $(ppc64_SRCS)
am_libebl_ppc64_pic_a_OBJECTS = $(ppc64_SRCS:.c=.os)
+
s390_SRCS = s390_init.c s390_symbol.c s390_regs.c s390_retval.c
libebl_s390_pic_a_SOURCES = $(s390_SRCS)
am_libebl_s390_pic_a_OBJECTS = $(s390_SRCS:.c=.os)
+
+parisc_SRCS = parisc_init.c parisc_symbol.c parisc_regs.c parisc_retval.c
+libebl_parisc_pic_a_SOURCES = $(parisc_SRCS)
+am_libebl_parisc_pic_a_OBJECTS = $(parisc_SRCS:.c=.os)
+
+mips_SRCS = mips_init.c mips_symbol.c mips_regs.c mips_retval.c
+libebl_mips_pic_a_SOURCES = $(mips_SRCS)
+am_libebl_mips_pic_a_OBJECTS = $(mips_SRCS:.c=.os)
+
+m68k_SRCS = m68k_init.c m68k_symbol.c m68k_regs.c
+libebl_m68k_pic_a_SOURCES = $(m68k_SRCS)
+am_libebl_m68k_pic_a_OBJECTS = $(m68k_SRCS:.c=.os)
+
tilegx_SRCS = tilegx_init.c tilegx_symbol.c tilegx_regs.c \
tilegx_retval.c tilegx_corenote.c
-
libebl_tilegx_pic_a_SOURCES = $(tilegx_SRCS)
am_libebl_tilegx_pic_a_OBJECTS = $(tilegx_SRCS:.c=.os)
noinst_HEADERS = libebl_CPU.h common-reloc.c linux-core-note.c x86_corenote.c
@@ -396,6 +428,18 @@ libebl_ia64_pic.a: $(libebl_ia64_pic_a_O
-rm -f libebl_ia64_pic.a
$(libebl_ia64_pic_a_AR) libebl_ia64_pic.a $(libebl_ia64_pic_a_OBJECTS) $(libebl_ia64_pic_a_LIBADD)
$(RANLIB) libebl_ia64_pic.a
+libebl_m68k_pic.a: $(libebl_m68k_pic_a_OBJECTS) $(libebl_m68k_pic_a_DEPENDENCIES)
+ -rm -f libebl_m68k_pic.a
+ $(libebl_m68k_pic_a_AR) libebl_m68k_pic.a $(libebl_m68k_pic_a_OBJECTS) $(libebl_m68k_pic_a_LIBADD)
+ $(RANLIB) libebl_m68k_pic.a
+libebl_mips_pic.a: $(libebl_mips_pic_a_OBJECTS) $(libebl_mips_pic_a_DEPENDENCIES)
+ -rm -f libebl_mips_pic.a
+ $(libebl_mips_pic_a_AR) libebl_mips_pic.a $(libebl_mips_pic_a_OBJECTS) $(libebl_mips_pic_a_LIBADD)
+ $(RANLIB) libebl_mips_pic.a
+libebl_parisc_pic.a: $(libebl_parisc_pic_a_OBJECTS) $(libebl_parisc_pic_a_DEPENDENCIES)
+ -rm -f libebl_parisc_pic.a
+ $(libebl_parisc_pic_a_AR) libebl_parisc_pic.a $(libebl_parisc_pic_a_OBJECTS) $(libebl_parisc_pic_a_LIBADD)
+ $(RANLIB) libebl_parisc_pic.a
libebl_ppc64_pic.a: $(libebl_ppc64_pic_a_OBJECTS) $(libebl_ppc64_pic_a_DEPENDENCIES) $(EXTRA_libebl_ppc64_pic_a_DEPENDENCIES)
-rm -f libebl_ppc64_pic.a
$(libebl_ppc64_pic_a_AR) libebl_ppc64_pic.a $(libebl_ppc64_pic_a_OBJECTS) $(libebl_ppc64_pic_a_LIBADD)
@@ -456,6 +500,17 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ia64_regs.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ia64_retval.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ia64_symbol.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/m68k_init.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/m68k_regs.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/m68k_symbol.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mips_init.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mips_regs.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mips_retval.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mips_symbol.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parisc_init.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parisc_regs.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parisc_retval.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parisc_symbol.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc64_corenote.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc64_init.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc64_retval.Po@am__quote@

View File

@ -0,0 +1,32 @@
Upstream-Status: Pending
# This patch makes the link to the dependencies of libdw explicit, as recent
# ld no longer implicitly links them. See
# http://lists.fedoraproject.org/pipermail/devel/2010-March/133601.html as
# a similar example of the error message you can encounter without this patch,
# and https://fedoraproject.org/wiki/UnderstandingDSOLinkChange and
# https://fedoraproject.org/wiki/Features/ChangeInImplicitDSOLinking for more
# details.
--- elfutils-0.155.orig/src/Makefile.am
+++ elfutils-0.155/src/Makefile.am
@@ -86,7 +86,7 @@ libdw = ../libdw/libdw.a $(zip_LIBS) $(l
libelf = ../libelf/libelf.a
else
libasm = ../libasm/libasm.so
-libdw = ../libdw/libdw.so
+libdw = ../libdw/libdw.so $(zip_LIBS) $(libelf) $(libebl) -ldl
libelf = ../libelf/libelf.so
endif
libebl = ../libebl/libebl.a
--- elfutils-0.155.orig/tests/Makefile.am
+++ elfutils-0.155/tests/Makefile.am
@@ -172,7 +172,7 @@ libdw = ../libdw/libdw.a $(zip_LIBS) $(l
libelf = ../libelf/libelf.a
libasm = ../libasm/libasm.a
else
-libdw = ../libdw/libdw.so
+libdw = ../libdw/libdw.so $(zip_LIBS) $(libelf) $(libebl) -ldl
libelf = ../libelf/libelf.so
libasm = ../libasm/libasm.so
endif

View File

@ -0,0 +1,61 @@
Upstream-Status: Backport
Index: elfutils-0.155/libelf/elf.h
===================================================================
--- elfutils-0.155.orig/libelf/elf.h
+++ elfutils-0.155/libelf/elf.h
@@ -149,8 +149,13 @@ typedef struct
#define ELFOSABI_TRU64 10 /* Compaq TRU64 UNIX. */
#define ELFOSABI_MODESTO 11 /* Novell Modesto. */
#define ELFOSABI_OPENBSD 12 /* OpenBSD. */
+#define ELFOSABI_OPENVMS 13 /* OpenVMS */
+#define ELFOSABI_NSK 14 /* Hewlett-Packard Non-Stop Kernel */
+#define ELFOSABI_AROS 15 /* Amiga Research OS */
+/* 64-255 Architecture-specific value range */
#define ELFOSABI_ARM_AEABI 64 /* ARM EABI */
#define ELFOSABI_ARM 97 /* ARM */
+/* This is deprecated? It's not in the latest version anymore. */
#define ELFOSABI_STANDALONE 255 /* Standalone (embedded) application */
#define EI_ABIVERSION 8 /* ABI version */
@@ -205,7 +210,7 @@ typedef struct
#define EM_H8_300H 47 /* Hitachi H8/300H */
#define EM_H8S 48 /* Hitachi H8S */
#define EM_H8_500 49 /* Hitachi H8/500 */
-#define EM_IA_64 50 /* Intel Merced */
+#define EM_IA_64 50 /* Intel IA64 */
#define EM_MIPS_X 51 /* Stanford MIPS-X */
#define EM_COLDFIRE 52 /* Motorola Coldfire */
#define EM_68HC12 53 /* Motorola M68HC12 */
@@ -219,7 +224,8 @@ typedef struct
#define EM_TINYJ 61 /* Advanced Logic Corp. Tinyj emb.fam*/
#define EM_X86_64 62 /* AMD x86-64 architecture */
#define EM_PDSP 63 /* Sony DSP Processor */
-
+#define EM_PDP10 64 /* Digital Equipment Corp. PDP-10 */
+#define EM_PDP11 65 /* Digital Equipment Corp. PDP-11 */
#define EM_FX66 66 /* Siemens FX66 microcontroller */
#define EM_ST9PLUS 67 /* STMicroelectronics ST9+ 8/16 mc */
#define EM_ST7 68 /* STmicroelectronics ST7 8 bit mc */
@@ -249,6 +255,21 @@ typedef struct
#define EM_OPENRISC 92 /* OpenRISC 32-bit embedded processor */
#define EM_ARC_A5 93 /* ARC Cores Tangent-A5 */
#define EM_XTENSA 94 /* Tensilica Xtensa Architecture */
+#define EM_VIDEOCORE 95 /* Alphamosaic VideoCore processor */
+#define EM_TMM_GPP 96 /* Thompson Multimedia General Purpose Processor */
+#define EM_NS32K 97 /* National Semiconductor 32000 series */
+#define EM_TPC 98 /* Tenor Network TPC processor */
+#define EM_SNP1K 99 /* Trebia SNP 1000 processor */
+#define EM_ST200 100 /* STMicroelectronics (www.st.com) ST200 microcontroller */
+#define EM_IP2K 101 /* Ubicom IP2XXX microcontroller family */
+#define EM_MAX 102 /* MAX Processor */
+#define EM_CR 103 /* National Semiconductor CompactRISC */
+#define EM_F2MC16 104 /* Fujitsu F2MC16 */
+#define EM_MSP430 105 /* TI msp430 micro controller */
+#define EM_BLACKFIN 106 /* Analog Devices Blackfin (DSP) processor */
+#define EM_SE_C33 107 /* S1C33 Family of Seiko Epson processors */
+#define EM_SEP 108 /* Sharp embedded microprocessor */
+#define EM_ARCA 109 /* Arca RISC Microprocessor */
#define EM_TILEPRO 188 /* Tilera TILEPro */
#define EM_TILEGX 191 /* Tilera TILE-Gx */
#define EM_NUM 192

View File

@ -0,0 +1,23 @@
Upstream-Status: Backport
ar.c (do_oper_delete): Fix num passed to memset
native build failed as following on Fedora18+:
ar.c: In function 'do_oper_delete':
ar.c:918:31: error: argument to 'sizeof' in 'memset' call is the same expression as the destination; did you mean to dereference it? [-Werror=sizeof-pointer-memaccess]
memset (found, '\0', sizeof (found));
^
The original commit is http://git.fedorahosted.org/cgit/elfutils.git/commit/src/ar.c?id=1a4d0668d18bf1090c5c08cdb5cb3ba2b8eb5410
Signed-off-by: Zhenhua Luo <zhenhua.luo@freescale.com>
--- elfutils-0.155/src/ar.c.org 2013-03-12 21:12:17.928281375 -0500
+++ elfutils-0.155/src/ar.c 2013-03-12 21:15:30.053285271 -0500
@@ -915,7 +915,7 @@
long int instance)
{
bool *found = alloca (sizeof (bool) * argc);
- memset (found, '\0', sizeof (found));
+ memset (found, '\0', sizeof (bool) * argc);
/* List of the files we keep. */
struct armem *to_copy = NULL;

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,796 @@
Upstream-Status: Backport
Index: elfutils-0.155/backends/parisc_init.c
===================================================================
--- /dev/null
+++ elfutils-0.155/backends/parisc_init.c
@@ -0,0 +1,74 @@
+/* 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, machine, eh, ehlen)
+ 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;
+}
Index: elfutils-0.155/backends/parisc_regs.c
===================================================================
--- /dev/null
+++ elfutils-0.155/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;
+}
Index: elfutils-0.155/backends/parisc_reloc.def
===================================================================
--- /dev/null
+++ elfutils-0.155/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
Index: elfutils-0.155/backends/parisc_retval.c
===================================================================
--- /dev/null
+++ elfutils-0.155/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 || tag == DW_TAG_mutable_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);
+}
+
Index: elfutils-0.155/backends/parisc_symbol.c
===================================================================
--- /dev/null
+++ elfutils-0.155/backends/parisc_symbol.c
@@ -0,0 +1,112 @@
+/* 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)
+{
+ 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;
+ }
+}
Index: elfutils-0.155/backends/libebl_parisc.h
===================================================================
--- /dev/null
+++ elfutils-0.155/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
Index: elfutils-0.155/backends/Makefile.am
===================================================================
--- elfutils-0.155.orig/backends/Makefile.am
+++ elfutils-0.155/backends/Makefile.am
@@ -32,7 +32,7 @@ INCLUDES += -I$(top_srcdir)/libebl -I$(t
-I$(top_srcdir)/libelf -I$(top_srcdir)/libdw
-modules = i386 sh x86_64 ia64 alpha arm sparc ppc ppc64 s390 tilegx
+modules = i386 sh x86_64 ia64 alpha arm sparc ppc ppc64 s390 tilegx parisc
libebl_pic = libebl_i386_pic.a libebl_sh_pic.a libebl_x86_64_pic.a \
libebl_ia64_pic.a libebl_alpha_pic.a libebl_arm_pic.a \
libebl_sparc_pic.a libebl_ppc_pic.a libebl_ppc64_pic.a \
@@ -103,6 +103,9 @@ tilegx_SRCS = tilegx_init.c tilegx_symbo
libebl_tilegx_pic_a_SOURCES = $(tilegx_SRCS)
am_libebl_tilegx_pic_a_OBJECTS = $(tilegx_SRCS:.c=.os)
+parisc_SRCS = parisc_init.c parisc_symbol.c parisc_regs.c parisc_retval.c
+libebl_parisc_pic_a_SOURCES = $(parisc_SRCS)
+am_libebl_parisc_pic_a_OBJECTS = $(parisc_SRCS:.c=.os)
libebl_%.so libebl_%.map: libebl_%_pic.a $(libelf) $(libdw)
@rm -f $(@:.so=.map)
Index: elfutils-0.155/libelf/elf.h
===================================================================
--- elfutils-0.155.orig/libelf/elf.h
+++ elfutils-0.155/libelf/elf.h
@@ -1780,16 +1780,24 @@ typedef Elf32_Addr Elf32_Conflict;
#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. */
@@ -1798,6 +1806,7 @@ typedef Elf32_Addr Elf32_Conflict;
#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. */
@@ -1823,6 +1832,8 @@ typedef Elf32_Addr Elf32_Conflict;
#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. */

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,303 @@
Upstream-Status: Backport
Index: elfutils-0.155/backends/m68k_init.c
===================================================================
--- /dev/null
+++ elfutils-0.155/backends/m68k_init.c
@@ -0,0 +1,49 @@
+/* Initialization of m68k specific backend library.
+ Copyright (C) 2007 Kurt Roeckx <kurt@roeckx.be>
+
+ This software 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.
+
+ This softare 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 this software; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
+
+*/
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#define BACKEND m68k_
+#define RELOC_PREFIX R_68K_
+#include "libebl_CPU.h"
+
+/* This defines the common reloc hooks based on m68k_reloc.def. */
+#include "common-reloc.c"
+
+
+const char *
+m68k_init (elf, machine, eh, ehlen)
+ Elf *elf __attribute__ ((unused));
+ GElf_Half machine __attribute__ ((unused));
+ Ebl *eh;
+ size_t ehlen;
+{
+ /* Check whether the Elf_BH object has a sufficent size. */
+ if (ehlen < sizeof (Ebl))
+ return NULL;
+
+ /* We handle it. */
+ eh->name = "m68k";
+ m68k_init_reloc (eh);
+ HOOK (eh, reloc_simple_type);
+ HOOK (eh, register_info);
+
+ return MODVERSION;
+}
Index: elfutils-0.155/backends/m68k_regs.c
===================================================================
--- /dev/null
+++ elfutils-0.155/backends/m68k_regs.c
@@ -0,0 +1,106 @@
+/* Register names and numbers for m68k DWARF.
+ Copyright (C) 2007 Kurt Roeckx <kurt@roeckx.be>
+
+ This software 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.
+
+ This software 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 this software; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
+
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <string.h>
+#include <dwarf.h>
+
+#define BACKEND m68k_
+#include "libebl_CPU.h"
+
+ssize_t
+m68k_register_info (Ebl *ebl __attribute__ ((unused)),
+ int regno, char *name, size_t namelen,
+ const char **prefix, const char **setname,
+ int *bits, int *type)
+{
+ if (name == NULL)
+ return 25;
+
+ if (regno < 0 || regno > 24 || namelen < 5)
+ return -1;
+
+ *prefix = "%";
+ *bits = 32;
+ *type = (regno < 8 ? DW_ATE_signed
+ : regno < 16 ? DW_ATE_address : DW_ATE_float);
+
+ if (regno < 8)
+ {
+ *setname = "integer";
+ }
+ else if (regno < 16)
+ {
+ *setname = "address";
+ }
+ else if (regno < 24)
+ {
+ *setname = "FPU";
+ }
+ else
+ {
+ *setname = "address";
+ *type = DW_ATE_address;
+ }
+
+ switch (regno)
+ {
+ case 0 ... 7:
+ name[0] = 'd';
+ name[1] = regno + '0';
+ namelen = 2;
+ break;
+
+ case 8 ... 13:
+ name[0] = 'a';
+ name[1] = regno - 8 + '0';
+ namelen = 2;
+ break;
+
+ case 14:
+ name[0] = 'f';
+ name[1] = 'p';
+ namelen = 2;
+ break;
+
+ case 15:
+ name[0] = 's';
+ name[1] = 'p';
+ namelen = 2;
+ break;
+
+ case 16 ... 23:
+ name[0] = 'f';
+ name[1] = 'p';
+ name[2] = regno - 16 + '0';
+ namelen = 3;
+ break;
+
+ case 24:
+ name[0] = 'p';
+ name[1] = 'c';
+ namelen = 2;
+ }
+
+ name[namelen++] = '\0';
+ return namelen;
+}
+
Index: elfutils-0.155/backends/m68k_reloc.def
===================================================================
--- /dev/null
+++ elfutils-0.155/backends/m68k_reloc.def
@@ -0,0 +1,45 @@
+/* List the relocation types for m68k. -*- C -*-
+ Copyright (C) 2007 Kurt Roeckx <kurt@roeckx.be>
+
+ This software 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.
+
+ This software 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 this software; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
+*/
+
+/* NAME, REL|EXEC|DYN */
+
+RELOC_TYPE (NONE, 0)
+RELOC_TYPE (32, REL|EXEC|DYN)
+RELOC_TYPE (16, REL)
+RELOC_TYPE (8, REL)
+RELOC_TYPE (PC32, REL|EXEC|DYN)
+RELOC_TYPE (PC16, REL)
+RELOC_TYPE (PC8, REL)
+RELOC_TYPE (GOT32, REL)
+RELOC_TYPE (GOT16, REL)
+RELOC_TYPE (GOT8, REL)
+RELOC_TYPE (GOT32O, REL)
+RELOC_TYPE (GOT16O, REL)
+RELOC_TYPE (GOT8O, REL)
+RELOC_TYPE (PLT32, REL)
+RELOC_TYPE (PLT16, REL)
+RELOC_TYPE (PLT8, REL)
+RELOC_TYPE (PLT32O, REL)
+RELOC_TYPE (PLT16O, REL)
+RELOC_TYPE (PLT8O, REL)
+RELOC_TYPE (COPY, EXEC)
+RELOC_TYPE (GLOB_DAT, EXEC|DYN)
+RELOC_TYPE (JMP_SLOT, EXEC|DYN)
+RELOC_TYPE (RELATIVE, EXEC|DYN)
+RELOC_TYPE (GNU_VTINHERIT, REL)
+RELOC_TYPE (GNU_VTENTRY, REL)
+
Index: elfutils-0.155/libelf/elf.h
===================================================================
--- elfutils-0.155.orig/libelf/elf.h
+++ elfutils-0.155/libelf/elf.h
@@ -1126,6 +1126,9 @@ typedef struct
#define R_68K_GLOB_DAT 20 /* Create GOT entry */
#define R_68K_JMP_SLOT 21 /* Create PLT entry */
#define R_68K_RELATIVE 22 /* Adjust by program base */
+/* The next 2 are GNU extensions to enable C++ vtable garbage collection. */
+#define R_68K_GNU_VTINHERIT 23
+#define R_68K_GNU_VTENTRY 24
#define R_68K_TLS_GD32 25 /* 32 bit GOT offset for GD */
#define R_68K_TLS_GD16 26 /* 16 bit GOT offset for GD */
#define R_68K_TLS_GD8 27 /* 8 bit GOT offset for GD */
Index: elfutils-0.155/backends/Makefile.am
===================================================================
--- elfutils-0.155.orig/backends/Makefile.am
+++ elfutils-0.155/backends/Makefile.am
@@ -32,7 +32,7 @@ INCLUDES += -I$(top_srcdir)/libebl -I$(t
-I$(top_srcdir)/libelf -I$(top_srcdir)/libdw
-modules = i386 sh x86_64 ia64 alpha arm sparc ppc ppc64 s390 tilegx parisc mips
+modules = i386 sh x86_64 ia64 alpha arm sparc ppc ppc64 s390 tilegx parisc mips m68k
libebl_pic = libebl_i386_pic.a libebl_sh_pic.a libebl_x86_64_pic.a \
libebl_ia64_pic.a libebl_alpha_pic.a libebl_arm_pic.a \
libebl_sparc_pic.a libebl_ppc_pic.a libebl_ppc64_pic.a \
@@ -111,6 +111,10 @@ mips_SRCS = mips_init.c mips_symbol.c mi
libebl_mips_pic_a_SOURCES = $(mips_SRCS)
am_libebl_mips_pic_a_OBJECTS = $(mips_SRCS:.c=.os)
+m68k_SRCS = m68k_init.c m68k_symbol.c m68k_regs.c
+libebl_m68k_pic_a_SOURCES = $(m68k_SRCS)
+am_libebl_m68k_pic_a_OBJECTS = $(m68k_SRCS:.c=.os)
+
libebl_%.so libebl_%.map: libebl_%_pic.a $(libelf) $(libdw)
@rm -f $(@:.so=.map)
echo 'ELFUTILS_$(PACKAGE_VERSION) { global: $*_init; local: *; };' \
Index: elfutils-0.155/backends/m68k_symbol.c
===================================================================
--- /dev/null
+++ elfutils-0.155/backends/m68k_symbol.c
@@ -0,0 +1,43 @@
+/* m68k specific symbolic name handling.
+ Copyright (C) 2007 Kurt Roeckx <kurt@roeckx.be>
+
+ This software 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.
+
+ This software 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 this software; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
+*/
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <elf.h>
+#include <stddef.h>
+
+#define BACKEND m68k_
+#include "libebl_CPU.h"
+
+/* Check for the simple reloc types. */
+Elf_Type
+m68k_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type)
+{
+ switch (type)
+ {
+ case R_68K_32:
+ return ELF_T_SWORD;
+ case R_68K_16:
+ return ELF_T_HALF;
+ case R_68K_8:
+ return ELF_T_BYTE;
+ default:
+ return ELF_T_NUM;
+ }
+}

View File

@ -0,0 +1,24 @@
uclibc does not export __mempcpy like glibc so we alias it here.
This patch may make sense for upstream but elfutils uses more
glibc specific features like obstack_printf which are missing in
uclibc they need to be fixed along to make it work all the way
Upstream-Status: Inappropriate[Elfutils uses more glibc specific features]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Index: elfutils-0.155/libelf/elf_begin.c
===================================================================
--- elfutils-0.155.orig/libelf/elf_begin.c
+++ elfutils-0.155/libelf/elf_begin.c
@@ -68,6 +68,9 @@
#include "libelfP.h"
#include "common.h"
+#ifdef __UCLIBC__
+#define __mempcpy mempcpy
+#endif
/* Create descriptor for archive in memory. */
static inline Elf *

View File

@ -0,0 +1,708 @@
Upstream-Status: Backport
Index: elfutils-0.155/backends/mips_init.c
===================================================================
--- /dev/null
+++ elfutils-0.155/backends/mips_init.c
@@ -0,0 +1,60 @@
+/* Initialization of mips specific backend library.
+ Copyright (C) 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
+
+#define BACKEND mips_
+#define RELOC_PREFIX R_MIPS_
+#include "libebl_CPU.h"
+
+/* This defines the common reloc hooks based on mips_reloc.def. */
+#include "common-reloc.c"
+
+const char *
+mips_init (elf, machine, eh, ehlen)
+ Elf *elf __attribute__ ((unused));
+ GElf_Half machine __attribute__ ((unused));
+ Ebl *eh;
+ size_t ehlen;
+{
+ /* Check whether the Elf_BH object has a sufficent size. */
+ if (ehlen < sizeof (Ebl))
+ return NULL;
+
+ /* We handle it. */
+ if (machine == EM_MIPS)
+ eh->name = "MIPS R3000 big-endian";
+ else if (machine == EM_MIPS_RS3_LE)
+ eh->name = "MIPS R3000 little-endian";
+
+ mips_init_reloc (eh);
+ HOOK (eh, reloc_simple_type);
+ HOOK (eh, return_value_location);
+ HOOK (eh, register_info);
+
+ return MODVERSION;
+}
Index: elfutils-0.155/backends/mips_regs.c
===================================================================
--- /dev/null
+++ elfutils-0.155/backends/mips_regs.c
@@ -0,0 +1,104 @@
+/* Register names and numbers for MIPS DWARF.
+ Copyright (C) 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 mips_
+#include "libebl_CPU.h"
+
+ssize_t
+mips_register_info (Ebl *ebl __attribute__((unused)),
+ int regno, char *name, size_t namelen,
+ const char **prefix, const char **setname,
+ int *bits, int *type)
+{
+ if (name == NULL)
+ return 66;
+
+ if (regno < 0 || regno > 65 || namelen < 4)
+ return -1;
+
+ *prefix = "$";
+
+ if (regno < 32)
+ {
+ *setname = "integer";
+ *type = DW_ATE_signed;
+ *bits = 32;
+ if (regno < 32 + 10)
+ {
+ name[0] = regno + '0';
+ namelen = 1;
+ }
+ else
+ {
+ name[0] = (regno / 10) + '0';
+ name[1] = (regno % 10) + '0';
+ namelen = 2;
+ }
+ }
+ else if (regno < 64)
+ {
+ *setname = "FPU";
+ *type = DW_ATE_float;
+ *bits = 32;
+ name[0] = 'f';
+ if (regno < 32 + 10)
+ {
+ name[1] = (regno - 32) + '0';
+ namelen = 2;
+ }
+ else
+ {
+ name[1] = (regno - 32) / 10 + '0';
+ name[2] = (regno - 32) % 10 + '0';
+ namelen = 3;
+ }
+ }
+ else if (regno == 64)
+ {
+ *type = DW_ATE_signed;
+ *bits = 32;
+ name[0] = 'h';
+ name[1] = 'i';
+ namelen = 2;
+ }
+ else
+ {
+ *type = DW_ATE_signed;
+ *bits = 32;
+ name[0] = 'l';
+ name[1] = 'o';
+ namelen = 2;
+ }
+
+ name[namelen++] = '\0';
+ return namelen;
+}
Index: elfutils-0.155/backends/mips_reloc.def
===================================================================
--- /dev/null
+++ elfutils-0.155/backends/mips_reloc.def
@@ -0,0 +1,79 @@
+/* List the relocation types for mips. -*- C -*-
+ Copyright (C) 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>. */
+
+/* NAME, REL|EXEC|DYN */
+
+RELOC_TYPE (NONE, 0)
+RELOC_TYPE (16, 0)
+RELOC_TYPE (32, 0)
+RELOC_TYPE (REL32, 0)
+RELOC_TYPE (26, 0)
+RELOC_TYPE (HI16, 0)
+RELOC_TYPE (LO16, 0)
+RELOC_TYPE (GPREL16, 0)
+RELOC_TYPE (LITERAL, 0)
+RELOC_TYPE (GOT16, 0)
+RELOC_TYPE (PC16, 0)
+RELOC_TYPE (CALL16, 0)
+RELOC_TYPE (GPREL32, 0)
+
+RELOC_TYPE (SHIFT5, 0)
+RELOC_TYPE (SHIFT6, 0)
+RELOC_TYPE (64, 0)
+RELOC_TYPE (GOT_DISP, 0)
+RELOC_TYPE (GOT_PAGE, 0)
+RELOC_TYPE (GOT_OFST, 0)
+RELOC_TYPE (GOT_HI16, 0)
+RELOC_TYPE (GOT_LO16, 0)
+RELOC_TYPE (SUB, 0)
+RELOC_TYPE (INSERT_A, 0)
+RELOC_TYPE (INSERT_B, 0)
+RELOC_TYPE (DELETE, 0)
+RELOC_TYPE (HIGHER, 0)
+RELOC_TYPE (HIGHEST, 0)
+RELOC_TYPE (CALL_HI16, 0)
+RELOC_TYPE (CALL_LO16, 0)
+RELOC_TYPE (SCN_DISP, 0)
+RELOC_TYPE (REL16, 0)
+RELOC_TYPE (ADD_IMMEDIATE, 0)
+RELOC_TYPE (PJUMP, 0)
+RELOC_TYPE (RELGOT, 0)
+RELOC_TYPE (JALR, 0)
+RELOC_TYPE (TLS_DTPMOD32, 0)
+RELOC_TYPE (TLS_DTPREL32, 0)
+RELOC_TYPE (TLS_DTPMOD64, 0)
+RELOC_TYPE (TLS_DTPREL64, 0)
+RELOC_TYPE (TLS_GD, 0)
+RELOC_TYPE (TLS_LDM, 0)
+RELOC_TYPE (TLS_DTPREL_HI16, 0)
+RELOC_TYPE (TLS_DTPREL_LO16, 0)
+RELOC_TYPE (TLS_GOTTPREL, 0)
+RELOC_TYPE (TLS_TPREL32, 0)
+RELOC_TYPE (TLS_TPREL64, 0)
+RELOC_TYPE (TLS_TPREL_HI16, 0)
+RELOC_TYPE (TLS_TPREL_LO16, 0)
+
+#define NO_COPY_RELOC 1
+#define NO_RELATIVE_RELOC 1
Index: elfutils-0.155/backends/mips_retval.c
===================================================================
--- /dev/null
+++ elfutils-0.155/backends/mips_retval.c
@@ -0,0 +1,321 @@
+/* Function return value location for Linux/mips 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 <string.h>
+#include <assert.h>
+#include <dwarf.h>
+#include <elf.h>
+
+#include "../libebl/libeblP.h"
+#include "../libdw/libdwP.h"
+
+#define BACKEND mips_
+#include "libebl_CPU.h"
+
+/* The ABI of the file. Also see EF_MIPS_ABI2 above. */
+#define EF_MIPS_ABI 0x0000F000
+
+/* The original o32 abi. */
+#define E_MIPS_ABI_O32 0x00001000
+
+/* O32 extended to work on 64 bit architectures */
+#define E_MIPS_ABI_O64 0x00002000
+
+/* EABI in 32 bit mode */
+#define E_MIPS_ABI_EABI32 0x00003000
+
+/* EABI in 64 bit mode */
+#define E_MIPS_ABI_EABI64 0x00004000
+
+/* All the possible MIPS ABIs. */
+enum mips_abi
+ {
+ MIPS_ABI_UNKNOWN = 0,
+ MIPS_ABI_N32,
+ MIPS_ABI_O32,
+ MIPS_ABI_N64,
+ MIPS_ABI_O64,
+ MIPS_ABI_EABI32,
+ MIPS_ABI_EABI64,
+ MIPS_ABI_LAST
+ };
+
+/* Find the mips ABI of the current file */
+enum mips_abi find_mips_abi(Elf *elf)
+{
+ GElf_Ehdr ehdr_mem;
+ GElf_Ehdr *ehdr = gelf_getehdr (elf, &ehdr_mem);
+
+ if (ehdr == NULL)
+ return MIPS_ABI_LAST;
+
+ GElf_Word elf_flags = ehdr->e_flags;
+
+ /* Check elf_flags to see if it specifies the ABI being used. */
+ switch ((elf_flags & EF_MIPS_ABI))
+ {
+ case E_MIPS_ABI_O32:
+ return MIPS_ABI_O32;
+ case E_MIPS_ABI_O64:
+ return MIPS_ABI_O64;
+ case E_MIPS_ABI_EABI32:
+ return MIPS_ABI_EABI32;
+ case E_MIPS_ABI_EABI64:
+ return MIPS_ABI_EABI64;
+ default:
+ if ((elf_flags & EF_MIPS_ABI2))
+ return MIPS_ABI_N32;
+ }
+
+ /* GCC creates a pseudo-section whose name describes the ABI. */
+ size_t shstrndx;
+ if (elf_getshdrstrndx (elf, &shstrndx) < 0)
+ return MIPS_ABI_LAST;
+
+ const char *name;
+ Elf_Scn *scn = NULL;
+ while ((scn = elf_nextscn (elf, scn)) != NULL)
+ {
+ GElf_Shdr shdr_mem;
+ GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
+ if (shdr == NULL)
+ return MIPS_ABI_LAST;
+
+ name = elf_strptr (elf, shstrndx, shdr->sh_name) ?: "";
+ if (strncmp (name, ".mdebug.", 8) != 0)
+ continue;
+
+ if (strcmp (name, ".mdebug.abi32") == 0)
+ return MIPS_ABI_O32;
+ else if (strcmp (name, ".mdebug.abiN32") == 0)
+ return MIPS_ABI_N32;
+ else if (strcmp (name, ".mdebug.abi64") == 0)
+ return MIPS_ABI_N64;
+ else if (strcmp (name, ".mdebug.abiO64") == 0)
+ return MIPS_ABI_O64;
+ else if (strcmp (name, ".mdebug.eabi32") == 0)
+ return MIPS_ABI_EABI32;
+ else if (strcmp (name, ".mdebug.eabi64") == 0)
+ return MIPS_ABI_EABI64;
+ else
+ return MIPS_ABI_UNKNOWN;
+ }
+
+ return MIPS_ABI_UNKNOWN;
+}
+
+unsigned int
+mips_abi_regsize (enum mips_abi abi)
+{
+ switch (abi)
+ {
+ case MIPS_ABI_EABI32:
+ case MIPS_ABI_O32:
+ return 4;
+ case MIPS_ABI_N32:
+ case MIPS_ABI_N64:
+ case MIPS_ABI_O64:
+ case MIPS_ABI_EABI64:
+ return 8;
+ case MIPS_ABI_UNKNOWN:
+ case MIPS_ABI_LAST:
+ default:
+ return 0;
+ }
+}
+
+
+/* $v0 or pair $v0, $v1 */
+static const Dwarf_Op loc_intreg_o32[] =
+ {
+ { .atom = DW_OP_reg2 }, { .atom = DW_OP_piece, .number = 4 },
+ { .atom = DW_OP_reg3 }, { .atom = DW_OP_piece, .number = 4 },
+ };
+
+static const Dwarf_Op loc_intreg[] =
+ {
+ { .atom = DW_OP_reg2 }, { .atom = DW_OP_piece, .number = 8 },
+ { .atom = DW_OP_reg3 }, { .atom = DW_OP_piece, .number = 8 },
+ };
+#define nloc_intreg 1
+#define nloc_intregpair 4
+
+/* $f0 (float), or pair $f0, $f1 (double).
+ * f2/f3 are used for COMPLEX (= 2 doubles) returns in Fortran */
+static const Dwarf_Op loc_fpreg_o32[] =
+ {
+ { .atom = DW_OP_regx, .number = 32 }, { .atom = DW_OP_piece, .number = 4 },
+ { .atom = DW_OP_regx, .number = 33 }, { .atom = DW_OP_piece, .number = 4 },
+ { .atom = DW_OP_regx, .number = 34 }, { .atom = DW_OP_piece, .number = 4 },
+ { .atom = DW_OP_regx, .number = 35 }, { .atom = DW_OP_piece, .number = 4 },
+ };
+
+/* $f0, or pair $f0, $f2. */
+static const Dwarf_Op loc_fpreg[] =
+ {
+ { .atom = DW_OP_regx, .number = 32 }, { .atom = DW_OP_piece, .number = 8 },
+ { .atom = DW_OP_regx, .number = 34 }, { .atom = DW_OP_piece, .number = 8 },
+ };
+#define nloc_fpreg 1
+#define nloc_fpregpair 4
+#define nloc_fpregquad 8
+
+/* The return value is a structure and is actually stored in stack space
+ passed in a hidden argument by the caller. But, the compiler
+ helpfully returns the address of that space in $v0. */
+static const Dwarf_Op loc_aggregate[] =
+ {
+ { .atom = DW_OP_breg2, .number = 0 }
+ };
+#define nloc_aggregate 1
+
+int
+mips_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp)
+{
+ /* First find the ABI used by the elf object */
+ enum mips_abi abi = find_mips_abi(functypedie->cu->dbg->elf);
+
+ /* Something went seriously wrong while trying to figure out the ABI */
+ if (abi == MIPS_ABI_LAST)
+ return -1;
+
+ /* We couldn't identify the ABI, but the file seems valid */
+ if (abi == MIPS_ABI_UNKNOWN)
+ return -2;
+
+ /* Can't handle EABI variants */
+ if ((abi == MIPS_ABI_EABI32) || (abi == MIPS_ABI_EABI64))
+ return -2;
+
+ unsigned int regsize = mips_abi_regsize (abi);
+ if (!regsize)
+ return -2;
+
+ /* 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 || tag == DW_TAG_mutable_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 = regsize;
+ 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;
+
+#define ABI_LOC(loc, regsize) ((regsize) == 4 ? (loc ## _o32) : (loc))
+
+ if (encoding == DW_ATE_float)
+ {
+ *locp = ABI_LOC(loc_fpreg, regsize);
+ if (size <= regsize)
+ return nloc_fpreg;
+
+ if (size <= 2*regsize)
+ return nloc_fpregpair;
+
+ if (size <= 4*regsize && abi == MIPS_ABI_O32)
+ return nloc_fpregquad;
+
+ goto aggregate;
+ }
+ }
+ *locp = ABI_LOC(loc_intreg, regsize);
+ if (size <= regsize)
+ return nloc_intreg;
+ if (size <= 2*regsize)
+ return nloc_intregpair;
+
+ /* Else fall through. Shouldn't happen though (at least with gcc) */
+ }
+
+ case DW_TAG_structure_type:
+ case DW_TAG_class_type:
+ case DW_TAG_union_type:
+ case DW_TAG_array_type:
+ aggregate:
+ /* XXX TODO: Can't handle structure return with other ABI's yet :-/ */
+ if ((abi != MIPS_ABI_O32) && (abi != MIPS_ABI_O64))
+ return -2;
+
+ *locp = loc_aggregate;
+ return nloc_aggregate;
+ }
+
+ /* 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;
+}
Index: elfutils-0.155/backends/mips_symbol.c
===================================================================
--- /dev/null
+++ elfutils-0.155/backends/mips_symbol.c
@@ -0,0 +1,52 @@
+/* MIPS specific symbolic name handling.
+ Copyright (C) 2002, 2003, 2005 Red Hat, Inc.
+ This file is part of Red Hat elfutils.
+ Written by Jakub Jelinek <jakub@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 mips_
+#include "libebl_CPU.h"
+
+/* Check for the simple reloc types. */
+Elf_Type
+mips_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type)
+{
+ switch (type)
+ {
+ case R_MIPS_16:
+ return ELF_T_HALF;
+ case R_MIPS_32:
+ return ELF_T_WORD;
+ case R_MIPS_64:
+ return ELF_T_XWORD;
+ default:
+ return ELF_T_NUM;
+ }
+}
Index: elfutils-0.155/libebl/eblopenbackend.c
===================================================================
--- elfutils-0.155.orig/libebl/eblopenbackend.c
+++ elfutils-0.155/libebl/eblopenbackend.c
@@ -71,6 +71,8 @@ static const struct
{ "sparc", "elf_sparc", "sparc", 5, EM_SPARC, 0, 0 },
{ "sparc", "elf_sparcv8plus", "sparc", 5, EM_SPARC32PLUS, 0, 0 },
{ "s390", "ebl_s390", "s390", 4, EM_S390, 0, 0 },
+ { "mips", "elf_mips", "mips", 4, EM_MIPS, 0, 0 },
+ { "mips", "elf_mipsel", "mipsel", 4, EM_MIPS_RS3_LE, 0, 0 },
{ "m32", "elf_m32", "m32", 3, EM_M32, 0, 0 },
{ "m68k", "elf_m68k", "m68k", 4, EM_68K, 0, 0 },
Index: elfutils-0.155/backends/common-reloc.c
===================================================================
--- elfutils-0.155.orig/backends/common-reloc.c
+++ elfutils-0.155/backends/common-reloc.c
@@ -112,11 +112,13 @@ EBLHOOK(reloc_valid_use) (Elf *elf, int
}
+#ifndef NO_COPY_RELOC
bool
EBLHOOK(copy_reloc_p) (int reloc)
{
return reloc == R_TYPE (COPY);
}
+#endif
bool
EBLHOOK(none_reloc_p) (int reloc)
@@ -138,7 +140,9 @@ EBLHOOK(init_reloc) (Ebl *ebl)
ebl->reloc_type_name = EBLHOOK(reloc_type_name);
ebl->reloc_type_check = EBLHOOK(reloc_type_check);
ebl->reloc_valid_use = EBLHOOK(reloc_valid_use);
+#ifndef NO_COPY_RELOC
ebl->copy_reloc_p = EBLHOOK(copy_reloc_p);
+#endif
ebl->none_reloc_p = EBLHOOK(none_reloc_p);
#ifndef NO_RELATIVE_RELOC
ebl->relative_reloc_p = EBLHOOK(relative_reloc_p);
Index: elfutils-0.155/backends/Makefile.am
===================================================================
--- elfutils-0.155.orig/backends/Makefile.am
+++ elfutils-0.155/backends/Makefile.am
@@ -32,7 +32,7 @@ INCLUDES += -I$(top_srcdir)/libebl -I$(t
-I$(top_srcdir)/libelf -I$(top_srcdir)/libdw
-modules = i386 sh x86_64 ia64 alpha arm sparc ppc ppc64 s390 tilegx parisc
+modules = i386 sh x86_64 ia64 alpha arm sparc ppc ppc64 s390 tilegx parisc mips
libebl_pic = libebl_i386_pic.a libebl_sh_pic.a libebl_x86_64_pic.a \
libebl_ia64_pic.a libebl_alpha_pic.a libebl_arm_pic.a \
libebl_sparc_pic.a libebl_ppc_pic.a libebl_ppc64_pic.a \
@@ -107,6 +107,10 @@ parisc_SRCS = parisc_init.c parisc_symbo
libebl_parisc_pic_a_SOURCES = $(parisc_SRCS)
am_libebl_parisc_pic_a_OBJECTS = $(parisc_SRCS:.c=.os)
+mips_SRCS = mips_init.c mips_symbol.c mips_regs.c mips_retval.c
+libebl_mips_pic_a_SOURCES = $(mips_SRCS)
+am_libebl_mips_pic_a_OBJECTS = $(mips_SRCS:.c=.os)
+
libebl_%.so libebl_%.map: libebl_%_pic.a $(libelf) $(libdw)
@rm -f $(@:.so=.map)
echo 'ELFUTILS_$(PACKAGE_VERSION) { global: $*_init; local: *; };' \

View File

@ -0,0 +1,27 @@
Upstream-Status: Backport
nm: Fix size passed to snprintf for invalid sh_name case.
native build failed as following on Fedora18:
nm.c: In function 'show_symbols_sysv':
nm.c:756:27: error: argument to 'sizeof' in 'snprintf' call is the same expression as the destination; did you mean to provide an explicit length? [-Werror=sizeof-pointer-memaccess]
snprintf (name, sizeof name, "[invalid sh_name %#" PRIx32 "]",
^
The original commit is http://git.fedorahosted.org/cgit/elfutils.git/commit/src/nm.c?id=57bd66cabf6e6b9ecf622cdbf350804897a8df58
Signed-off-by: Zhenhua Luo <zhenhua.luo@freescale.com>
--- elfutils-0.155/src/nm.c.org 2013-03-11 22:36:11.000000000 -0500
+++ elfutils-0.155/src/nm.c 2013-03-11 22:46:09.000000000 -0500
@@ -752,8 +752,9 @@
gelf_getshdr (scn, &shdr_mem)->sh_name);
if (unlikely (name == NULL))
{
- name = alloca (sizeof "[invalid sh_name 0x12345678]");
- snprintf (name, sizeof name, "[invalid sh_name %#" PRIx32 "]",
+ const size_t bufsz = sizeof "[invalid sh_name 0x12345678]";
+ name = alloca (bufsz);
+ snprintf (name, bufsz, "[invalid sh_name %#" PRIx32 "]",
gelf_getshdr (scn, &shdr_mem)->sh_name);
}
scnnames[elf_ndxscn (scn)] = name;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,91 @@
on uclibc systems libintl and libuargp are separate from libc.
so they need to be specified on commandline when we use proxy-libintl
then libintl is a static archive so it should be listed last since
elfutils does not respect disable-nls we need to link in libintl
We add a new option --enable-uclibc which will be used to control
the uclibc specific configurations during build.
Signed-off-by: Khem Raj <raj.khem>
Upstream-Status: Inappropriate [uclibc specific]
Index: elfutils-0.155/configure.ac
===================================================================
--- elfutils-0.155.orig/configure.ac
+++ elfutils-0.155/configure.ac
@@ -55,9 +55,16 @@ AS_IF([test "$use_locks" = yes], [AC_DEF
AH_TEMPLATE([USE_LOCKS], [Defined if libraries should be thread-safe.])
+AC_ARG_ENABLE([uclibc],
+AS_HELP_STRING([--enable-uclibc], [Use uclibc for system libraries]),
+use_uclibc=yes, use_uclibc=no)
+AM_CONDITIONAL(USE_UCLIBC, test "$use_uclibc" = yes)
+AS_IF([test "$use_uclibc" = yes], [AC_DEFINE(USE_UCLIBC)])
+
+AH_TEMPLATE([USE_UCLIBC], [Defined if uclibc libraries are used.])
+
dnl Add all the languages for which translations are available.
ALL_LINGUAS=
-
AC_PROG_CC
AC_PROG_RANLIB
AC_PROG_YACC
Index: elfutils-0.155/libelf/Makefile.am
===================================================================
--- elfutils-0.155.orig/libelf/Makefile.am
+++ elfutils-0.155/libelf/Makefile.am
@@ -93,7 +93,12 @@ if !MUDFLAP
libelf_pic_a_SOURCES =
am_libelf_pic_a_OBJECTS = $(libelf_a_SOURCES:.c=.os)
+
libelf_so_LDLIBS =
+if USE_UCLIBC
+libelf_so_LDLIBS += -lintl -luargp
+endif
+
if USE_LOCKS
libelf_so_LDLIBS += -lpthread
endif
Index: elfutils-0.155/libdw/Makefile.am
===================================================================
--- elfutils-0.155.orig/libdw/Makefile.am
+++ elfutils-0.155/libdw/Makefile.am
@@ -98,6 +98,11 @@ if !MUDFLAP
libdw_pic_a_SOURCES =
am_libdw_pic_a_OBJECTS = $(libdw_a_SOURCES:.c=.os)
+libdw_so_LDLIBS =
+if USE_UCLIBC
+libdw_so_LDLIBS += -lintl -luargp
+endif
+
libdw_so_SOURCES =
libdw.so: $(srcdir)/libdw.map libdw_pic.a \
../libdwfl/libdwfl_pic.a ../libebl/libebl.a \
@@ -108,7 +113,7 @@ libdw.so: $(srcdir)/libdw.map libdw_pic.
-Wl,--enable-new-dtags,-rpath,$(pkglibdir) \
-Wl,--version-script,$<,--no-undefined \
-Wl,--whole-archive $(filter-out $<,$^) -Wl,--no-whole-archive\
- -ldl $(zip_LIBS)
+ -ldl $(zip_LIBS) $(libdw_so_LDLIBS)
if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi
ln -fs $@ $@.$(VERSION)
Index: elfutils-0.155/libcpu/Makefile.am
===================================================================
--- elfutils-0.155.orig/libcpu/Makefile.am
+++ elfutils-0.155/libcpu/Makefile.am
@@ -63,6 +63,10 @@ i386_parse_CFLAGS = -DNMNES="`wc -l < i3
i386_lex.o: i386_parse.h
i386_gendis_LDADD = $(libeu) -lm $(libmudflap)
+if USE_UCLIBC
+i386_gendis_LDADD += -luargp -lintl
+endif
+
i386_parse.h: i386_parse.c ;
noinst_HEADERS = memory-access.h i386_parse.h i386_data.h

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,84 @@
DESCRIPTION = "A collection of utilities and DSOs to handle compiled objects."
HOMEPAGE = "https://fedorahosted.org/elfutils"
SECTION = "base"
LICENSE = "(GPLv3 & Elfutils-Exception)"
LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
DEPENDS = "libtool bzip2 zlib virtual/libintl"
PR = "r0"
SRC_URI = "https://fedorahosted.org/releases/e/l/elfutils/${PV}/elfutils-${PV}.tar.bz2"
SRC_URI[md5sum] = "163a5712b86f6bdfebdf233cc6e2192d"
SRC_URI[sha256sum] = "68444a4526416ffd68852ec3c6a40ceddcca46538297322405319884c5d30ed8"
SRC_URI += "\
file://redhat-portability.diff \
file://redhat-robustify.diff \
file://hppa_backend.diff \
file://arm_backend.diff \
file://mips_backend.diff \
file://m68k_backend.diff \
file://do-autoreconf.diff \
file://elf_additions.diff \
file://mempcpy.patch \
file://dso-link-change.patch \
file://nm-Fix-size-passed-to-snprintf-for-invalid-sh_name-case.patch \
file://elfutils-ar-c-fix-num-passed-to-memset.patch \
"
# Only apply when building uclibc based target recipe
SRC_URI_append_libc-uclibc = " file://uclibc-support.patch"
# The buildsystem wants to generate 2 .h files from source using a binary it just built,
# which can not pass the cross compiling, so let's work around it by adding 2 .h files
# along with the do_configure_prepend()
SRC_URI += "\
file://i386_dis.h \
file://x86_64_dis.h \
"
inherit autotools gettext
EXTRA_OECONF = "--program-prefix=eu- --without-lzma"
EXTRA_OECONF_append_class-native = " --without-bzlib"
EXTRA_OECONF_append_libc-uclibc = " --enable-uclibc"
do_configure_prepend() {
sed -i '/^i386_dis.h:/,+4 {/.*/d}' ${S}/libcpu/Makefile.am
cp ${WORKDIR}/*dis.h ${S}/libcpu
}
# we can not build complete elfutils when using uclibc
# but some recipes e.g. gcc 4.5 depends on libelf so we
# build only libelf for uclibc case
EXTRA_OEMAKE_libc-uclibc = "-C libelf"
EXTRA_OEMAKE_class-native = ""
EXTRA_OEMAKE_class-nativesdk = ""
BBCLASSEXTEND = "native nativesdk"
# Package utilities separately
PACKAGES =+ "${PN}-binutils libelf libasm libdw libdw-dev libasm-dev libelf-dev"
FILES_${PN}-binutils = "\
${bindir}/eu-addr2line \
${bindir}/eu-ld \
${bindir}/eu-nm \
${bindir}/eu-readelf \
${bindir}/eu-size \
${bindir}/eu-strip"
FILES_libelf = "${libdir}/libelf-${PV}.so ${libdir}/libelf.so.*"
FILES_libasm = "${libdir}/libasm-${PV}.so ${libdir}/libasm.so.*"
FILES_libdw = "${libdir}/libdw-${PV}.so ${libdir}/libdw.so.* ${libdir}/elfutils/lib*"
FILES_libelf-dev = "${libdir}/libelf.so ${includedir}"
FILES_libasm-dev = "${libdir}/libasm.so ${includedir}/elfutils/libasm.h"
FILES_libdw-dev = "${libdir}/libdw.so ${includedir}/dwarf.h ${includedir}/elfutils/libdw*.h"
# Some packages have the version preceeding the .so instead properly
# versioned .so.<version>, so we need to reorder and repackage.
#FILES_${PN} += "${libdir}/*-${PV}.so ${base_libdir}/*-${PV}.so"
#FILES_SOLIBSDEV = "${libdir}/libasm.so ${libdir}/libdw.so ${libdir}/libelf.so"
# The package contains symlinks that trip up insane
INSANE_SKIP_${MLPREFIX}libdw = "dev-so"