802fdfe8d7
- Correct enabling of all targets, add patches to fix new clang build issues raised by this change - Fix WWW: line PR: ports/176103 Submitted by: Luca Pizzamiglio <luca.pizzamiglio@gmail.com> (maintainer)
63 lines
2 KiB
C
63 lines
2 KiB
C
--- bfd/elf64-alpha.c.orig 2013-03-11 10:52:58.000000000 +0100
|
|
+++ bfd/elf64-alpha.c 2013-03-11 11:50:24.000000000 +0100
|
|
@@ -3585,9 +3585,9 @@
|
|
use_gottprel = FALSE;
|
|
new_symndx = is_gd ? ELF64_R_SYM (irel->r_info) : STN_UNDEF;
|
|
|
|
- switch (!dynamic && !info->link_info->shared)
|
|
- {
|
|
- case 1:
|
|
+ {
|
|
+ int skip_default = 0;
|
|
+ if (!dynamic && !info->link_info->shared)
|
|
{
|
|
bfd_vma tp_base;
|
|
bfd_signed_vma disp;
|
|
@@ -3605,7 +3605,7 @@
|
|
irel[0].r_offset = pos[0] - info->contents;
|
|
irel[0].r_info = ELF64_R_INFO (new_symndx, R_ALPHA_TPREL16);
|
|
irel[1].r_info = ELF64_R_INFO (0, R_ALPHA_NONE);
|
|
- break;
|
|
+ skip_default = 1;
|
|
}
|
|
else if (disp >= -(bfd_signed_vma) 0x80000000
|
|
&& disp < (bfd_signed_vma) 0x7fff8000
|
|
@@ -3620,24 +3620,23 @@
|
|
irel[0].r_info = ELF64_R_INFO (new_symndx, R_ALPHA_TPRELHI);
|
|
irel[1].r_offset = pos[1] - info->contents;
|
|
irel[1].r_info = ELF64_R_INFO (new_symndx, R_ALPHA_TPRELLO);
|
|
- break;
|
|
+ skip_default = 1;
|
|
}
|
|
}
|
|
- /* FALLTHRU */
|
|
-
|
|
- default:
|
|
- use_gottprel = TRUE;
|
|
-
|
|
- insn = (OP_LDQ << 26) | (tlsgd_reg << 21) | (29 << 16);
|
|
- bfd_put_32 (info->abfd, (bfd_vma) insn, pos[0]);
|
|
- bfd_put_32 (info->abfd, (bfd_vma) INSN_UNOP, pos[1]);
|
|
-
|
|
- irel[0].r_offset = pos[0] - info->contents;
|
|
- irel[0].r_info = ELF64_R_INFO (new_symndx, R_ALPHA_GOTTPREL);
|
|
- irel[1].r_info = ELF64_R_INFO (0, R_ALPHA_NONE);
|
|
- break;
|
|
- }
|
|
+ /* FALLTHRU (default) */
|
|
+ if (skip_default != 1 )
|
|
+ {
|
|
+ use_gottprel = TRUE;
|
|
|
|
+ insn = (OP_LDQ << 26) | (tlsgd_reg << 21) | (29 << 16);
|
|
+ bfd_put_32 (info->abfd, (bfd_vma) insn, pos[0]);
|
|
+ bfd_put_32 (info->abfd, (bfd_vma) INSN_UNOP, pos[1]);
|
|
+
|
|
+ irel[0].r_offset = pos[0] - info->contents;
|
|
+ irel[0].r_info = ELF64_R_INFO (new_symndx, R_ALPHA_GOTTPREL);
|
|
+ irel[1].r_info = ELF64_R_INFO (0, R_ALPHA_NONE);
|
|
+ }
|
|
+ }
|
|
bfd_put_32 (info->abfd, (bfd_vma) INSN_RDUNIQ, pos[2]);
|
|
|
|
insn = INSN_ADDQ | (16 << 21) | (0 << 16) | (0 << 0);
|