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~62 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=e6cced45e40171f1f7ffb700760c721cedd7eaa1;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-67) unstable; urgency=medium * Version_2_6_13pre55 Gbp-Pq: Name Version_2_6_13pre56 --- diff --git a/h/elf64_alpha_reloc.h b/h/elf64_alpha_reloc.h index 275a84f..9c5e8f8 100644 --- a/h/elf64_alpha_reloc.h +++ b/h/elf64_alpha_reloc.h @@ -22,16 +22,14 @@ store_val(where,MASK(32),s+a); break; case R_ALPHA_LITERAL: - s+=a; - if (a || !(sym->st_other&0x1)) {gotp+=1+(sym->st_other>>1);sym->st_other|=1;} - gote=got+(a ? gotp : sym->st_size)-1; - massert(s); + gote=got+(a>>32)-1; + a&=MASK(32); if (s>=ggot1 && sst_other=sym->st_size=0; + for (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) { + + sym=sym1+ELF_R_SYM(r->r_info); + + /*unlikely to save got space by recording possible holes in addend range*/ + if ((a=r->r_addend+1)>sym->st_other) + sym->st_other=a; + + } + 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) @@ -78,13 +90,19 @@ label_got_symbols(void *v1,Shdr *sec1,Shdr *sece,Sym *sym1,Sym *syme,const char sym=sym1+ELF_R_SYM(r->r_info); - if (!sym->st_size || r->r_addend) { - q=++*gs; - if (!sym->st_size) sym->st_size=q; + if (sym->st_other) { + sym->st_size=++*gs; massert(!make_got_room_for_stub(sec1,sece,sym,st1,gs)); - sym->st_other=(*gs-q)<<1; + massert((*gs-sym->st_size) || !r->r_addend); + if (sym->st_other>1) + (*gs)+=sym->st_other-1; + sym->st_other=0; } + b=sizeof(r->r_addend)*4; + massert(!(r->r_addend>>b)); + r->r_addend|=((sym->st_size+r->r_addend)<