Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 1 Mar 2003 02:26:56 -0800 (PST)
From:      Serguei Tzukanov <tzukanov@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 26123 for review
Message-ID:  <200303011026.h21AQuwc086822@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=26123

Change 26123 by tzukanov@tzukanov_antares on 2003/03/01 02:26:49

	GCC & rtld update.

Affected files ...

.. //depot/projects/s390/contrib/gcc/config/s390/s390.md#2 edit
.. //depot/projects/s390/libexec/rtld-elf/s390/reloc.c#3 edit

Differences ...

==== //depot/projects/s390/contrib/gcc/config/s390/s390.md#2 (text+ko) ====

@@ -957,7 +957,7 @@
    ldr\\t%0,%1
    ld\\t%0,%1
    std\\t%1,%0"
-  [(set_attr "op_type" "RR,RXE,RXE,RR,RX,RX")
+  [(set_attr "op_type" "RRE,RXE,RXE,RR,RX,RX")
    (set_attr "atype"   "reg,mem,mem,reg,mem,mem")])
 
 (define_insn "*movdi_31"
@@ -1240,7 +1240,7 @@
    lgr\\t%0,%1
    lg\\t%0,%1
    stg\\t%1,%0"
-  [(set_attr "op_type" "RR,RX,RX,RR,RXE,RXE")
+  [(set_attr "op_type" "RR,RX,RX,RRE,RXE,RXE")
    (set_attr "atype"   "reg,mem,mem,reg,mem,mem")])
 
 (define_insn "*movdf_31"
@@ -2111,15 +2111,12 @@
 	  reg1 = gen_reg_rtx (DImode);
         }  
 
-      if (! CONSTANT_P (len))
-          len = force_reg (Pmode, len);
-
       /* Load up the address+length pairs.  */
       emit_move_insn (gen_highpart (Pmode, reg0), addr0); 
-      emit_move_insn (gen_lowpart (Pmode, reg0), len);
+      convert_move (gen_lowpart (Pmode, reg0), len, 1);
 
       emit_move_insn (gen_highpart (Pmode, reg1), addr1);
-      emit_move_insn (gen_lowpart (Pmode, reg1), len);
+      convert_move (gen_lowpart (Pmode, reg1), len, 1);
 
       /* Compare! */
       if (TARGET_64BIT) 
@@ -3226,6 +3223,19 @@
   [(set_attr "op_type"  "RR,RI,RX")
    (set_attr "atype"    "reg,reg,mem")])
 
+(define_insn "*addsi3_inv"
+  [(set (match_operand:SI 0 "register_operand" "=d,d,d")
+        (plus:SI (match_operand:SI 1 "general_operand" "%d,K,m")
+                 (match_operand:SI 2 "register_operand" "0,0,0")))
+   (clobber (reg:CC 33))]
+  ""
+  "@
+   ar\\t%0,%1
+   ahi\\t%0,%h1
+   a\\t%0,%1"
+  [(set_attr "op_type"  "RR,RI,RX")
+   (set_attr "atype"    "reg,reg,mem")])
+
 (define_insn "*la_31"
   [(set (match_operand:SI 0 "register_operand" "=d")
         (match_operand:QI 1 "address_operand" "p"))]
@@ -5462,7 +5472,7 @@
   "@
    srlg\\t%0,%1,%c2
    srlg\\t%0,%1,0(%2)"
-  [(set_attr "op_type"  "RS,RS")])
+  [(set_attr "op_type"  "RSE,RSE")])
 
 ;
 ; lshrsi3 instruction pattern(s).

==== //depot/projects/s390/libexec/rtld-elf/s390/reloc.c#3 (text+ko) ====

@@ -43,17 +43,17 @@
 #include "debug.h"
 #include "rtld.h"
 
-#define _SHIFT1	(1 << 7)
-
+#define _ILL	0
 #define _B8	1
 #define _L12	2
 #define _H16	3
-#define _PC16	(_H16 | _SHIFT1)
-#define _W32	4
-#define _PC32	(_W32 | _SHIFT1)
-#define _Q64	5
+#define _PC16	5
+#define _W32	6
 
 #ifdef __s390x__
+#define _PC32	7
+#define _Q64	8
+
 #define _AD	_Q64
 #else
 #define _AD	_W32
@@ -61,44 +61,43 @@
 
 #define _B	1
 #define _G	2
-#define _L	3
-#define _O	4
-#define _P	5
-#define _S	6
-
-#define _ILL	0
+#define _L	4
+#define _O	8
+#define _P	16
+#define _S	32
 
 static struct _reldesc {
-	uint8_t op[4];
+	uint8_t field;
+	uint8_t action;
 } reldesc[] = {
-	{{ _ILL              }}, /* R_390_NONE     */
-	{{ _B8,   _S,        }}, /* R_390_8        */
-	{{ _L12,  _S,        }}, /* R_390_12       */
-	{{ _H16,  _S,        }}, /* R_390_16       */
-	{{ _W32,  _S,        }}, /* R_390_32       */
-	{{ _W32,  _S, _P     }}, /* R_390_PC32     */
-	{{ _L12,  _O,        }}, /* R_390_GOT12    */
-	{{ _W32,  _O,        }}, /* R_390_GOT32    */
-	{{ _W32,  _L,        }}, /* R_390_PLT32    */
-	{{ _ILL              }}, /* R_390_COPY     */
-	{{ _AD,   _S         }}, /* R_390_GLOB_DAT */
-	{{ _ILL              }}, /* R_390_JMP_SLOT */
-	{{ _AD,   _B         }}, /* R_390_RELATIVE */
-	{{ _AD,   _S, _G     }}, /* R_390_GOTOFF   */
-	{{ _AD,   _G, _P     }}, /* R_390_GOTPC    */
-	{{ _H16,  _O         }}, /* R_390_GOT16    */
-	{{ _H16,  _S, _P     }}, /* R_390_PC16     */
-	{{ _PC16, _S, _P     }}, /* R_390_PC16DBL  */
-	{{ _PC16, _L, _P     }}, /* R_390_PLT16DBL */
+	{ _ILL                }, /* R_390_NONE     */
+	{ _B8,   _S,          }, /* R_390_8        */
+	{ _L12,  _S,          }, /* R_390_12       */
+	{ _H16,  _S,          }, /* R_390_16       */
+	{ _W32,  _S,          }, /* R_390_32       */
+	{ _W32,  _S | _P      }, /* R_390_PC32     */
+	{ _L12,  _O           }, /* R_390_GOT12    */
+	{ _W32,  _O,          }, /* R_390_GOT32    */
+	{ _W32,  _L,          }, /* R_390_PLT32    */
+	{ _ILL                }, /* R_390_COPY     */
+	{ _AD,   _S           }, /* R_390_GLOB_DAT */
+	{ _ILL                }, /* R_390_JMP_SLOT */
+	{ _AD,   _B           }, /* R_390_RELATIVE */
+	{ _AD,   _S | _G      }, /* R_390_GOTOFF   */
+	{ _AD,   _G | _P      }, /* R_390_GOTPC    */
+	{ _H16,  _O           }, /* R_390_GOT16    */
+	{ _H16,  _S | _P      }, /* R_390_PC16     */
+	{ _PC16, _S | _P      }, /* R_390_PC16DBL  */
+	{ _PC16, _L | _P      }, /* R_390_PLT16DBL */
 #ifdef __s390x__
-	{{ _PC32, _S, _P     }}, /* R_390_PC32DBL  */
-	{{ _PC32, _L, _P     }}, /* R_390_PLT32DBL */
-	{{ _PC32, _G, _P     }}, /* R_390_GOTPCDBL */
-	{{ _Q64,  _S         }}, /* R_390_64       */
-	{{ _Q64,  _S, _P     }}, /* R_390_PC64     */
-	{{ _Q64,  _O         }}, /* R_390_GOT64    */
-	{{ _Q64,  _L         }}, /* R_390_PLT64    */
-	{{ _PC32, _G, _O, _P }}, /* R_390_GOTENT   */
+	{ _PC32, _S | _P      }, /* R_390_PC32DBL  */
+	{ _PC32, _L | _P      }, /* R_390_PLT32DBL */
+	{ _PC32, _G | _P      }, /* R_390_GOTPCDBL */
+	{ _Q64,  _S           }, /* R_390_64       */
+	{ _Q64,  _S | _P      }, /* R_390_PC64     */
+	{ _Q64,  _O           }, /* R_390_GOT64    */
+	{ _Q64,  _L           }, /* R_390_PLT64    */
+	{ _PC32, _G | _O | _P }, /* R_390_GOTENT   */
 #endif
 };
 
@@ -173,59 +172,46 @@
 	Elf_Addr *where, value;
 	struct _reldesc desc;
 	const Elf_Sym *def;
-	int type, field, i;
+	int type;
 
 	type = ELF_R_TYPE(rela->r_info);
 	desc = reldesc[type];
-	field = desc.op[0];
-	if (field == _ILL) {
+	if (desc.field == _ILL)
 		return 0;
-	}
 
 	where = (Elf_Addr *)(obj->relocbase + rela->r_offset);
-
 	value = rela->r_addend;
-	for (i = 1; desc.op[i] && (i < 4); i++) {
-		switch (desc.op[i]) {
-		case _B:
-			value += (Elf_Addr)obj->relocbase;
-			break;
-		case _G:
-			dbg("_G\n");
-			break;
-		case _L:
-			dbg("_L\n");
-			break;
-		case _O:
-			dbg("_O\n");
-			break;
-		case _P:
-			value -= (Elf_Addr)where;
-			break;
-		case _S:
-			defobj = NULL;
-			def = find_symdef(ELF_R_SYM(rela->r_info),
-					  obj, &defobj, false, cache);
-			if (def == NULL)
-				return -1;
 
-			value += (Elf_Addr)(defobj->relocbase + def->st_value);
-			break;
-		}
+	if (type == R_390_RELATIVE) {
+		*where = (Elf_Addr)(obj->relocbase + value);
+		return 0;
 	}
 
-	if (field & _SHIFT1) {
-		/* We need shifting with sign copying. */
-		value = ((long)value) >> 1;
-		field &= ~_SHIFT1;
+ 	if (desc.action & _B)
+		value += (Elf_Addr)obj->relocbase;
+
+	if (desc.action & _S) {
+		defobj = NULL;
+		def = find_symdef(ELF_R_SYM(rela->r_info),
+				  obj, &defobj, false, cache);
+		if (def == NULL)
+			return -1;
+
+		value += (Elf_Addr)(defobj->relocbase + def->st_value);
 	}
 
-	switch (field) {
+	if (desc.action & _P)
+		value -= (Elf_Addr)where;
+
+	switch (desc.field) {
 	case _B8:
 		*(uint8_t *)where = (uint8_t)value;
 		break;
 	case _L12:
-		*(uint16_t *)where += value << 4;
+		*(uint16_t *)where |= value << 4;
+		break;
+	case _PC16:
+		*(int16_t *)where = ((int16_t)value) >> 1;
 		break;
 	case _H16:
 		*(int16_t *)where = (int16_t)value;
@@ -234,8 +220,12 @@
 		*(int32_t *)where = (int32_t)value;
 		break;
 #ifdef __s390x__
+	case _PC32:
+		*(int32_t *)where = ((int32_t)value) >> 1;
+		break;
 	case _Q64:
 		*where = value;
+		break;
 #endif
 	}
 
@@ -279,8 +269,7 @@
 int
 reloc_plt(Obj_Entry *obj)
 {
-	const Elf_Rela *relalim;
-	const Elf_Rela *rela;
+	const Elf_Rela *rela, *relalim;
 	Elf_Addr *where;
 
 	relalim = (const Elf_Rela *)((char *)obj->pltrela + obj->pltrelasize);

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe p4-projects" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200303011026.h21AQuwc086822>