From 8e62fa6848e05e3637297bb013e643fdcab141d4 Mon Sep 17 00:00:00 2001 From: cvs2svn <> Date: Sat, 31 Jul 2010 04:17:45 +0000 Subject: This commit was manufactured by cvs2svn to create tag 'sid- 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 '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 --- include/elf/ChangeLog | 13 ++++++++++++ include/elf/internal.h | 54 +++++++++++++++++++++++++++++++++----------------- include/elf/v850.h | 28 ++++++++++++++++++++++++++ 3 files changed, 77 insertions(+), 18 deletions(-) (limited to 'include/elf') 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 + Ina Pandit + + * v850.h: Add support for V850E2 and V850E2V3. + (v850_reloc_type): Update the newly added relocations + +2010-07-20 Alan Modra + + * 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 * 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) -- cgit v1.2.3