Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcvs2svn <>2010-07-31 08:17:45 +0400
committercvs2svn <>2010-07-31 08:17:45 +0400
commit8e62fa6848e05e3637297bb013e643fdcab141d4 (patch)
tree57f9ac57d4a9dc69243203f25f1dbbc40072e5d3 /include/elf
parent906fab62843c8c32d812de2ea9cd509d75d05ab2 (diff)
This commit was manufactured by cvs2svn to create tag 'sid-sid-snapshot-20100801
snapshot-20100801'. Sprout from gdb_7_2-branch 2010-07-06 12:56:25 UTC cvs2svn 'This commit was manufactured by cvs2svn to create branch 'gdb_7_2-branch'.' Cherrypick from master 2010-07-31 04:17:44 UTC Jan Kratochvil <jan.kratochvil@redhat.com> 'gdb/': ChangeLog Makefile.in Makefile.tpl configure configure.ac include/elf/ChangeLog include/elf/internal.h include/elf/v850.h include/gdb/ChangeLog include/gdb/signals.def include/gdb/signals.h include/opcode/ChangeLog include/opcode/rx.h include/opcode/v850.h Delete: djunpack.bat texinfo/texinfo.tex
Diffstat (limited to 'include/elf')
-rw-r--r--include/elf/ChangeLog13
-rw-r--r--include/elf/internal.h54
-rw-r--r--include/elf/v850.h28
3 files changed, 77 insertions, 18 deletions
diff --git a/include/elf/ChangeLog b/include/elf/ChangeLog
index 8a8e118ca..61bbf81db 100644
--- a/include/elf/ChangeLog
+++ b/include/elf/ChangeLog
@@ -1,3 +1,16 @@
+2010-07-23 Naveen.H.S <naveen.S@kpitcummins.com>
+ Ina Pandit <ina.pandit@kpitcummins.com>
+
+ * v850.h: Add support for V850E2 and V850E2V3.
+ (v850_reloc_type): Update the newly added relocations
+
+2010-07-20 Alan Modra <amodra@gmail.com>
+
+ * internal.h (ELF_TBSS_SPECIAL): New macro, extracted from..
+ (ELF_SECTION_SIZE): ..here.
+ (ELF_SECTION_IN_SEGMENT_1): Add "strict" arg.
+ (ELF_SECTION_IN_SEGMENT_STRICT): New macro.
+
2010-06-25 Alan Modra <amodra@gmail.com>
* ppc64.h (R_PPC64_LO_DS_OPT): Define.
diff --git a/include/elf/internal.h b/include/elf/internal.h
index 1dd336dd6..6998ae03c 100644
--- a/include/elf/internal.h
+++ b/include/elf/internal.h
@@ -291,37 +291,55 @@ struct elf_segment_map
/* .tbss is special. It doesn't contribute memory space to normal
segments and it doesn't take file space in normal segments. */
+#define ELF_TBSS_SPECIAL(sec_hdr, segment) \
+ (((sec_hdr)->sh_flags & SHF_TLS) != 0 \
+ && (sec_hdr)->sh_type == SHT_NOBITS \
+ && (segment)->p_type != PT_TLS)
+
#define ELF_SECTION_SIZE(sec_hdr, segment) \
- ((!(((sec_hdr)->sh_flags & SHF_TLS) != 0 \
- && (sec_hdr)->sh_type == SHT_NOBITS) \
- || (segment)->p_type == PT_TLS) ? (sec_hdr)->sh_size : 0)
-
-/* Decide if the given sec_hdr is in the given segment. PT_TLS segment
- contains only SHF_TLS sections. Only PT_LOAD, PT_GNU_RELRO and
- and PT_TLS segments can contain SHF_TLS sections. */
-#define ELF_SECTION_IN_SEGMENT_1(sec_hdr, segment, check_vma) \
- ((((((sec_hdr)->sh_flags & SHF_TLS) != 0) \
+ (ELF_TBSS_SPECIAL(sec_hdr, segment) ? 0 : (sec_hdr)->sh_size)
+
+/* Decide if the section SEC_HDR is in SEGMENT. If CHECK_VMA, then
+ VMAs are checked for alloc sections. If STRICT, then a zero size
+ section won't match at the end of a segment, unless the segment
+ is also zero size. */
+#define ELF_SECTION_IN_SEGMENT_1(sec_hdr, segment, check_vma, strict) \
+ ((/* Only PT_LOAD, PT_GNU_RELRO and PT_TLS segments can contain \
+ SHF_TLS sections. */ \
+ ((((sec_hdr)->sh_flags & SHF_TLS) != 0) \
&& ((segment)->p_type == PT_TLS \
|| (segment)->p_type == PT_GNU_RELRO \
|| (segment)->p_type == PT_LOAD)) \
+ /* PT_TLS segment contains only SHF_TLS sections, PT_PHDR no \
+ sections at all. */ \
|| (((sec_hdr)->sh_flags & SHF_TLS) == 0 \
&& (segment)->p_type != PT_TLS \
&& (segment)->p_type != PT_PHDR)) \
- /* Any section besides one of type SHT_NOBITS must have a file \
- offset within the segment. */ \
+ /* Any section besides one of type SHT_NOBITS must have file \
+ offsets within the segment. */ \
&& ((sec_hdr)->sh_type == SHT_NOBITS \
|| ((bfd_vma) (sec_hdr)->sh_offset >= (segment)->p_offset \
- && ((sec_hdr)->sh_offset + ELF_SECTION_SIZE(sec_hdr, segment) \
- <= (segment)->p_offset + (segment)->p_filesz))) \
- /* SHF_ALLOC sections must have VMAs within the segment. Be \
- careful about segments right at the end of memory. */ \
+ && (!(strict) \
+ || ((sec_hdr)->sh_offset - (segment)->p_offset \
+ <= (segment)->p_filesz - 1)) \
+ && (((sec_hdr)->sh_offset - (segment)->p_offset \
+ + ELF_SECTION_SIZE(sec_hdr, segment)) \
+ <= (segment)->p_filesz))) \
+ /* SHF_ALLOC sections must have VMAs within the segment. */ \
&& (!(check_vma) \
|| ((sec_hdr)->sh_flags & SHF_ALLOC) == 0 \
|| ((sec_hdr)->sh_addr >= (segment)->p_vaddr \
- && ((sec_hdr)->sh_addr - (segment)->p_vaddr \
- + ELF_SECTION_SIZE(sec_hdr, segment) <= (segment)->p_memsz))))
+ && (!(strict) \
+ || ((sec_hdr)->sh_addr - (segment)->p_vaddr \
+ <= (segment)->p_memsz - 1)) \
+ && (((sec_hdr)->sh_addr - (segment)->p_vaddr \
+ + ELF_SECTION_SIZE(sec_hdr, segment)) \
+ <= (segment)->p_memsz))))
#define ELF_SECTION_IN_SEGMENT(sec_hdr, segment) \
- (ELF_SECTION_IN_SEGMENT_1 (sec_hdr, segment, 1))
+ (ELF_SECTION_IN_SEGMENT_1 (sec_hdr, segment, 1, 0))
+
+#define ELF_SECTION_IN_SEGMENT_STRICT(sec_hdr, segment) \
+ (ELF_SECTION_IN_SEGMENT_1 (sec_hdr, segment, 1, 1))
#endif /* _ELF_INTERNAL_H */
diff --git a/include/elf/v850.h b/include/elf/v850.h
index 71ae1db4b..2a0e03ef8 100644
--- a/include/elf/v850.h
+++ b/include/elf/v850.h
@@ -40,6 +40,11 @@
/* v850e1 code. */
#define E_V850E1_ARCH 0x20000000
+/* v850e2 code. */
+#define E_V850E2_ARCH 0x30000000
+
+/* v850e2v3 code. */
+#define E_V850E2V3_ARCH 0x40000000
/* Flags for the st_other field. */
#define V850_OTHER_SDA 0x10 /* Symbol had SDA relocations. */
@@ -81,6 +86,29 @@ START_RELOC_NUMBERS (v850_reloc_type)
RELOC_NUMBER (R_V850_ALIGN, 27)
RELOC_NUMBER (R_V850_REL32, 28)
RELOC_NUMBER (R_V850_LO16_SPLIT_OFFSET, 29) /* For ld.bu */
+ RELOC_NUMBER (R_V850_16_PCREL, 30) /* For loop */
+ RELOC_NUMBER (R_V850_17_PCREL, 31) /* For br */
+ RELOC_NUMBER (R_V850_23, 32) /* For 23bit ld.[w,h,hu,b,bu],st.[w,h,b] */
+ RELOC_NUMBER (R_V850_32_PCREL, 33) /* For jr32, jarl32 */
+ RELOC_NUMBER (R_V850_32_ABS, 34) /* For jmp32 */
+ RELOC_NUMBER (R_V850_16_SPLIT_OFFSET, 35) /* For ld.bu */
+ RELOC_NUMBER (R_V850_16_S1, 36) /* For ld.w, ld.h st.w st.h */
+ RELOC_NUMBER (R_V850_LO16_S1, 37) /* For ld.w, ld.h st.w st.h */
+ RELOC_NUMBER (R_V850_CALLT_15_16_OFFSET, 38) /* For ld.w, ld.h, ld.hu, st.w, st.h */
+ RELOC_NUMBER (R_V850_32_GOTPCREL, 39) /* GLOBAL_OFFSET_TABLE from pc */
+ RELOC_NUMBER (R_V850_16_GOT, 40) /* GOT ENTRY from gp */
+ RELOC_NUMBER (R_V850_32_GOT, 41)
+ RELOC_NUMBER (R_V850_22_PLT, 42) /* For jr */
+ RELOC_NUMBER (R_V850_32_PLT, 43) /* For jr32 */
+ RELOC_NUMBER (R_V850_COPY, 44)
+ RELOC_NUMBER (R_V850_GLOB_DAT, 45)
+ RELOC_NUMBER (R_V850_JMP_SLOT, 46)
+ RELOC_NUMBER (R_V850_RELATIVE, 47)
+ RELOC_NUMBER (R_V850_16_GOTOFF, 48) /* From gp */
+ RELOC_NUMBER (R_V850_32_GOTOFF, 49)
+ RELOC_NUMBER (R_V850_CODE, 50)
+ RELOC_NUMBER (R_V850_DATA, 51) /* For loop */
+
END_RELOC_NUMBERS (R_V850_max)