diff options
author | Daniel Jacobowitz <drow@false.org> | 2004-10-08 13:55:11 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2004-10-08 13:55:11 +0000 |
commit | d2b2c203e1ff2daf8cfeab0906084f9389e66246 (patch) | |
tree | b26661436e0599afd2ba5bd7f05a8e346fec61bb /gas | |
parent | d67a454c81bb8395692342d517d935e8bcaa882e (diff) | |
download | fsf-binutils-gdb-d2b2c203e1ff2daf8cfeab0906084f9389e66246.zip fsf-binutils-gdb-d2b2c203e1ff2daf8cfeab0906084f9389e66246.tar.gz fsf-binutils-gdb-d2b2c203e1ff2daf8cfeab0906084f9389e66246.tar.bz2 |
bfd/
* config.bfd: Include 64-bit support for i[3-7]86-*-solaris2*.
* elf64-x86-64.c (elf64_x86_64_section_from_shdr): New function.
(elf_backend_section_from_shdr): Define.
binutils/
* readelf.c (get_x86_64_section_type_name): New function.
(get_section_type_name): Use it.
gas/
* config/tc-i386.c: Include "elf/x86-64.h".
(i386_elf_section_type): New function.
* config/tc-i386.h (md_elf_section_type): Define.
(i386_elf_section_type): New prototype.
gas/testsuite/
* gas/i386/i386.exp: Don't run divide test for targets where '/'
is a comment. Run x86-64-unwind for 64-bit ELF targets.
* gas/i386/x86-64-unwind.d, gas/i386/x86-64-unwind.s: New.
include/
* elf/common.h (PT_SUNW_EH_FRAME): Define.
* elf/x86-64.h (SHT_X86_64_UNWIND): Define.
ld/
* configure.tgt: Include elf_x86_64 for i[3-7]86-*-solaris2*.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 7 | ||||
-rw-r--r-- | gas/config/tc-i386.c | 12 | ||||
-rw-r--r-- | gas/config/tc-i386.h | 3 | ||||
-rw-r--r-- | gas/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/i386.exp | 20 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/x86-64-unwind.d | 28 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/x86-64-unwind.s | 8 |
7 files changed, 83 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 1c0af35..a340cad 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,10 @@ +2004-10-08 Daniel Jacobowitz <dan@debian.org> + + * config/tc-i386.c: Include "elf/x86-64.h". + (i386_elf_section_type): New function. + * config/tc-i386.h (md_elf_section_type): Define. + (i386_elf_section_type): New prototype. + 2004-10-08 Linus Nielsen Feltzing <linus@haxx.se> * config/m68k-parse.h (enum m68k_register): New control register, diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index db2ec7e..9f398d9 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -33,6 +33,7 @@ #include "dwarf2dbg.h" #include "dw2gencfi.h" #include "opcode/i386.h" +#include "elf/x86-64.h" #ifndef REGISTER_WARNINGS #define REGISTER_WARNINGS 1 @@ -6348,3 +6349,14 @@ tc_x86_frame_initial_instructions (void) cfi_add_CFA_def_cfa (sp_regno, -x86_cie_data_alignment); cfi_add_CFA_offset (x86_dwarf2_return_column, x86_cie_data_alignment); } + +int +i386_elf_section_type (const char *str, size_t len) +{ + if (flag_code == CODE_64BIT + && len == sizeof ("unwind") - 1 + && strncmp (str, "unwind", 6) == 0) + return SHT_X86_64_UNWIND; + + return -1; +} diff --git a/gas/config/tc-i386.h b/gas/config/tc-i386.h index e4dec95..721292a 100644 --- a/gas/config/tc-i386.h +++ b/gas/config/tc-i386.h @@ -502,4 +502,7 @@ extern int tc_x86_regname_to_dw2regnum PARAMS ((const char *regname)); #define tc_cfi_frame_initial_instructions tc_x86_frame_initial_instructions extern void tc_x86_frame_initial_instructions PARAMS ((void)); +#define md_elf_section_type(str,len) i386_elf_section_type (str, len) +extern int i386_elf_section_type PARAMS ((const char *, size_t len)); + #endif /* TC_I386 */ diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index f0c2c52..cde6dd6 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2004-10-08 Daniel Jacobowitz <dan@debian.org> + + * gas/i386/i386.exp: Don't run divide test for targets where '/' + is a comment. Run x86-64-unwind for 64-bit ELF targets. + * gas/i386/x86-64-unwind.d, gas/i386/x86-64-unwind.s: New. + 2004-10-08 Alan Modra <amodra@bigpond.net.au> * gas/cfi/cfi-common-4.d: Correct for 64 bit targets. diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp index 31b0b94..2fe7ffb 100644 --- a/gas/testsuite/gas/i386/i386.exp +++ b/gas/testsuite/gas/i386/i386.exp @@ -55,7 +55,17 @@ if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_32_check]] run_dump_test "sse2" run_dump_test "sub" run_dump_test "prescott" - run_dump_test "divide" + + if {![istarget "*-*-aix*"] + && (![is_elf_format] || [istarget "*-*-linux*"] + || [istarget "*-*-netbsd*"] + || [istarget "*-*-freebsd*"] + || [istarget "*-*-netware*"])} { + # Don't run this test on targets where '/' starts comments. + run_dump_test "divide" + } + + run_dump_test "padlock" # These tests require support for 8 and 16 bit relocs, @@ -107,5 +117,13 @@ if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_64_check]] t run_dump_test "x86-64-rip" run_list_test "x86-64-inval" "-al" + # For ELF targets verify that @unwind works. + if { ([istarget "*-*-elf*"] || [istarget "*-*-linux*"] + || [istarget "*-*-solaris2.*"]) + && ![istarget *-*-linux*aout*] + && ![istarget *-*-linux*oldld*] } then { + run_dump_test "x86-64-unwind" + } + set ASFLAGS "$old_ASFLAGS" } diff --git a/gas/testsuite/gas/i386/x86-64-unwind.d b/gas/testsuite/gas/i386/x86-64-unwind.d new file mode 100644 index 0000000..6ce528a --- /dev/null +++ b/gas/testsuite/gas/i386/x86-64-unwind.d @@ -0,0 +1,28 @@ +#readelf: -S +#name: x86-64 unwind + +There are 8 section headers, starting at offset 0x80: + +Section Headers: + \[Nr\] Name Type Address Offset + Size EntSize Flags Link Info Align + \[ 0\] NULL 0000000000000000 00000000 + 0000000000000000 0000000000000000 0 0 0 + \[ 1\] \.text PROGBITS 0000000000000000 00000040 + 0000000000000000 0000000000000000 AX 0 0 4 + \[ 2\] \.data PROGBITS 0000000000000000 00000040 + 0000000000000000 0000000000000000 WA 0 0 4 + \[ 3\] \.bss NOBITS 0000000000000000 00000040 + 0000000000000000 0000000000000000 WA 0 0 4 + \[ 4\] \.eh_frame X86_64_UNWIND 0000000000000000 00000040 + 0000000000000008 0000000000000000 A 0 0 1 + \[ 5\] \.shstrtab STRTAB 0000000000000000 00000048 + 0000000000000036 0000000000000000 0 0 1 + \[ 6\] \.symtab SYMTAB 0000000000000000 00000280 + 0000000000000078 0000000000000018 7 5 8 + \[ 7\] \.strtab STRTAB 0000000000000000 000002f8 + 0000000000000001 0000000000000000 0 0 1 +Key to Flags: + W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\) + I \(info\), L \(link order\), G \(group\), x \(unknown\) + O \(extra OS processing required\) o \(OS specific\), p \(processor specific\) diff --git a/gas/testsuite/gas/i386/x86-64-unwind.s b/gas/testsuite/gas/i386/x86-64-unwind.s new file mode 100644 index 0000000..da6f0f5 --- /dev/null +++ b/gas/testsuite/gas/i386/x86-64-unwind.s @@ -0,0 +1,8 @@ +# First create .eh_frame with the right type. +.section .eh_frame,"a",@unwind +.long 0 + +# Verify that switching back into .eh_frame does not change +# its type. +.section .eh_frame +.long 1 |