aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/ld
diff options
context:
space:
mode:
authorShenghou Ma <minux.ma@gmail.com>2013-02-04 00:40:11 +0800
committerShenghou Ma <minux.ma@gmail.com>2013-02-04 00:40:11 +0800
commit2ebfaa36b51e860d066799afa90de3efe092ae4a (patch)
tree12fadce91d5e68b4825ab6a48b9ff1f1dafcaf97 /src/cmd/ld
parent848d10f06cf327212d1ce7041c0eeae5fda317f1 (diff)
downloadgo-2ebfaa36b51e860d066799afa90de3efe092ae4a.tar.xz
cmd/5l, cmd/ld: support generating ELF binaries for NetBSD/ARM
R=golang-dev, dave CC=golang-dev https://golang.org/cl/7261043
Diffstat (limited to 'src/cmd/ld')
-rw-r--r--src/cmd/ld/elf.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/src/cmd/ld/elf.c b/src/cmd/ld/elf.c
index 9793feea03..c771d10ec3 100644
--- a/src/cmd/ld/elf.c
+++ b/src/cmd/ld/elf.c
@@ -55,7 +55,9 @@ elfinit(void)
// 32-bit architectures
case '5':
- hdr.flags = 0x5000002; // has entry point, Version5 EABI
+ // we only use EABI on linux/arm
+ if(HEADTYPE == Hlinux)
+ hdr.flags = 0x5000002; // has entry point, Version5 EABI
// fallthrough
default:
hdr.phoff = ELF32HDRSIZE; /* Must be be ELF32HDRSIZE: first PHdr must follow ELF header */
@@ -1303,6 +1305,7 @@ asmbelf(vlong symo)
sh->type = SHT_REL;
sh->flags = SHF_ALLOC;
sh->entsize = ELF32RELSIZE;
+ sh->link = elfshname(".dynsym")->shnum;
shsym(sh, lookup(".rel.plt", 0));
sh = elfshname(".rel");
@@ -1375,15 +1378,17 @@ asmbelf(vlong symo)
}
}
- ph = newElfPhdr();
- ph->type = PT_GNU_STACK;
- ph->flags = PF_W+PF_R;
- ph->align = PtrSize;
-
- ph = newElfPhdr();
- ph->type = PT_PAX_FLAGS;
- ph->flags = 0x2a00; // mprotect, randexec, emutramp disabled
- ph->align = PtrSize;
+ if(HEADTYPE == Hlinux) {
+ ph = newElfPhdr();
+ ph->type = PT_GNU_STACK;
+ ph->flags = PF_W+PF_R;
+ ph->align = PtrSize;
+
+ ph = newElfPhdr();
+ ph->type = PT_PAX_FLAGS;
+ ph->flags = 0x2a00; // mprotect, randexec, emutramp disabled
+ ph->align = PtrSize;
+ }
elfobj:
sh = elfshname(".shstrtab");