* config/tc-alpha.c (struct alpha_insn): Make sequence scalar long.

(MACRO_LITERAL, MACRO_BASE, MACRO_BYTOFF, MACRO_JSR): Remove.
 	(alpha_macros): Remove occurrences of same.
 	(O_lituse_addr, O_gprel): New.
 	(DUMMY_RELOC_LITUSE_*): New.
 	(s_alpha_ucons, s_alpha_arch): Prototype.
 	(alpha_reloc_op): Construct elements via DEF macro.
 	(ALPHA_RELOC_SEQUENCE_OK): Remove.
 	(struct alpha_reloc_tag): Rename from alpha_literal_tag; rename
 	members to not be literal specific.
 	(next_sequence_num): New.
 	(md_apply_fix3): Cope with missing GPDISP_LO16.  Adjust for
 	added/removed BFD relocations.
 	(alpha_force_relocation, alpha_fix_adjustable): Likewise.
 	(alpha_adjust_symtab_relocs): Handle GPDISP relocs as well.
 	(tokenize_arguments): Parse ! relocations properly.
 	(find_macro_match): Delete unused macro argument types.
 	(assemble_insn): Add reloc parameter; emit that instead of the
 	default as appropriate.
 	(get_alpha_reloc_tag): New.  Split from ...
 	(emit_insn): ... here.  Allocate a reloc tag for GPDISP.
 	(assemble_tokens): Don't search macros if user relocation present.
 	Copy reloc sequence number to insn struct.
 	(emit_ldgp): Remove user reloc handling.
 	(load_expression, emit_lda, emit_ldah, emit_ir_load): Likewise.
 	(emit_loadstore, emit_ldXu, emit_ldil, emit_stX): Likewise.
 	(emit_sextX, emit_division, emit_jsrjmp, emit_retjcr): Likewise.
 	* config/tc-alpha.h (tc_adjust_symtab): Always define.
 	(struct alpha_fix_tag): Name members less literal specific.

 	* gas/alpha/alpha.exp: New file.
 	* gas/alpha/elf-reloc-1.[sd]: New test.
 	* gas/alpha/elf-reloc-2.[sl]: New test.
 	* gas/alpha/elf-reloc-3.[sl]: New test.
 	* gas/alpha/elf-reloc-4.[sd]: New test.
 	* gas/alpha/fp.exp: Remove file.
 	* gas/alpha/fp.s: Output to .data not .rdata.
 	* gas/alpha/fp.d: Adjust to match.
This commit is contained in:
Richard Henderson
2001-09-05 02:39:43 +00:00
parent b8720f9d57
commit 19f785835e
16 changed files with 735 additions and 855 deletions

View File

@ -1,3 +1,35 @@
2001-08-04 Richard Henderson <rth@redhat.com>
* config/tc-alpha.c (struct alpha_insn): Make sequence scalar long.
(MACRO_LITERAL, MACRO_BASE, MACRO_BYTOFF, MACRO_JSR): Remove.
(alpha_macros): Remove occurrences of same.
(O_lituse_addr, O_gprel): New.
(DUMMY_RELOC_LITUSE_*): New.
(s_alpha_ucons, s_alpha_arch): Prototype.
(alpha_reloc_op): Construct elements via DEF macro.
(ALPHA_RELOC_SEQUENCE_OK): Remove.
(struct alpha_reloc_tag): Rename from alpha_literal_tag; rename
members to not be literal specific.
(next_sequence_num): New.
(md_apply_fix3): Cope with missing GPDISP_LO16. Adjust for
added/removed BFD relocations.
(alpha_force_relocation, alpha_fix_adjustable): Likewise.
(alpha_adjust_symtab_relocs): Handle GPDISP relocs as well.
(tokenize_arguments): Parse ! relocations properly.
(find_macro_match): Delete unused macro argument types.
(assemble_insn): Add reloc parameter; emit that instead of the
default as appropriate.
(get_alpha_reloc_tag): New. Split from ...
(emit_insn): ... here. Allocate a reloc tag for GPDISP.
(assemble_tokens): Don't search macros if user relocation present.
Copy reloc sequence number to insn struct.
(emit_ldgp): Remove user reloc handling.
(load_expression, emit_lda, emit_ldah, emit_ir_load): Likewise.
(emit_loadstore, emit_ldXu, emit_ldil, emit_stX): Likewise.
(emit_sextX, emit_division, emit_jsrjmp, emit_retjcr): Likewise.
* config/tc-alpha.h (tc_adjust_symtab): Always define.
(struct alpha_fix_tag): Name members less literal specific.
Tue Sep 4 20:01:19 2001 Jeffrey A Law (law@cygnus.com) Tue Sep 4 20:01:19 2001 Jeffrey A Law (law@cygnus.com)
* tc-h8300.c (tc_gen_reloc): Give an error if we try to take the * tc-h8300.c (tc_gen_reloc): Give an error if we try to take the

File diff suppressed because it is too large Load Diff

View File

@ -117,11 +117,10 @@ extern void alpha_frob_file_before_adjust PARAMS ((void));
#define RELOC_OP_P #define RELOC_OP_P
#endif #endif
#ifdef RELOC_OP_P /* Before the relocations are written, reorder them, so that user
/* Before the relocations are written, reorder them, so that user supplied supplied !lituse relocations follow the appropriate !literal
!lituse relocations follow the appropriate !literal relocations. Also relocations. Also convert the gas-internal relocations to the
convert the gas-internal relocations to the appropriate linker relocations. appropriate linker relocations. */
*/
#define tc_adjust_symtab() alpha_adjust_symtab () #define tc_adjust_symtab() alpha_adjust_symtab ()
extern void alpha_adjust_symtab PARAMS ((void)); extern void alpha_adjust_symtab PARAMS ((void));
@ -133,14 +132,14 @@ extern void alpha_adjust_symtab PARAMS ((void));
struct alpha_fix_tag struct alpha_fix_tag
{ {
struct fix *next_lituse; /* next !lituse */ struct fix *next_reloc; /* next !lituse or !gpdisp */
struct alpha_literal_tag *info; /* other members with same sequence */ struct alpha_reloc_tag *info; /* other members with same sequence */
}; };
/* Initialize the TC_FIX_TYPE field. */ /* Initialize the TC_FIX_TYPE field. */
#define TC_INIT_FIX_DATA(fixP) \ #define TC_INIT_FIX_DATA(fixP) \
do { \ do { \
fixP->tc_fix_data.next_lituse = (struct fix *)0; \ fixP->tc_fix_data.next_reloc = (struct fix *)0; \
fixP->tc_fix_data.info = (struct alpha_literal_tag *)0; \ fixP->tc_fix_data.info = (struct alpha_literal_tag *)0; \
} while (0) } while (0)
@ -148,10 +147,9 @@ do { \
#define TC_FIX_DATA_PRINT(stream,fixP) \ #define TC_FIX_DATA_PRINT(stream,fixP) \
do { \ do { \
if (fixP->tc_fix_data.info) \ if (fixP->tc_fix_data.info) \
fprintf (stderr, "\tinfo = 0x%lx, next_lituse = 0x%lx\n", \ fprintf (stderr, "\tinfo = 0x%lx, next_reloc = 0x%lx\n", \
(long)fixP->tc_fix_data.info, \ (long)fixP->tc_fix_data.info, \
(long)fixP->tc_fix_data.next_lituse); \ (long)fixP->tc_fix_data.next_reloc); \
} while (0) } while (0)
#endif
#define DWARF2_LINE_MIN_INSN_LENGTH 4 #define DWARF2_LINE_MIN_INSN_LENGTH 4

View File

@ -1,3 +1,14 @@
2001-08-04 Richard Henderson <rth@redhat.com>
* gas/alpha/alpha.exp: New file.
* gas/alpha/elf-reloc-1.[sd]: New test.
* gas/alpha/elf-reloc-2.[sl]: New test.
* gas/alpha/elf-reloc-3.[sl]: New test.
* gas/alpha/elf-reloc-4.[sd]: New test.
* gas/alpha/fp.exp: Remove file.
* gas/alpha/fp.s: Output to .data not .rdata.
* gas/alpha/fp.d: Adjust to match.
Tue Sep 4 20:06:09 2001 Jeffrey A Law (law@cygnus.com) Tue Sep 4 20:06:09 2001 Jeffrey A Law (law@cygnus.com)
* gas/all/gas.exp (930509a): Expect failure on the H8/300 ELF port. * gas/all/gas.exp (930509a): Expect failure on the H8/300 ELF port.

View File

@ -0,0 +1,33 @@
#
# Some generic alpha tests
#
proc run_list_test { name opts } {
global srcdir subdir
set testname "alpha $name"
set file $srcdir/$subdir/$name
gas_run ${name}.s $opts ">&dump.out"
if { [regexp_diff "dump.out" "${file}.l"] } then {
fail $testname
verbose "output is [file_contents "dump.out"]" 2
return
}
pass $testname
}
if { [istarget alpha*-*-*] } then {
set elf [expr [istarget *-*-elf*] \
|| [istarget *-*-linux*] \
|| [istarget *-*-freebsd*] \
|| [istarget *-*-netbsd*] ]
if $elf {
run_dump_test "elf-reloc-1"
run_list_test "elf-reloc-2" ""
run_list_test "elf-reloc-3" ""
run_dump_test "elf-reloc-4"
}
run_dump_test "fp"
}

View File

@ -0,0 +1,21 @@
#objdump: -r
#name: alpha elf-reloc-1
.*: file format elf64-alpha
RELOCATION RECORDS FOR \[\.text\]:
OFFSET TYPE VALUE
0*0000004 ELF_LITERAL a
0*0000000 LITUSE \.text\+0x0*0000002
0*000000c LITUSE \.text\+0x0*0000001
0*0000008 ELF_LITERAL b
0*0000010 ELF_LITERAL f
0*0000014 LITUSE \.text\+0x0*0000003
0*0000014 HINT f
0*0000018 GPREL16 c
0*000001c GPRELHIGH d
0*0000020 GPRELLOW e
0*0000024 GPDISP \.text\+0x0*0000008
0*0000030 GPDISP \.text\+0xf*ffffff8

View File

@ -0,0 +1,16 @@
.set nomacro
extbl $3, $2, $3 ! lituse_bytoff ! 1
ldq $2, a($29) !literal!1
ldq $4, b($29) !literal!2
ldq_u $3, 0($2) !lituse_base!1
ldq $27, f($29) !literal!5
jsr $26, ($27), f !lituse_jsr!5
lda $0, c($29) !gprel
ldah $1, d($29) !gprelhigh
lda $1, e($1) !gprellow
ldah $29, 0($26) !gpdisp!3
lda $29, 0($29) !gpdisp!4
lda $29, 0($29) !gpdisp!3
ldah $29, 0($26) !gpdisp!4

View File

@ -0,0 +1,4 @@
.*: Assembler messages:
.*:4: Error: too many ldah insns for !gpdisp!3
.*:5: Error: too many lda insns for !gpdisp!3
.*:8: Error: both insns for !gpdisp!4 must be in the same section

View File

@ -0,0 +1,8 @@
.text
ldah $29,0($26) !gpdisp!3
lda $29,0($26) !gpdisp!3
ldah $29,0($26) !gpdisp!3
lda $29,0($26) !gpdisp!3
ldah $29,0($26) !gpdisp!4
.section .text2
lda $29,0($26) !gpdisp!4

View File

@ -0,0 +1,3 @@
.*: Assembler messages:
.*:2: Error: No ldah !gpdisp!2 was found
.*:1: Error: No lda !gpdisp!1 was found

View File

@ -0,0 +1,2 @@
ldah $29,0($26) !gpdisp!1
lda $29,0($26) !gpdisp!2

View File

@ -0,0 +1,25 @@
#objdump: -r
#name: alpha elf-reloc-4
.*: file format elf64-alpha
RELOCATION RECORDS FOR \[\.text\]:
OFFSET TYPE VALUE
0*0000000 ELF_LITERAL a
0*0000004 LITUSE \.text\+0x0*0000001
0*0000008 LITUSE \.text\+0x0*0000002
0*000000c ELF_LITERAL b
0*0000010 LITUSE \.text\+0x0*0000001
0*0000014 LITUSE \.text\+0x0*0000002
0*0000018 ELF_LITERAL c
0*000001c LITUSE \.text\+0x0*0000001
0*0000020 LITUSE \.text\+0x0*0000002
0*0000024 LITUSE \.text\+0x0*0000002
0*000002c LITUSE \.text\+0x0*0000001
0*0000030 ELF_LITERAL d
0*0000034 LITUSE \.text\+0x0*0000001
0*0000038 LITUSE \.text\+0x0*0000002
0*000003c LITUSE \.text\+0x0*0000002
0*0000044 LITUSE \.text\+0x0*0000001

View File

@ -0,0 +1,4 @@
ldbu $1, a
ldwu $2, b
stb $3, c
stw $4, d

View File

@ -1,7 +1,9 @@
#objdump: -s -j .data
#name: alpha fp
.*: file format ecoff-littlealpha .*: file format .*
Contents of section .rdata: Contents of section .data:
0000 71a37909 4f930a40 5441789a cd4b881b q.y.O..@TAx..K.. 0000 71a37909 4f930a40 5441789a cd4b881b q.y.O..@TAx..K..
0010 2a404f93 790971a3 789a5440 5441789a .@O.y.q.x.T@TAx. 0010 2a404f93 790971a3 789a5440 5441789a .@O.y.q.x.T@TAx.
0020 00000000 00000000 00000000 00000000 ................ 0020 00000000 00000000 00000000 00000000 ................

View File

@ -1,15 +0,0 @@
#
# Alpha OSF/1 tests
#
if [istarget alpha-*-osf*] then {
set testname "fp constants (part 2)"
if [gas_test_old "fp.s" "" "fp constants (part 1)"] then {
objdump "-s -j .rdata > a.dump"
if { [regexp_diff "a.dump" "$srcdir/$subdir/fp.d"] == 0 } then {
pass $testname
} else {
fail $testname
}
}
}

View File

@ -1,4 +1,4 @@
.rdata .data
# These three formats are 8 bytes each. # These three formats are 8 bytes each.
.t_floating 3.32192809488736218171e0 .t_floating 3.32192809488736218171e0
# .byte 0x71, 0xa3, 0x79, 0x09, 0x4f, 0x93, 0x0a, 0x40 # .byte 0x71, 0xa3, 0x79, 0x09, 0x4f, 0x93, 0x0a, 0x40