+2016-02-26  Renlin Li  <renlin.li@arm.com>
+
+       * elfnn-aarch64.c (elfNN_aarch64_howto_table): Fix signed overflow
+       check for MOVW_SABS_G0, MOVW_SABS_G1, MOVW_SABS_G2.
+
 2016-02-26  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR ld/19609
 
   HOWTO (AARCH64_R (MOVW_SABS_G0),     /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
-        16,                    /* bitsize */
+        17,                    /* bitsize */
         FALSE,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_signed,      /* complain_on_overflow */
   HOWTO64 (AARCH64_R (MOVW_SABS_G1),   /* type */
         16,                    /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
-        16,                    /* bitsize */
+        17,                    /* bitsize */
         FALSE,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_signed,      /* complain_on_overflow */
   HOWTO64 (AARCH64_R (MOVW_SABS_G2),   /* type */
         32,                    /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
-        16,                    /* bitsize */
+        17,                    /* bitsize */
         FALSE,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_signed,      /* complain_on_overflow */
 
+2016-02-26  Renlin Li  <renlin.li@arm.com>
+
+       * testsuite/ld-aarch64/aarch64-elf.exp: Run new testcases.
+       * testsuite/ld-aarch64/emit-relocs-270.d: Update to use new boundary.
+       * testsuite/ld-aarch64/emit-relocs-271.d: Likewise.
+       * testsuite/ld-aarch64/emit-relocs-272.d: Likewise.
+       * testsuite/ld-aarch64/emit-relocs-270-overflow.d: New.
+       * testsuite/ld-aarch64/emit-relocs-270-overflow.s: New.
+       * testsuite/ld-aarch64/emit-relocs-271-overflow.d: New.
+       * testsuite/ld-aarch64/emit-relocs-271-overflow.s: New.
+       * testsuite/ld-aarch64/emit-relocs-272-overflow.d: New.
+       * testsuite/ld-aarch64/emit-relocs-272-overflow.s: New.
+
 2016-02-26  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR ld/19609
 
 run_dump_test "emit-relocs-269-bad"
 run_dump_test "emit-relocs-270"
 run_dump_test "emit-relocs-270-bad"
+run_dump_test "emit-relocs-270-overflow"
 run_dump_test "emit-relocs-271"
+run_dump_test "emit-relocs-271-overflow"
 run_dump_test "emit-relocs-272"
+run_dump_test "emit-relocs-272-overflow"
 run_dump_test "emit-relocs-273"
 run_dump_test "emit-relocs-274"
 run_dump_test "emit-relocs-275"
 
--- /dev/null
+#source: emit-relocs-270-overflow.s
+#ld: -T relocs.ld --defsym tempy=0x10000 --defsym tempy1=-0x10001 -e0 --emit-relocs
+#objdump: -dr
+#error: .*\(.text\+0x\d+\): relocation truncated to fit: R_AARCH64_MOVW_SABS_G0 against symbol `tempy' .*
+#error: .*\(.text\+0x\d+\): relocation truncated to fit: R_AARCH64_MOVW_SABS_G0 against symbol `tempy1' .*
 
--- /dev/null
+.comm   gempy,4,4
+.text
+
+       movz    x4, :abs_g0_s:tempy
+       movz    x5, :abs_g0_s:tempy1
+
 
 #source: emit-relocs-270.s
-#ld: -T relocs.ld --defsym tempy=0x1012 --defsym tempy2=0x4500 --defsym tempy3=-292  -e0 --emit-relocs
-#objdump: -dr -Mno-aliases
+#ld: -T relocs.ld --defsym tempy=0xffff --defsym tempy2=0x4500 --defsym tempy3=-0x10000  -e0 --emit-relocs
+#objdump: -dr
 
 #...
  +10000:       8a000000        and     x0, x0, x0
  +10004:       92400000        and     x0, x0, #0x1
- +10008:       d2820244        movz    x4, #0x1012
-       +10008: R_AARCH64_MOVW_SABS_G0  tempy
- +1000c:       d288a007        movz    x7, #0x4500
-       +1000c: R_AARCH64_MOVW_SABS_G0  tempy2
- +10010:       92802471        movn    x17, #0x123
-       +10010: R_AARCH64_MOVW_SABS_G0  tempy3
-
+ +10008:       d29fffe4        mov     x4, #0xffff                     // #65535
+                       10008: R_AARCH64_MOVW_SABS_G0   tempy
+ +1000c:       d288a007        mov     x7, #0x4500                     // #17664
+                       1000c: R_AARCH64_MOVW_SABS_G0   tempy2
+ +10010:       929ffff1        mov     x17, #0xffffffffffff0000        // #-65536
+                       10010: R_AARCH64_MOVW_SABS_G0   tempy3
 
--- /dev/null
+#source: emit-relocs-271-overflow.s
+#ld: -T relocs.ld --defsym tempy=0x100000000 --defsym tempy1=-0x100000001 -e0 --emit-relocs
+#objdump: -dr
+#error: .*\(.text\+0x\d+\): relocation truncated to fit: R_AARCH64_MOVW_SABS_G1 against symbol `tempy' .*
+#error: .*\(.text\+0x\d+\): relocation truncated to fit: R_AARCH64_MOVW_SABS_G1 against symbol `tempy1' .*
 
--- /dev/null
+.comm   gempy,4,4
+.text
+
+       movz    x4, :abs_g1_s:tempy
+       movz    x5, :abs_g1_s:tempy1
 
 #source: emit-relocs-271.s
-#ld: -T relocs.ld --defsym tempy=0x1012 --defsym tempy2=0x674500 --defsym tempy3=-292  -e0 --emit-relocs
-#objdump: -dr -Mno-aliases
+#ld: -T relocs.ld --defsym tempy=0xffffffff --defsym tempy2=0x674500 --defsym tempy3=-0x100000000  -e0 --emit-relocs
+#objdump: -dr
 
 #...
  +10000:       8a000000        and     x0, x0, x0
  +10004:       92400000        and     x0, x0, #0x1
- +10008:       d2a00004        movz    x4, #0x0, lsl #16
-       +10008: R_AARCH64_MOVW_SABS_G1  tempy
- +1000c:       d2a00ce7        movz    x7, #0x67, lsl #16
-       +1000c: R_AARCH64_MOVW_SABS_G1  tempy2
- +10010:       92a00011        movn    x17, #0x0, lsl #16
-       +10010: R_AARCH64_MOVW_SABS_G1  tempy3
-
+ +10008:       d2bfffe4        mov     x4, #0xffff0000                 // #4294901760
+                       10008: R_AARCH64_MOVW_SABS_G1   tempy
+ +1000c:       d2a00ce7        mov     x7, #0x670000                   // #6750208
+                       1000c: R_AARCH64_MOVW_SABS_G1   tempy2
+ +10010:       92bffff1        mov     x17, #0xffffffff0000ffff        // #-4294901761
+                       10010: R_AARCH64_MOVW_SABS_G1   tempy3
 
--- /dev/null
+#source: emit-relocs-272-overflow.s
+#ld: -T relocs.ld --defsym tempy=0x1000000000000 --defsym tempy1=-0x1000000000001 -e0 --emit-relocs
+#objdump: -dr
+#error: .*\(.text\+0x\d+\): relocation truncated to fit: R_AARCH64_MOVW_SABS_G2 against symbol `tempy' .*
+#error: .*\(.text\+0x\d+\): relocation truncated to fit: R_AARCH64_MOVW_SABS_G2 against symbol `tempy1' .*
 
--- /dev/null
+.comm   gempy,4,4
+.text
+
+       movz    x4, :abs_g2_s:tempy
+       movz    x5, :abs_g2_s:tempy1
 
 #source: emit-relocs-272.s
-#ld: -T relocs.ld --defsym tempy=0x1012 --defsym tempy2=-12345678912345 --defsym tempy3=-292  -e0 --emit-relocs
-#objdump: -dr -Mno-aliases
+#ld: -T relocs.ld --defsym tempy=0xffffffffffff --defsym tempy2=-12345678912345 --defsym tempy3=-0x1000000000000  -e0 --emit-relocs
+#objdump: -dr
 
 #...
  +10000:       8a000000        and     x0, x0, x0
  +10004:       92400000        and     x0, x0, #0x1
- +10008:       d2c00004        movz    x4, #0x0, lsl #32
-       +10008: R_AARCH64_MOVW_SABS_G2  tempy
- +1000c:       92c16747        movn    x7, #0xb3a, lsl #32
-       +1000c: R_AARCH64_MOVW_SABS_G2  tempy2
- +10010:       92c00011        movn    x17, #0x0, lsl #32
-       +10010: R_AARCH64_MOVW_SABS_G2  tempy3
+ +10008:       d2dfffe4        mov     x4, #0xffff00000000             // #281470681743360
+                       10008: R_AARCH64_MOVW_SABS_G2   tempy
+ +1000c:       92c16747        mov     x7, #0xfffff4c5ffffffff         // #-12343736008705
+                       1000c: R_AARCH64_MOVW_SABS_G2   tempy2
+ +10010:       92dffff1        mov     x17, #0xffff0000ffffffff        // #-281470681743361
+                       10010: R_AARCH64_MOVW_SABS_G2   tempy3