]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: correct byte ordering in plan9_arm object header
authorRichard Miller <miller.research@gmail.com>
Wed, 27 Jan 2016 11:49:58 +0000 (11:49 +0000)
committerRuss Cox <rsc@golang.org>
Wed, 27 Jan 2016 15:52:44 +0000 (15:52 +0000)
Fields in Plan 9 object headers are big-endian, on all architectures.

Change-Id: If95ad29750b776338178d660646568bf26a4abda
Reviewed-on: https://go-review.googlesource.com/18964
Reviewed-by: Russ Cox <rsc@golang.org>
src/cmd/link/internal/arm/asm.go
src/runtime/asm_arm.s

index 8ffa656208a64755de93e6bdbcd9cfc907d33b7f..74c22497029d4af3c29b7fc86ff9907bbb3c065f 100644 (file)
@@ -689,14 +689,14 @@ func asmb() {
        switch ld.HEADTYPE {
        default:
        case obj.Hplan9: /* plan 9 */
-               ld.Thearch.Lput(0x647)                      /* magic */
-               ld.Thearch.Lput(uint32(ld.Segtext.Filelen)) /* sizes */
-               ld.Thearch.Lput(uint32(ld.Segdata.Filelen))
-               ld.Thearch.Lput(uint32(ld.Segdata.Length - ld.Segdata.Filelen))
-               ld.Thearch.Lput(uint32(ld.Symsize))      /* nsyms */
-               ld.Thearch.Lput(uint32(ld.Entryvalue())) /* va of entry */
-               ld.Thearch.Lput(0)
-               ld.Thearch.Lput(uint32(ld.Lcsize))
+               ld.Lputb(0x647)                      /* magic */
+               ld.Lputb(uint32(ld.Segtext.Filelen)) /* sizes */
+               ld.Lputb(uint32(ld.Segdata.Filelen))
+               ld.Lputb(uint32(ld.Segdata.Length - ld.Segdata.Filelen))
+               ld.Lputb(uint32(ld.Symsize))      /* nsyms */
+               ld.Lputb(uint32(ld.Entryvalue())) /* va of entry */
+               ld.Lputb(0)
+               ld.Lputb(uint32(ld.Lcsize))
 
        case obj.Hlinux,
                obj.Hfreebsd,
index 09fbc952e09273a9baf6fad86076737128238907..53128e7eb1e36f8ec1068a7fe5cb34c54d1a626b 100644 (file)
@@ -81,12 +81,17 @@ DATA        runtime·mainPC+0(SB)/4,$runtime·main(SB)
 GLOBL  runtime·mainPC(SB),RODATA,$4
 
 TEXT runtime·breakpoint(SB),NOSPLIT,$0-0
+       BL              runtime·emptyfunc(SB)  // force R14 save for traceback
        // gdb won't skip this breakpoint instruction automatically,
        // so you must manually "set $pc+=4" to skip it and continue.
 #ifdef GOOS_nacl
        WORD    $0xe125be7f     // BKPT 0x5bef, NACL_INSTR_ARM_BREAKPOINT
+#else
+#ifdef GOOS_plan9
+       WORD    $0xD1200070     // undefined instruction used as armv5 breakpoint in Plan 9
 #else
        WORD    $0xe7f001f0     // undefined instruction that gdb understands is a software breakpoint
+#endif
 #endif
        RET