* Why does ELF/alpha put none-text relocations in .rela.text? @ 2001-08-20 11:44 H . J . Lu 2001-08-20 15:03 ` Richard Henderson 2001-08-20 15:06 ` H . J . Lu 0 siblings, 2 replies; 7+ messages in thread From: H . J . Lu @ 2001-08-20 11:44 UTC (permalink / raw) To: rth; +Cc: binutils When you do # gcc -c foo.c on ELF/alpha, as will put relocations for ".debug_line" in .rela.text. When you do # strip --strip-debug foo.o # readelf -r foo.o you will get 00000000 200569c000000006 R_ALPHA_GPDISP bad symbol index: 200569c0 How should we fix it? H.J. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Why does ELF/alpha put none-text relocations in .rela.text? 2001-08-20 11:44 Why does ELF/alpha put none-text relocations in .rela.text? H . J . Lu @ 2001-08-20 15:03 ` Richard Henderson 2001-08-20 15:46 ` H . J . Lu 2001-08-20 16:05 ` H . J . Lu 2001-08-20 15:06 ` H . J . Lu 1 sibling, 2 replies; 7+ messages in thread From: Richard Henderson @ 2001-08-20 15:03 UTC (permalink / raw) To: H . J . Lu; +Cc: binutils On Mon, Aug 20, 2001 at 11:44:19AM -0700, H . J . Lu wrote: > 00000000 200569c000000006 R_ALPHA_GPDISP bad symbol index: 200569c0 > > How should we fix it? The symbol for GPDISP is completely irrelevant. Only the offset is meaningful. Use the current section symbol rather than a random section symbol. r~ ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Why does ELF/alpha put none-text relocations in .rela.text? 2001-08-20 15:03 ` Richard Henderson @ 2001-08-20 15:46 ` H . J . Lu 2001-08-20 16:05 ` H . J . Lu 1 sibling, 0 replies; 7+ messages in thread From: H . J . Lu @ 2001-08-20 15:46 UTC (permalink / raw) To: Richard Henderson; +Cc: binutils On Mon, Aug 20, 2001 at 03:03:28PM -0700, Richard Henderson wrote: > On Mon, Aug 20, 2001 at 11:44:19AM -0700, H . J . Lu wrote: > > 00000000 200569c000000006 R_ALPHA_GPDISP bad symbol index: 200569c0 > > > > How should we fix it? > > The symbol for GPDISP is completely irrelevant. Only the offset > is meaningful. Use the current section symbol rather than a > random section symbol. But it is a bad idea to use the debug section symbol since it may be removed. H.J. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Why does ELF/alpha put none-text relocations in .rela.text? 2001-08-20 15:03 ` Richard Henderson 2001-08-20 15:46 ` H . J . Lu @ 2001-08-20 16:05 ` H . J . Lu 2001-08-20 16:47 ` PATCH: Avoid setting the bogus section symbol index H . J . Lu 2001-08-20 17:11 ` Why does ELF/alpha put none-text relocations in .rela.text? Richard Henderson 1 sibling, 2 replies; 7+ messages in thread From: H . J . Lu @ 2001-08-20 16:05 UTC (permalink / raw) To: Richard Henderson; +Cc: binutils, amodra On Mon, Aug 20, 2001 at 03:03:28PM -0700, Richard Henderson wrote: > On Mon, Aug 20, 2001 at 11:44:19AM -0700, H . J . Lu wrote: > > 00000000 200569c000000006 R_ALPHA_GPDISP bad symbol index: 200569c0 > > > > How should we fix it? > > The symbol for GPDISP is completely irrelevant. Only the offset > is meaningful. Use the current section symbol rather than a > random section symbol. > But we are using a random section symbol since we never reset now_seg. This patch seems to work for me. Alan, do you have any comments? Thanks. H.J. ---- 2001-08-20 H.J. Lu <hjl@gnu.org> * write.c (write_relocs): Reset the current section. Index: write.c =================================================================== RCS file: /work/cvs/gnu/binutils/gas/write.c,v retrieving revision 1.26 diff -u -p -r1.26 write.c --- write.c 2001/08/03 15:55:50 1.26 +++ write.c 2001/08/20 23:00:50 @@ -958,6 +958,8 @@ write_relocs (abfd, sec, xxx) if (seginfo == NULL) return; + subseg_change (sec, 0); + fixup_segment (seginfo->fix_root, sec); n = 0; ^ permalink raw reply [flat|nested] 7+ messages in thread
* PATCH: Avoid setting the bogus section symbol index. 2001-08-20 16:05 ` H . J . Lu @ 2001-08-20 16:47 ` H . J . Lu 2001-08-20 17:11 ` Why does ELF/alpha put none-text relocations in .rela.text? Richard Henderson 1 sibling, 0 replies; 7+ messages in thread From: H . J . Lu @ 2001-08-20 16:47 UTC (permalink / raw) To: Richard Henderson; +Cc: binutils, amodra On Mon, Aug 20, 2001 at 04:05:15PM -0700, H . J . Lu wrote: > On Mon, Aug 20, 2001 at 03:03:28PM -0700, Richard Henderson wrote: > > On Mon, Aug 20, 2001 at 11:44:19AM -0700, H . J . Lu wrote: > > > 00000000 200569c000000006 R_ALPHA_GPDISP bad symbol index: 200569c0 > > > > > > How should we fix it? > > > > The symbol for GPDISP is completely irrelevant. Only the offset > > is meaningful. Use the current section symbol rather than a > > random section symbol. > > > Here is a patch to avoid setting the bogus section symbol index. Now, I am getting: /export/build/gnu/binutils/build-alpha-linux/binutils/strip-new --strip-debug foo.o -o strip.o BFD: strip.o: symbol `.debug_line' required but not present I will check it in shortly if there is no objection. H.J. ---- 2001-08-20 H.J. Lu <hjl@gnu.org> * elf-bfd.h (elf_obj_tdata): Add num_section_syms. (elf_num_section_syms): New for num_section_syms. * elf.c (elf_map_symbols): Set num_section_syms. (_bfd_elf_symbol_from_bfd_symbol): Check num_section_syms for the section symbol index. Index: elf-bfd.h =================================================================== RCS file: /work/cvs/gnu/binutils/bfd/elf-bfd.h,v retrieving revision 1.15 diff -u -p -r1.15 elf-bfd.h --- elf-bfd.h 2001/08/17 17:56:19 1.15 +++ elf-bfd.h 2001/08/20 23:42:08 @@ -821,6 +821,7 @@ struct elf_obj_tdata struct bfd_strtab_hash *strtab_ptr; int num_locals; int num_globals; + int num_section_syms; asymbol **section_syms; /* STT_SECTION symbols for each section */ Elf_Internal_Shdr symtab_hdr; Elf_Internal_Shdr shstrtab_hdr; @@ -962,6 +963,7 @@ struct elf_obj_tdata #define elf_num_locals(bfd) (elf_tdata(bfd) -> num_locals) #define elf_num_globals(bfd) (elf_tdata(bfd) -> num_globals) #define elf_section_syms(bfd) (elf_tdata(bfd) -> section_syms) +#define elf_num_section_syms(bfd) (elf_tdata(bfd) -> num_section_syms) #define core_prpsinfo(bfd) (elf_tdata(bfd) -> prpsinfo) #define core_prstatus(bfd) (elf_tdata(bfd) -> prstatus) #define elf_gp(bfd) (elf_tdata(bfd) -> gp) Index: elf.c =================================================================== RCS file: /work/cvs/gnu/binutils/bfd/elf.c,v retrieving revision 1.60 diff -u -p -r1.60 elf.c --- elf.c 2001/08/17 17:56:19 1.60 +++ elf.c 2001/08/20 23:42:08 @@ -2092,6 +2092,7 @@ elf_map_symbols (abfd) if (sect_syms == NULL) return false; elf_section_syms (abfd) = sect_syms; + elf_num_section_syms (abfd) = max_index; for (idx = 0; idx < symcount; idx++) { @@ -3652,7 +3653,8 @@ _bfd_elf_symbol_from_bfd_symbol (abfd, a indx = asym_ptr->section->output_section->index; else indx = asym_ptr->section->index; - if (elf_section_syms (abfd)[indx]) + if (indx < elf_num_section_syms (abfd) + && elf_section_syms (abfd)[indx]) asym_ptr->udata.i = elf_section_syms (abfd)[indx]->udata.i; } ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Why does ELF/alpha put none-text relocations in .rela.text? 2001-08-20 16:05 ` H . J . Lu 2001-08-20 16:47 ` PATCH: Avoid setting the bogus section symbol index H . J . Lu @ 2001-08-20 17:11 ` Richard Henderson 1 sibling, 0 replies; 7+ messages in thread From: Richard Henderson @ 2001-08-20 17:11 UTC (permalink / raw) To: H . J . Lu; +Cc: binutils, amodra On Mon, Aug 20, 2001 at 04:05:15PM -0700, H . J . Lu wrote: > But we are using a random section symbol since we never reset now_seg. Um, no, that's just as broken. r~ * config/tc-alpha.h (MD_APPLY_FIX3): Define. * config/tc-alpha.c (md_apply_fix3): Rename from md_apply_fix; use seg parameter instead of now_seg. Index: tc-alpha.c =================================================================== RCS file: /cvs/src/src/gas/config/tc-alpha.c,v retrieving revision 1.24 diff -c -p -d -u -r1.24 tc-alpha.c --- tc-alpha.c 2001/06/24 16:43:31 1.24 +++ tc-alpha.c 2001/08/21 00:08:15 @@ -1159,9 +1159,10 @@ md_pcrel_from (fixP) GPDISP. */ int -md_apply_fix (fixP, valueP) +md_apply_fix3 (fixP, valueP, seg) fixS *fixP; valueT *valueP; + segT seg; { char * const fixpos = fixP->fx_frag->fr_literal + fixP->fx_where; valueT value = *valueP; @@ -1196,7 +1197,7 @@ md_apply_fix (fixP, valueP) #endif do_reloc_gp: - fixP->fx_addsy = section_symbol (now_seg); + fixP->fx_addsy = section_symbol (seg); md_number_to_chars (fixpos, value, 2); break; Index: tc-alpha.h =================================================================== RCS file: /cvs/src/src/gas/config/tc-alpha.h,v retrieving revision 1.7 diff -c -p -d -u -r1.7 tc-alpha.h --- tc-alpha.h 2001/07/23 14:02:12 1.7 +++ tc-alpha.h 2001/08/21 00:08:15 @@ -49,6 +49,7 @@ extern valueT alpha_gp_value; #define TC_FORCE_RELOCATION(FIXP) alpha_force_relocation (FIXP) #define tc_fix_adjustable(FIXP) alpha_fix_adjustable (FIXP) #define RELOC_REQUIRES_SYMBOL +#define MD_APPLY_FIX3 /* This expression evaluates to false if the relocation is for a local object for which we still want to do the relocation at runtime. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Why does ELF/alpha put none-text relocations in .rela.text? 2001-08-20 11:44 Why does ELF/alpha put none-text relocations in .rela.text? H . J . Lu 2001-08-20 15:03 ` Richard Henderson @ 2001-08-20 15:06 ` H . J . Lu 1 sibling, 0 replies; 7+ messages in thread From: H . J . Lu @ 2001-08-20 15:06 UTC (permalink / raw) To: rth; +Cc: binutils On Mon, Aug 20, 2001 at 11:44:19AM -0700, H . J . Lu wrote: > When you do > > # gcc -c foo.c > > on ELF/alpha, as will put relocations for ".debug_line" in > .rela.text. When you do > > # strip --strip-debug foo.o > # readelf -r foo.o > > you will get > > 00000000 200569c000000006 R_ALPHA_GPDISP bad symbol index: 200569c0 > > How should we fix it? I think the real problem is ELF/alpha abuses ELF64_R_SYM for the GPDISP relocations where the symbol index is not really an index into the symbol table. But the generic part of the ELF linker in BFD assumes ELF64_R_SYM is a real symbol index. I will see what I can do. H.J. ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2001-08-20 17:11 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2001-08-20 11:44 Why does ELF/alpha put none-text relocations in .rela.text? H . J . Lu 2001-08-20 15:03 ` Richard Henderson 2001-08-20 15:46 ` H . J . Lu 2001-08-20 16:05 ` H . J . Lu 2001-08-20 16:47 ` PATCH: Avoid setting the bogus section symbol index H . J . Lu 2001-08-20 17:11 ` Why does ELF/alpha put none-text relocations in .rela.text? Richard Henderson 2001-08-20 15:06 ` H . J . Lu
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).