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:
parent
749fcafb08
commit
1f5bd7639d
|
@ -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
|
|
@ -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@
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
@ -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
|
@ -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;
|
||||
+ }
|
||||
+}
|
|
@ -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 *
|
|
@ -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: *; };' \
|
|
@ -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
|
@ -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
|
@ -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"
|
Loading…
Reference in New Issue