aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/ld
diff options
context:
space:
mode:
authorAustin Clements <austin@google.com>2014-12-18 16:06:57 -0500
committerAustin Clements <austin@google.com>2014-12-18 22:30:56 +0000
commit15c67e21daee0a5055c8fc0144e7efe0345d1929 (patch)
tree48171896ecc5c69a1422a4ab93e910ff2cacb0f7 /src/cmd/ld
parent2fc29a83ae265bba0f35e4cde44786b7e6fbd64c (diff)
downloadgo-15c67e21daee0a5055c8fc0144e7efe0345d1929.tar.xz
cmd/ld: set ELF ABI version for ppc64x
On ppc64, there are three ELF ABI versions an ELF file can request. Previously, we used 0, which means "unspecified". On our test machines, this meant to use the default (v1 for big endian and v2 for little endian), but apparently some systems can pick the wrong ABI if neither is requested. Leaving this as 0 also confuses libbfd, which confuses gdb, objdump, etc. Fix these problems by specifying ABI v1 for big endian and v2 for little endian. Change-Id: I4d3d5478f37f11baab3681a07daff3da55802322 Reviewed-on: https://go-review.googlesource.com/1800 Reviewed-by: Minux Ma <minux@golang.org>
Diffstat (limited to 'src/cmd/ld')
-rw-r--r--src/cmd/ld/elf.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/cmd/ld/elf.c b/src/cmd/ld/elf.c
index 6ac6b6ee82..c20232c550 100644
--- a/src/cmd/ld/elf.c
+++ b/src/cmd/ld/elf.c
@@ -44,8 +44,12 @@ elfinit(void)
switch(thechar) {
// 64-bit architectures
- case '6':
case '9':
+ if(ctxt->arch->endian == BigEndian)
+ hdr.flags = 1; /* Version 1 ABI */
+ else
+ hdr.flags = 2; /* Version 2 ABI */
+ case '6':
elf64 = 1;
hdr.phoff = ELF64HDRSIZE; /* Must be be ELF64HDRSIZE: first PHdr must follow ELF header */
hdr.shoff = ELF64HDRSIZE; /* Will move as we add PHeaders */