From c570d361394e997645dc05171fabf212cba7c48d Mon Sep 17 00:00:00 2001 From: Ken Raeburn Date: Tue, 13 Sep 1994 02:20:55 +0000 Subject: [PATCH] PIC enhancements just checked in (based on work of Paul Kranenburg and Eric Youngdale). New debugging code for .gdbinit. "this file generated..." msg in config.h. --- gas/ChangeLog | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/gas/ChangeLog b/gas/ChangeLog index cb06ca0eef8..09435a9732b 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,67 @@ +Mon Sep 12 20:56:38 1994 Ken Raeburn (raeburn@kr-laptop.cygnus.com) + + * .gdbinit (pe, ps): Define new commands. + * symbols.c (indent_level): New static variable. + (indent, print_expr_1, print_symbol_value_1, print_symbol_value, + print_expr): New functions. + + * Makefile.in (config-stamp): Add a "this file generated by make" + message to config.h. + + PIC implementation for i386-linux, based on code from Eric + Youngdale and Paul Kranenburg, with some work of my own: + + * write.c (fixup_segment): Test TC_RELOC_RTSYM_LOC_FIXUP on fixup + before processing same-section pcrel relocations. + (TC_RELOC_RTSYM_LOC_FIXUP): Default to 1. + + * expr.c (make_expr_symbol): If operator is O_symbol and + X_add_number is zero, just return the symbol. If operator is + O_constant, resolve the symbol's value before returning. + (operand): Permit use of "[]" for grouping. + (clean_up_expression): For difference of two symbols in the same + frag, add the difference of their offsets into X_add_number. + (expr): Reduce difference of two symbols in same frag to their + difference. + + * config/tc-i386.c (TC_RELOC): New macro. + (struct _i386_insn): New field disp_reloc. + (GOT_symbol): New variable. + (operand_special_chars): Added square-brackets and at-sign. + (reloc) [BFD_ASSEMBLER]: Added new argument OTHER; if it is not + NO_RELOC, just return it. + (reloc) [! BFD_ASSEMBLER]: Add third argument to dummy macro. + (BFD_RELOC_386_PLT32, _GOT32, _GOTOFF) [! BFD_ASSEMBLER]: More + dummy macros. + (tc_i386_fix_adjustable): New function. Returns zero if symbol in + fixup is not local, to prevent relocations against externals from + being dropped. + (md_assemble): Initialize disp_reloc field to NO_RELOC. Pass + disp_reloc field to reloc() function, and use TC_RELOC to generate + value to pass to fix_new_exp. + (md_assemble): Change 32-bit reloc against GOT_symbol into a GOTPC + reloc. + (i386_operand): Initialize disp_reloc field to NO_RELOC. Handle + @GOTOFF, @PLT, @GOT operands. For GOTOFF relocations with local + symbols, force generation of the section symbol. + (md_estimate_size_before_relax): If GOT_symbol exists, decide + we're generating PIC code, and convert relocations against + undefined symbols from PCREL to PLT32. + (md_apply_fix_1) [OBJ_ELF]: Fix up values for dynamic-linking + relocs. + (md_undefined_symbol): Notice GLOBAL_OFFSET_TABLE_NAME and set + and return GOT_symbol if it matches. + (F, MAP): Move macro definitions outside function. + (tc_gen_reloc): Only switch on size and pcrel if code wasn't + already supplied as PLT32. GOT32, GOTOFF, or GOTPC. Convert + BFD_RELOC_32 using GOT_symbol into GOTPC. + * config/tc-i386.h (TC_RELOC, tc_fix_adjustable, + TC_RELOC_GLOBAL_OFFSET_TABLE, TC_RELOC_RTSYM_LOC_FIXUP): New + macros. + (NEED_FX_R_TYPE): Define. + (LOCAL_LABEL): Accept ".X" prefix too. + (GLOBAL_OFFSET_TABLE_NAME): Default to "_GLOBAL_OFFSET_TABLE_". + Mon Sep 12 17:51:39 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) * config/obj-elf.c (obj_elf_type): Rewrite to accept syntax -- 2.30.2