diff --git a/gcc/config/s390/s390.cc b/gcc/config/s390/s390.cc
index 86a5f059b85..1d96df49fea 100644
--- a/gcc/config/s390/s390.cc
+++ b/gcc/config/s390/s390.cc
@@ -8585,7 +8585,7 @@ print_operand_address (FILE *file, rtx addr)
     'E': print opcode suffix for branch on index instruction.
     'G': print the size of the operand in bytes.
     'J': print tls_load/tls_gdcall/tls_ldcall suffix
-    'K': print @PLT suffix for call targets and load address values.
+    'K': print @PLT suffix for branch targets; do not use with larl.
     'M': print the second word of a TImode operand.
     'N': print the second word of a DImode operand.
     'O': print only the displacement of a memory reference or address.
@@ -8854,19 +8854,9 @@ print_operand (FILE *file, rtx x, int code)
 	 call even static functions via PLT.  ld will optimize @PLT away for
 	 normal code, and keep it for patches.
 
-	 Do not indiscriminately add @PLT in 31-bit mode due to the %r12
-	 restriction, use UNSPEC_PLT31 instead.
-
 	 @PLT only makes sense for functions, data is taken care of by
-	 -mno-pic-data-is-text-relative.
-
-	 Adding @PLT interferes with handling of weak symbols in non-PIC code,
-	 since their addresses are loaded with larl, which then always produces
-	 a non-NULL result, so skip them here as well.  */
-      if (TARGET_64BIT
-	  && GET_CODE (x) == SYMBOL_REF
-	  && SYMBOL_REF_FUNCTION_P (x)
-	  && !(SYMBOL_REF_WEAK (x) && !flag_pic))
+	 -mno-pic-data-is-text-relative.  */
+      if (GET_CODE (x) == SYMBOL_REF && SYMBOL_REF_FUNCTION_P (x))
 	fprintf (file, "@PLT");
       return;
     }
diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md
index c164ea72c78..9d495803387 100644
--- a/gcc/config/s390/s390.md
+++ b/gcc/config/s390/s390.md
@@ -2001,7 +2001,7 @@
    vlgvg\t%0,%v1,0
    vleg\t%v0,%1,0
    vsteg\t%v1,%0,0
-   larl\t%0,%1%K1"
+   larl\t%0,%1"
   [(set_attr "op_type" "RI,RI,RI,RI,RI,RIL,RIL,RIL,RRE,RRE,RRE,RXY,RIL,RRE,RXY,
                         RXY,RR,RX,RXY,RX,RXY,RIL,SIL,*,*,RS,RS,VRI,VRR,VRS,VRS,
                         VRX,VRX,RIL")
@@ -2390,7 +2390,7 @@
         (match_operand:SI 1 "larl_operand" "X"))]
   "!TARGET_64BIT
    && !FP_REG_P (operands[0])"
-  "larl\t%0,%1%K1"
+  "larl\t%0,%1"
    [(set_attr "op_type" "RIL")
     (set_attr "type"    "larl")
     (set_attr "z10prop" "z10_fwd_A1")
@@ -11735,7 +11735,7 @@
   [(set (match_operand 0 "register_operand" "=a")
         (unspec [(label_ref (match_operand 1 "" ""))] UNSPEC_MAIN_BASE))]
   "GET_MODE (operands[0]) == Pmode"
-  "larl\t%0,%1%K1"
+  "larl\t%0,%1"
   [(set_attr "op_type" "RIL")
    (set_attr "type"    "larl")
    (set_attr "z10prop" "z10_fwd_A1")
@@ -11755,7 +11755,7 @@
   [(set (match_operand 0 "register_operand" "=a")
         (unspec [(label_ref (match_operand 1 "" ""))] UNSPEC_RELOAD_BASE))]
   "GET_MODE (operands[0]) == Pmode"
-  "larl\t%0,%1%K1"
+  "larl\t%0,%1"
   [(set_attr "op_type" "RIL")
    (set_attr "type"    "larl")
    (set_attr "z10prop" "z10_fwd_A1")])
diff --git a/gcc/testsuite/gcc.target/s390/call-z10-pic-nodatarel.c b/gcc/testsuite/gcc.target/s390/call-z10-pic-nodatarel.c
index 49984614bc6..6df0c75584f 100644
--- a/gcc/testsuite/gcc.target/s390/call-z10-pic-nodatarel.c
+++ b/gcc/testsuite/gcc.target/s390/call-z10-pic-nodatarel.c
@@ -7,10 +7,8 @@
 /* { dg-final { scan-assembler {lgrl\t%r2,foo@GOTENT\n} { target lp64 } } } */
 /* { dg-final { scan-assembler {lrl\t%r2,foo@GOTENT\n} { target { ! lp64 } } } } */
 
-/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} { target lp64 } } } */
-/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic\n} { target { ! lp64 } } } } */
-/* { dg-final { scan-assembler {larl\t%r2,foostatic@PLT\n} { target lp64 } } } */
-/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} { target { ! lp64 } } } } */
+/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} } } */
+/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} } } */
 
 /* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */
 /* { dg-final { scan-assembler {lgrl\t%r2,fooweak@GOTENT\n} { target lp64 } } } */
diff --git a/gcc/testsuite/gcc.target/s390/call-z10-pic.c b/gcc/testsuite/gcc.target/s390/call-z10-pic.c
index 210c56cc4ca..30145d5b760 100644
--- a/gcc/testsuite/gcc.target/s390/call-z10-pic.c
+++ b/gcc/testsuite/gcc.target/s390/call-z10-pic.c
@@ -7,10 +7,8 @@
 /* { dg-final { scan-assembler {lgrl\t%r2,foo@GOTENT\n} { target lp64 } } } */
 /* { dg-final { scan-assembler {lrl\t%r2,foo@GOTENT\n} { target { ! lp64 } } } } */
 
-/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} { target lp64 } } } */
-/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic\n} { target { ! lp64 } } } } */
-/* { dg-final { scan-assembler {larl\t%r2,foostatic@PLT\n} { target lp64 } } } */
-/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} { target { ! lp64 } } } } */
+/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} } } */
+/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} } } */
 
 /* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */
 /* { dg-final { scan-assembler {lgrl\t%r2,fooweak@GOTENT\n} { target lp64 } } } */
diff --git a/gcc/testsuite/gcc.target/s390/call-z10.c b/gcc/testsuite/gcc.target/s390/call-z10.c
index 2d7dc735df4..d4eab4ff89f 100644
--- a/gcc/testsuite/gcc.target/s390/call-z10.c
+++ b/gcc/testsuite/gcc.target/s390/call-z10.c
@@ -3,17 +3,13 @@
 
 #include "call.h"
 
-/* { dg-final { scan-assembler {brasl\t%r\d+,foo@PLT\n} { target lp64 } } } */
-/* { dg-final { scan-assembler {brasl\t%r\d+,foo\n} { target { ! lp64 } } } } */
-/* { dg-final { scan-assembler {larl\t%r2,foo@PLT\n} { target lp64 } } } */
-/* { dg-final { scan-assembler {larl\t%r2,foo\n} { target { ! lp64 } } } } */
+/* { dg-final { scan-assembler {brasl\t%r\d+,foo@PLT\n} } } */
+/* { dg-final { scan-assembler {larl\t%r2,foo\n} } } */
 
-/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} { target lp64 } } } */
-/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic\n} { target { ! lp64 } } } } */
-/* { dg-final { scan-assembler {larl\t%r2,foostatic@PLT\n} { target lp64 } } } */
-/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} { target { ! lp64 } } } } */
+/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} } } */
+/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} } } */
 
-/* { dg-final { scan-assembler {brasl\t%r\d+,fooweak\n} } } */
+/* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */
 /* { dg-final { scan-assembler {larl\t%r2,fooweak\n} } } */
 
 /* { dg-final { scan-assembler {foos:\n\t.quad\tfoo\n\t.quad\tfoostatic\n\t.quad\tfooweak\n} { target lp64 } } } */
diff --git a/gcc/testsuite/gcc.target/s390/call-z9-pic-nodatarel.c b/gcc/testsuite/gcc.target/s390/call-z9-pic-nodatarel.c
index b1ae318d3e9..fe515bf1903 100644
--- a/gcc/testsuite/gcc.target/s390/call-z9-pic-nodatarel.c
+++ b/gcc/testsuite/gcc.target/s390/call-z9-pic-nodatarel.c
@@ -6,10 +6,8 @@
 /* { dg-final { scan-assembler {brasl\t%r\d+,foo@PLT\n} } } */
 /* { dg-final { scan-assembler {larl\t%r\d+,foo@GOTENT\n} } } */
 
-/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} { target lp64 } } } */
-/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic\n} { target { ! lp64 } } } } */
-/* { dg-final { scan-assembler {larl\t%r2,foostatic@PLT\n} { target lp64 } } } */
-/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} { target { ! lp64 } } } } */
+/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} } } */
+/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} } } */
 
 /* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */
 /* { dg-final { scan-assembler {larl\t%r\d+,fooweak@GOTENT\n} } } */
diff --git a/gcc/testsuite/gcc.target/s390/call-z9-pic.c b/gcc/testsuite/gcc.target/s390/call-z9-pic.c
index a89e78d8df8..43e1c2f7cb3 100644
--- a/gcc/testsuite/gcc.target/s390/call-z9-pic.c
+++ b/gcc/testsuite/gcc.target/s390/call-z9-pic.c
@@ -6,10 +6,8 @@
 /* { dg-final { scan-assembler {brasl\t%r\d+,foo@PLT\n} } } */
 /* { dg-final { scan-assembler {larl\t%r\d+,foo@GOTENT\n} } } */
 
-/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} { target lp64 } } } */
-/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic\n} { target { ! lp64 } } } } */
-/* { dg-final { scan-assembler {larl\t%r2,foostatic@PLT\n} { target lp64 } } } */
-/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} { target { ! lp64 } } } } */
+/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} } } */
+/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} } } */
 
 /* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */
 /* { dg-final { scan-assembler {larl\t%r\d+,fooweak@GOTENT\n} } } */
diff --git a/gcc/testsuite/gcc.target/s390/call-z9.c b/gcc/testsuite/gcc.target/s390/call-z9.c
index 21d035aecb6..b755f33498a 100644
--- a/gcc/testsuite/gcc.target/s390/call-z9.c
+++ b/gcc/testsuite/gcc.target/s390/call-z9.c
@@ -3,17 +3,13 @@
 
 #include "call.h"
 
-/* { dg-final { scan-assembler {brasl\t%r\d+,foo@PLT\n} { target lp64 } } } */
-/* { dg-final { scan-assembler {brasl\t%r\d+,foo\n} { target { ! lp64 } } } } */
-/* { dg-final { scan-assembler {larl\t%r2,foo@PLT\n} { target lp64 } } } */
-/* { dg-final { scan-assembler {larl\t%r2,foo\n} { target { ! lp64 } } } } */
+/* { dg-final { scan-assembler {brasl\t%r\d+,foo@PLT\n} } } */
+/* { dg-final { scan-assembler {larl\t%r2,foo\n} } } */
 
-/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} { target lp64 } } } */
-/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic\n} { target { ! lp64 } } } } */
-/* { dg-final { scan-assembler {larl\t%r2,foostatic@PLT\n} { target lp64 } } } */
-/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} { target { ! lp64 } } } } */
+/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} } } */
+/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} } } */
 
-/* { dg-final { scan-assembler {brasl\t%r\d+,fooweak\n} } } */
+/* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */
 /* { dg-final { scan-assembler {larl\t%r2,fooweak\n} } } */
 
 /* { dg-final { scan-assembler {foos:\n\t.quad\tfoo\n\t.quad\tfoostatic\n\t.quad\tfooweak\n} { target lp64 } } } */
