From 7d8011fccb6be3260bd16961fe092cc8fe46c9b7 Mon Sep 17 00:00:00 2001 From: Camm Maguire Date: Thu, 11 Aug 2022 18:16:42 +0100 Subject: [PATCH] TODO: Put a short summary on the line above and replace this paragraph with a longer explanation of this change. Complete the meta-information with other relevant fields (see below for details). To make it easier, the information below has been extracted from the changelog. Adjust it or drop it. gcl (2.6.12-72) unstable; urgency=medium * Version_2_6_13pre61 Gbp-Pq: Name Version_2_6_13pre62 --- h/elf64_alpha_reloc.h | 6 ++-- h/elf64_alpha_reloc_special.h | 53 ++++++++++++++++++++--------------- 2 files changed, 34 insertions(+), 25 deletions(-) diff --git a/h/elf64_alpha_reloc.h b/h/elf64_alpha_reloc.h index 03a3357..d147b59 100644 --- a/h/elf64_alpha_reloc.h +++ b/h/elf64_alpha_reloc.h @@ -22,12 +22,12 @@ store_val(where,MASK(32),s+a); break; case R_ALPHA_LITERAL: - gote=got+(a>>32)-1; - a&=MASK(32); + massert(a || sym->st_size); + gote=got+(a ? (a>>32) : sym->st_size)-1; if (s>=ggot1 && sst_size=0; for (*gs=0,sec=sec1;secsh_type==SHT_RELA) - for (v=v1+sec->sh_offset,ve=v+sec->sh_size,r=v;vsh_entsize,r=v) - if (ELF_R_TYPE(r->r_info)==R_ALPHA_LITERAL) { - - for (rr=vv=v-sec->sh_entsize; - vv>=v1 && - (ELF_R_TYPE(rr->r_info)!=ELF_R_TYPE(r->r_info) || - ELF_R_SYM(rr->r_info)!=ELF_R_SYM(r->r_info) || - rr->r_addend!=r->r_addend); - vv-=sec->sh_entsize,rr=vv); - - b=sizeof(r->r_addend)*4; - if (vv>=v1) - q=rr->r_addend>>b; - else { - q=++*gs; - massert(!make_got_room_for_stub(sec1,sece,sym1+ELF_R_SYM(r->r_info),st1,gs)); + for (v=v1+sec->sh_offset,ve=v+sec->sh_size,r=v;vsh_entsize,r=v) + + if (ELF_R_TYPE(r->r_info)==R_ALPHA_LITERAL) { + + if (sec->sh_type!=SHT_RELA || !r->r_addend) { + + sym=sym1+ELF_R_SYM(r->r_info); + + if (!sym->st_size) { + sym->st_size=++*gs; + massert(!make_got_room_for_stub(sec1,sece,sym,st1,gs)); } - massert(*gs==q || !r->r_addend); - massert(!(r->r_addend>>b)); - r->r_addend|=(q<sh_entsize; + vv>=v1 && (ELF_R_TYPE(rr->r_info)!=ELF_R_TYPE(r->r_info) || + ELF_R_SYM(rr->r_info)!=ELF_R_SYM(r->r_info) || + rr->r_addend!=r->r_addend); + vv-=sec->sh_entsize,rr=vv); + + q=vvr_addend>>32; + massert(!(r->r_addend>>32)); + r->r_addend|=(q<<32); } - + + } + return 0; } -- 2.30.2