From: Camm Maguire Date: Sun, 13 Nov 2022 12:55:14 +0000 (+0000) Subject: X-Git-Tag: archive/raspbian/2.7.1-4+rpi1~2^2^2~56 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=341253ae5cd94531f7f6c1358038f65115a0e9d3;p=gcl27.git 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 --- 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; }