Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 28 Dec 2012 21:44:45 +0000 (UTC)
From:      Brooks Davis <brooks@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r244788 - in projects/mtree: . bin/sh bin/test contrib/binutils/bfd contrib/libstdc++/include/std contrib/llvm/include/llvm/MC contrib/llvm/lib/ExecutionEngine/RuntimeDyld contrib/llvm/...
Message-ID:  <201212282144.qBSLijLA009407@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: brooks
Date: Fri Dec 28 21:44:45 2012
New Revision: 244788
URL: http://svnweb.freebsd.org/changeset/base/244788

Log:
  MFH @ r244774

Added:
  projects/mtree/lib/libc/nls/zh_CN.GB18030.msg
     - copied unchanged from r244774, head/lib/libc/nls/zh_CN.GB18030.msg
  projects/mtree/lib/libc/nls/zh_CN.GB2312.msg
     - copied unchanged from r244774, head/lib/libc/nls/zh_CN.GB2312.msg
  projects/mtree/lib/libc/nls/zh_CN.UTF-8.msg
     - copied unchanged from r244774, head/lib/libc/nls/zh_CN.UTF-8.msg
Modified:
  projects/mtree/UPDATING
  projects/mtree/bin/sh/jobs.c
  projects/mtree/bin/test/test.1
  projects/mtree/contrib/binutils/bfd/elflink.c
  projects/mtree/contrib/libstdc++/include/std/std_limits.h
  projects/mtree/contrib/llvm/include/llvm/MC/MCExpr.h
  projects/mtree/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp
  projects/mtree/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp
  projects/mtree/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h
  projects/mtree/contrib/llvm/lib/MC/MCExpr.cpp
  projects/mtree/contrib/llvm/lib/Target/Mips/InstPrinter/MipsInstPrinter.cpp
  projects/mtree/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp
  projects/mtree/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsBaseInfo.h
  projects/mtree/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp
  projects/mtree/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsFixupKinds.h
  projects/mtree/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp
  projects/mtree/contrib/llvm/lib/Target/Mips/Mips64InstrInfo.td
  projects/mtree/contrib/llvm/lib/Target/Mips/MipsCodeEmitter.cpp
  projects/mtree/contrib/llvm/lib/Target/Mips/MipsISelLowering.cpp
  projects/mtree/contrib/llvm/lib/Target/Mips/MipsInstrInfo.td
  projects/mtree/contrib/llvm/lib/Target/Mips/MipsJITInfo.cpp
  projects/mtree/contrib/llvm/lib/Target/Mips/MipsJITInfo.h
  projects/mtree/contrib/llvm/lib/Target/Mips/MipsMCInstLower.cpp
  projects/mtree/contrib/llvm/lib/Transforms/Scalar/SROA.cpp
  projects/mtree/contrib/llvm/tools/clang/include/clang/Sema/Scope.h
  projects/mtree/contrib/llvm/tools/clang/lib/Basic/Targets.cpp
  projects/mtree/contrib/llvm/tools/clang/lib/Basic/Version.cpp
  projects/mtree/contrib/llvm/tools/clang/lib/Driver/ToolChains.cpp
  projects/mtree/contrib/llvm/tools/clang/lib/Driver/ToolChains.h
  projects/mtree/contrib/llvm/tools/clang/lib/Driver/Tools.cpp
  projects/mtree/contrib/llvm/tools/clang/lib/Parse/ParseDeclCXX.cpp
  projects/mtree/contrib/llvm/tools/clang/lib/Parse/ParseStmt.cpp
  projects/mtree/contrib/llvm/tools/clang/lib/Sema/IdentifierResolver.cpp
  projects/mtree/contrib/xz/AUTHORS
  projects/mtree/contrib/xz/ChangeLog
  projects/mtree/contrib/xz/README
  projects/mtree/contrib/xz/THANKS
  projects/mtree/contrib/xz/po/de.po
  projects/mtree/contrib/xz/po/fr.po
  projects/mtree/contrib/xz/po/it.po
  projects/mtree/contrib/xz/po/pl.po
  projects/mtree/contrib/xz/src/common/sysdefs.h
  projects/mtree/contrib/xz/src/liblzma/api/lzma/version.h
  projects/mtree/contrib/xz/src/liblzma/simple/simple_coder.c
  projects/mtree/contrib/xz/src/liblzma/simple/simple_private.h
  projects/mtree/contrib/xz/src/xz/args.c
  projects/mtree/contrib/xz/src/xz/coder.c
  projects/mtree/contrib/xz/src/xz/message.c
  projects/mtree/contrib/xz/src/xz/xz.1
  projects/mtree/etc/mtree/BSD.var.dist
  projects/mtree/lib/clang/include/clang/Basic/Version.inc
  projects/mtree/lib/libc/gen/check_utility_compat.c
  projects/mtree/lib/libc/nls/Makefile.inc
  projects/mtree/lib/libc/sys/mlock.2
  projects/mtree/lib/libc/sys/mlockall.2
  projects/mtree/lib/libproc/test/t1-bkpt/t1-bkpt.c
  projects/mtree/lib/libutil/gr_util.c
  projects/mtree/lib/libutil/libutil.h
  projects/mtree/lib/libutil/pw_util.c
  projects/mtree/libexec/tftpd/tftp-io.c
  projects/mtree/release/picobsd/build/picobsd
  projects/mtree/share/man/man4/carp.4
  projects/mtree/share/man/man4/ng_ubt.4
  projects/mtree/share/man/man4/stf.4
  projects/mtree/share/man/man9/lock.9
  projects/mtree/share/man/man9/make_dev.9
  projects/mtree/sys/arm/arm/busdma_machdep.c
  projects/mtree/sys/arm/arm/pmap-v6.c
  projects/mtree/sys/arm/arm/pmap.c
  projects/mtree/sys/arm/broadcom/bcm2835/bcm2835_fb.c
  projects/mtree/sys/arm/broadcom/bcm2835/bcm2835_systimer.c
  projects/mtree/sys/arm/versatile/versatile_clcd.c
  projects/mtree/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
  projects/mtree/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c
  projects/mtree/sys/cddl/dev/dtrace/dtrace_debug.c
  projects/mtree/sys/dev/ath/ath_hal/ar5416/ar5416phy.h
  projects/mtree/sys/dev/cxgbe/t4_main.c
  projects/mtree/sys/dev/pci/pci_user.c
  projects/mtree/sys/dev/sound/usb/uaudio.c
  projects/mtree/sys/dev/usb/quirk/usb_quirk.c
  projects/mtree/sys/dev/usb/storage/ustorage_fs.c
  projects/mtree/sys/dev/usb/usb_msctest.c
  projects/mtree/sys/dev/usb/usbdevs
  projects/mtree/sys/dev/usb/wlan/if_urtw.c
  projects/mtree/sys/fs/devfs/devfs_vnops.c
  projects/mtree/sys/geom/geom_io.c
  projects/mtree/sys/geom/label/g_label.c
  projects/mtree/sys/kern/kern_conf.c
  projects/mtree/sys/kern/kern_lock.c
  projects/mtree/sys/kern/kern_mutex.c
  projects/mtree/sys/kern/kern_rmlock.c
  projects/mtree/sys/kern/kern_rwlock.c
  projects/mtree/sys/kern/kern_sx.c
  projects/mtree/sys/kern/subr_syscall.c
  projects/mtree/sys/kern/sys_generic.c
  projects/mtree/sys/kern/vfs_mount.c
  projects/mtree/sys/kern/vfs_subr.c
  projects/mtree/sys/net/if_stf.c
  projects/mtree/sys/net80211/ieee80211_hostap.c
  projects/mtree/sys/net80211/ieee80211_proto.c
  projects/mtree/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c
  projects/mtree/sys/netinet/in.c
  projects/mtree/sys/netinet/ip_carp.c
  projects/mtree/sys/netinet/sctp_pcb.c
  projects/mtree/sys/netinet/sctp_usrreq.c
  projects/mtree/sys/netinet/sctputil.c
  projects/mtree/sys/netinet/tcp_reass.c
  projects/mtree/sys/netinet/tcp_syncache.c
  projects/mtree/sys/netinet6/in6.c
  projects/mtree/sys/netpfil/ipfw/ip_fw2.c
  projects/mtree/sys/netpfil/ipfw/ip_fw_dynamic.c
  projects/mtree/sys/netpfil/ipfw/ip_fw_log.c
  projects/mtree/sys/netpfil/ipfw/ip_fw_private.h
  projects/mtree/sys/netpfil/pf/if_pflog.c
  projects/mtree/sys/netpfil/pf/if_pfsync.c
  projects/mtree/sys/netpfil/pf/pf.c
  projects/mtree/sys/netpfil/pf/pf_if.c
  projects/mtree/sys/netpfil/pf/pf_ioctl.c
  projects/mtree/sys/netpfil/pf/pf_lb.c
  projects/mtree/sys/netpfil/pf/pf_norm.c
  projects/mtree/sys/netpfil/pf/pf_osfp.c
  projects/mtree/sys/netpfil/pf/pf_ruleset.c
  projects/mtree/sys/netpfil/pf/pf_table.c
  projects/mtree/sys/sys/buf_ring.h
  projects/mtree/sys/sys/file.h
  projects/mtree/sys/tools/vnode_if.awk
  projects/mtree/tools/tools/netrate/netreceive/Makefile
  projects/mtree/tools/tools/netrate/netreceive/netreceive.c
  projects/mtree/tools/tools/netrate/netsend/netsend.c
  projects/mtree/usr.bin/clang/clang/clang.1
  projects/mtree/usr.bin/indent/indent_globs.h
  projects/mtree/usr.sbin/bsdconfig/bsdconfig
  projects/mtree/usr.sbin/bsdconfig/console/console
  projects/mtree/usr.sbin/bsdconfig/console/font
  projects/mtree/usr.sbin/bsdconfig/console/keymap
  projects/mtree/usr.sbin/bsdconfig/console/repeat
  projects/mtree/usr.sbin/bsdconfig/console/saver
  projects/mtree/usr.sbin/bsdconfig/console/screenmap
  projects/mtree/usr.sbin/bsdconfig/console/ttys
  projects/mtree/usr.sbin/bsdconfig/diskmgmt/diskmgmt
  projects/mtree/usr.sbin/bsdconfig/docsinstall/docsinstall
  projects/mtree/usr.sbin/bsdconfig/dot/dot
  projects/mtree/usr.sbin/bsdconfig/mouse/disable
  projects/mtree/usr.sbin/bsdconfig/mouse/enable
  projects/mtree/usr.sbin/bsdconfig/mouse/flags
  projects/mtree/usr.sbin/bsdconfig/mouse/mouse
  projects/mtree/usr.sbin/bsdconfig/mouse/port
  projects/mtree/usr.sbin/bsdconfig/mouse/type
  projects/mtree/usr.sbin/bsdconfig/networking/defaultrouter
  projects/mtree/usr.sbin/bsdconfig/networking/devices
  projects/mtree/usr.sbin/bsdconfig/networking/hostname
  projects/mtree/usr.sbin/bsdconfig/networking/nameservers
  projects/mtree/usr.sbin/bsdconfig/networking/networking
  projects/mtree/usr.sbin/bsdconfig/networking/share/common.subr
  projects/mtree/usr.sbin/bsdconfig/networking/share/device.subr
  projects/mtree/usr.sbin/bsdconfig/networking/share/hostname.subr
  projects/mtree/usr.sbin/bsdconfig/networking/share/ipaddr.subr
  projects/mtree/usr.sbin/bsdconfig/networking/share/media.subr
  projects/mtree/usr.sbin/bsdconfig/networking/share/netmask.subr
  projects/mtree/usr.sbin/bsdconfig/networking/share/resolv.subr
  projects/mtree/usr.sbin/bsdconfig/networking/share/routing.subr
  projects/mtree/usr.sbin/bsdconfig/password/password
  projects/mtree/usr.sbin/bsdconfig/password/share/password.subr
  projects/mtree/usr.sbin/bsdconfig/security/kern_securelevel
  projects/mtree/usr.sbin/bsdconfig/security/security
  projects/mtree/usr.sbin/bsdconfig/share/common.subr
  projects/mtree/usr.sbin/bsdconfig/share/dialog.subr
  projects/mtree/usr.sbin/bsdconfig/share/mustberoot.subr
  projects/mtree/usr.sbin/bsdconfig/share/strings.subr
  projects/mtree/usr.sbin/bsdconfig/share/sysrc.subr
  projects/mtree/usr.sbin/bsdconfig/startup/misc
  projects/mtree/usr.sbin/bsdconfig/startup/rcadd
  projects/mtree/usr.sbin/bsdconfig/startup/rcconf
  projects/mtree/usr.sbin/bsdconfig/startup/rcdelete
  projects/mtree/usr.sbin/bsdconfig/startup/rcedit
  projects/mtree/usr.sbin/bsdconfig/startup/rcvar
  projects/mtree/usr.sbin/bsdconfig/startup/share/rcconf.subr
  projects/mtree/usr.sbin/bsdconfig/startup/share/rcedit.subr
  projects/mtree/usr.sbin/bsdconfig/startup/share/rcvar.subr
  projects/mtree/usr.sbin/bsdconfig/startup/startup
  projects/mtree/usr.sbin/bsdconfig/timezone/share/continents.subr
  projects/mtree/usr.sbin/bsdconfig/timezone/share/countries.subr
  projects/mtree/usr.sbin/bsdconfig/timezone/share/iso3166.subr
  projects/mtree/usr.sbin/bsdconfig/timezone/share/menus.subr
  projects/mtree/usr.sbin/bsdconfig/timezone/share/zones.subr
  projects/mtree/usr.sbin/bsdconfig/timezone/timezone
  projects/mtree/usr.sbin/bsdconfig/ttys/ttys
  projects/mtree/usr.sbin/bsdconfig/usermgmt/groupadd
  projects/mtree/usr.sbin/bsdconfig/usermgmt/groupdel
  projects/mtree/usr.sbin/bsdconfig/usermgmt/groupedit
  projects/mtree/usr.sbin/bsdconfig/usermgmt/groupinput
  projects/mtree/usr.sbin/bsdconfig/usermgmt/share/group_input.subr
  projects/mtree/usr.sbin/bsdconfig/usermgmt/share/user_input.subr
  projects/mtree/usr.sbin/bsdconfig/usermgmt/useradd
  projects/mtree/usr.sbin/bsdconfig/usermgmt/userdel
  projects/mtree/usr.sbin/bsdconfig/usermgmt/useredit
  projects/mtree/usr.sbin/bsdconfig/usermgmt/userinput
  projects/mtree/usr.sbin/bsdconfig/usermgmt/usermgmt
  projects/mtree/usr.sbin/gssd/Makefile
  projects/mtree/usr.sbin/gssd/gssd.8
  projects/mtree/usr.sbin/gssd/gssd.c
  projects/mtree/usr.sbin/mountd/exports.5
  projects/mtree/usr.sbin/nfsd/nfsv4.4
  projects/mtree/usr.sbin/nmtree/Makefile
  projects/mtree/usr.sbin/pkg/pkg.c
  projects/mtree/usr.sbin/pw/pw_group.c
  projects/mtree/usr.sbin/pw/pw_user.c
  projects/mtree/usr.sbin/pw/pw_vpw.c
  projects/mtree/usr.sbin/pw/pwupd.c
Directory Properties:
  projects/mtree/   (props changed)
  projects/mtree/contrib/binutils/   (props changed)
  projects/mtree/contrib/libstdc++/   (props changed)
  projects/mtree/contrib/llvm/   (props changed)
  projects/mtree/contrib/llvm/tools/clang/   (props changed)
  projects/mtree/contrib/xz/   (props changed)
  projects/mtree/lib/libc/   (props changed)
  projects/mtree/lib/libutil/   (props changed)
  projects/mtree/share/man/man4/   (props changed)
  projects/mtree/sys/   (props changed)
  projects/mtree/sys/cddl/contrib/opensolaris/   (props changed)

Modified: projects/mtree/UPDATING
==============================================================================
--- projects/mtree/UPDATING	Fri Dec 28 21:35:47 2012	(r244787)
+++ projects/mtree/UPDATING	Fri Dec 28 21:44:45 2012	(r244788)
@@ -26,6 +26,17 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 10
 	disable the most expensive debugging functionality run
 	"ln -s 'abort:false,junk:false' /etc/malloc.conf".)
 
+20121223:
+	After switching to Clang as the default compiler some users of ZFS
+	on i386 systems started to experience stack overflow kernel panics.
+	Please consider using 'options KSTACK_PAGES=4' in such configurations.
+
+20121222:
+	GEOM_LABEL now mangles label names read from file system metadata.
+	Mangling affect labels containing spaces, non-printable characters,
+	'%' or '"'. Device names in /etc/fstab and other places may need to
+	be updated.
+
 20121217:
 	By default, only the 10 most recent kernel dumps will be saved.  To
 	restore the previous behaviour (no limit on the number of kernel dumps

Modified: projects/mtree/bin/sh/jobs.c
==============================================================================
--- projects/mtree/bin/sh/jobs.c	Fri Dec 28 21:35:47 2012	(r244787)
+++ projects/mtree/bin/sh/jobs.c	Fri Dec 28 21:44:45 2012	(r244788)
@@ -298,6 +298,7 @@ showjob(struct job *jp, int mode)
 {
 	char s[64];
 	char statestr[64];
+	const char *sigstr;
 	struct procstat *ps;
 	struct job *j;
 	int col, curr, i, jobno, prev, procno;
@@ -324,8 +325,9 @@ showjob(struct job *jp, int mode)
 			i = WSTOPSIG(ps->status);
 		else
 			i = -1;
-		if (i > 0 && i < sys_nsig && sys_siglist[i])
-			strcpy(statestr, sys_siglist[i]);
+		sigstr = strsignal(i);
+		if (sigstr != NULL)
+			strcpy(statestr, sigstr);
 		else
 			strcpy(statestr, "Suspended");
 #endif
@@ -337,10 +339,11 @@ showjob(struct job *jp, int mode)
 			    WEXITSTATUS(ps->status));
 	} else {
 		i = WTERMSIG(ps->status);
-		if (i > 0 && i < sys_nsig && sys_siglist[i])
-			strcpy(statestr, sys_siglist[i]);
+		sigstr = strsignal(i);
+		if (sigstr != NULL)
+			strcpy(statestr, sigstr);
 		else
-			fmtstr(statestr, 64, "Signal %d", i);
+			strcpy(statestr, "Unknown signal");
 		if (WCOREDUMP(ps->status))
 			strcat(statestr, " (core dumped)");
 	}
@@ -1019,6 +1022,7 @@ dowait(int mode, struct job *job)
 	struct procstat *sp;
 	struct job *jp;
 	struct job *thisjob;
+	const char *sigstr;
 	int done;
 	int stopped;
 	int sig;
@@ -1129,10 +1133,11 @@ dowait(int mode, struct job *job)
 				coredump = WCOREDUMP(sp->status);
 			}
 		if (sig > 0 && sig != SIGINT && sig != SIGPIPE) {
-			if (sig < sys_nsig && sys_siglist[sig])
-				out2str(sys_siglist[sig]);
+			sigstr = strsignal(sig);
+			if (sigstr != NULL)
+				out2str(sigstr);
 			else
-				outfmt(out2, "Signal %d", sig);
+				out2str("Unknown signal");
 			if (coredump)
 				out2str(" (core dumped)");
 			out2c('\n');

Modified: projects/mtree/bin/test/test.1
==============================================================================
--- projects/mtree/bin/test/test.1	Fri Dec 28 21:35:47 2012	(r244787)
+++ projects/mtree/bin/test/test.1	Fri Dec 28 21:44:45 2012	(r244788)
@@ -32,7 +32,7 @@
 .\"     @(#)test.1	8.1 (Berkeley) 5/31/93
 .\" $FreeBSD$
 .\"
-.Dd September 10, 2010
+.Dd December 27, 2012
 .Dt TEST 1
 .Os
 .Sh NAME
@@ -331,6 +331,13 @@ missing.
 .It >1
 An error occurred.
 .El
+.Sh COMPATIBILITY
+For compatibility with some other implementations,
+the
+.Cm =
+primary can be substituted with
+.Cm ==
+with the same meaning.
 .Sh SEE ALSO
 .Xr builtin 1 ,
 .Xr expr 1 ,

Modified: projects/mtree/contrib/binutils/bfd/elflink.c
==============================================================================
--- projects/mtree/contrib/binutils/bfd/elflink.c	Fri Dec 28 21:35:47 2012	(r244787)
+++ projects/mtree/contrib/binutils/bfd/elflink.c	Fri Dec 28 21:44:45 2012	(r244788)
@@ -10584,6 +10584,7 @@ elf_gc_sweep (bfd *abfd, struct bfd_link
 	{
 	  /* Keep debug and special sections.  */
 	  if ((o->flags & (SEC_DEBUGGING | SEC_LINKER_CREATED)) != 0
+	      || elf_section_data (o)->this_hdr.sh_type == SHT_NOTE
 	      || (o->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) == 0)
 	    o->gc_mark = 1;
 

Modified: projects/mtree/contrib/libstdc++/include/std/std_limits.h
==============================================================================
--- projects/mtree/contrib/libstdc++/include/std/std_limits.h	Fri Dec 28 21:35:47 2012	(r244787)
+++ projects/mtree/contrib/libstdc++/include/std/std_limits.h	Fri Dec 28 21:44:45 2012	(r244788)
@@ -134,10 +134,11 @@
 #define __glibcxx_signed(T)	((T)(-1) < 0)
 
 #define __glibcxx_min(T) \
-  (__glibcxx_signed (T) ? (T)1 << __glibcxx_digits (T) : (T)0)
+  (__glibcxx_signed (T) ? (((T)1 << (__glibcxx_digits (T) - 1)) << 1) : (T)0)
 
 #define __glibcxx_max(T) \
-  (__glibcxx_signed (T) ? ((T)1 << __glibcxx_digits (T)) - 1 : ~(T)0)
+  (__glibcxx_signed (T) ? \
+   (((((T)1 << (__glibcxx_digits (T) - 1)) - 1) << 1) + 1) : ~(T)0)
 
 #define __glibcxx_digits(T) \
   (sizeof(T) * __CHAR_BIT__ - __glibcxx_signed (T))

Modified: projects/mtree/contrib/llvm/include/llvm/MC/MCExpr.h
==============================================================================
--- projects/mtree/contrib/llvm/include/llvm/MC/MCExpr.h	Fri Dec 28 21:35:47 2012	(r244787)
+++ projects/mtree/contrib/llvm/include/llvm/MC/MCExpr.h	Fri Dec 28 21:44:45 2012	(r244788)
@@ -197,7 +197,11 @@ public:
     VK_Mips_GOT_PAGE,
     VK_Mips_GOT_OFST,
     VK_Mips_HIGHER,
-    VK_Mips_HIGHEST
+    VK_Mips_HIGHEST,
+    VK_Mips_GOT_HI16,
+    VK_Mips_GOT_LO16,
+    VK_Mips_CALL_HI16,
+    VK_Mips_CALL_LO16
   };
 
 private:

Modified: projects/mtree/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp
==============================================================================
--- projects/mtree/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp	Fri Dec 28 21:35:47 2012	(r244787)
+++ projects/mtree/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp	Fri Dec 28 21:44:45 2012	(r244788)
@@ -346,7 +346,7 @@ uint8_t *RuntimeDyldImpl::createStubFunc
     uint32_t *StubAddr = (uint32_t*)Addr;
     *StubAddr = 0xe51ff004; // ldr pc,<label>
     return (uint8_t*)++StubAddr;
-  } else if (Arch == Triple::mipsel) {
+  } else if (Arch == Triple::mipsel || Arch == Triple::mips) {
     uint32_t *StubAddr = (uint32_t*)Addr;
     // 0:   3c190000        lui     t9,%hi(addr).
     // 4:   27390000        addiu   t9,t9,%lo(addr).

Modified: projects/mtree/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp
==============================================================================
--- projects/mtree/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp	Fri Dec 28 21:35:47 2012	(r244787)
+++ projects/mtree/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp	Fri Dec 28 21:44:45 2012	(r244788)
@@ -676,7 +676,8 @@ void RuntimeDyldELF::processRelocationRe
                         RelType, 0);
       Section.StubOffset += getMaxStubSize();
     }
-  } else if (Arch == Triple::mipsel && RelType == ELF::R_MIPS_26) {
+  } else if ((Arch == Triple::mipsel || Arch == Triple::mips) &&
+             RelType == ELF::R_MIPS_26) {
     // This is an Mips branch relocation, need to use a stub function.
     DEBUG(dbgs() << "\t\tThis is a Mips branch relocation.");
     SectionEntry &Section = Sections[Rel.SectionID];

Modified: projects/mtree/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h
==============================================================================
--- projects/mtree/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h	Fri Dec 28 21:35:47 2012	(r244787)
+++ projects/mtree/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h	Fri Dec 28 21:44:45 2012	(r244788)
@@ -168,7 +168,7 @@ protected:
   inline unsigned getMaxStubSize() {
     if (Arch == Triple::arm || Arch == Triple::thumb)
       return 8; // 32-bit instruction and 32-bit address
-    else if (Arch == Triple::mipsel)
+    else if (Arch == Triple::mipsel || Arch == Triple::mips)
       return 16;
     else if (Arch == Triple::ppc64)
       return 44;

Modified: projects/mtree/contrib/llvm/lib/MC/MCExpr.cpp
==============================================================================
--- projects/mtree/contrib/llvm/lib/MC/MCExpr.cpp	Fri Dec 28 21:35:47 2012	(r244787)
+++ projects/mtree/contrib/llvm/lib/MC/MCExpr.cpp	Fri Dec 28 21:44:45 2012	(r244788)
@@ -229,6 +229,10 @@ StringRef MCSymbolRefExpr::getVariantKin
   case VK_Mips_GOT_OFST: return "GOT_OFST";
   case VK_Mips_HIGHER:   return "HIGHER";
   case VK_Mips_HIGHEST:  return "HIGHEST";
+  case VK_Mips_GOT_HI16: return "GOT_HI16";
+  case VK_Mips_GOT_LO16: return "GOT_LO16";
+  case VK_Mips_CALL_HI16: return "CALL_HI16";
+  case VK_Mips_CALL_LO16: return "CALL_LO16";
   }
   llvm_unreachable("Invalid variant kind");
 }

Modified: projects/mtree/contrib/llvm/lib/Target/Mips/InstPrinter/MipsInstPrinter.cpp
==============================================================================
--- projects/mtree/contrib/llvm/lib/Target/Mips/InstPrinter/MipsInstPrinter.cpp	Fri Dec 28 21:35:47 2012	(r244787)
+++ projects/mtree/contrib/llvm/lib/Target/Mips/InstPrinter/MipsInstPrinter.cpp	Fri Dec 28 21:44:45 2012	(r244788)
@@ -128,6 +128,10 @@ static void printExpr(const MCExpr *Expr
   case MCSymbolRefExpr::VK_Mips_GOT_OFST:  OS << "%got_ofst("; break;
   case MCSymbolRefExpr::VK_Mips_HIGHER:    OS << "%higher("; break;
   case MCSymbolRefExpr::VK_Mips_HIGHEST:   OS << "%highest("; break;
+  case MCSymbolRefExpr::VK_Mips_GOT_HI16:  OS << "%got_hi("; break;
+  case MCSymbolRefExpr::VK_Mips_GOT_LO16:  OS << "%got_lo("; break;
+  case MCSymbolRefExpr::VK_Mips_CALL_HI16: OS << "%call_hi("; break;
+  case MCSymbolRefExpr::VK_Mips_CALL_LO16: OS << "%call_lo("; break;
   }
 
   OS << SRE->getSymbol();

Modified: projects/mtree/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp
==============================================================================
--- projects/mtree/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp	Fri Dec 28 21:35:47 2012	(r244787)
+++ projects/mtree/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp	Fri Dec 28 21:44:45 2012	(r244788)
@@ -42,6 +42,8 @@ static unsigned adjustFixupValue(unsigne
   case Mips::fixup_Mips_GOT_PAGE:
   case Mips::fixup_Mips_GOT_OFST:
   case Mips::fixup_Mips_GOT_DISP:
+  case Mips::fixup_Mips_GOT_LO16:
+  case Mips::fixup_Mips_CALL_LO16:
     break;
   case Mips::fixup_Mips_PC16:
     // So far we are only using this type for branches.
@@ -60,6 +62,8 @@ static unsigned adjustFixupValue(unsigne
     break;
   case Mips::fixup_Mips_HI16:
   case Mips::fixup_Mips_GOT_Local:
+  case Mips::fixup_Mips_GOT_HI16:
+  case Mips::fixup_Mips_CALL_HI16:
     // Get the 2nd 16-bits. Also add 1 if bit 15 is 1.
     Value = ((Value + 0x8000) >> 16) & 0xffff;
     break;
@@ -179,7 +183,11 @@ public:
       { "fixup_Mips_GOT_OFST",     0,     16,   0 },
       { "fixup_Mips_GOT_DISP",     0,     16,   0 },
       { "fixup_Mips_HIGHER",       0,     16,   0 },
-      { "fixup_Mips_HIGHEST",      0,     16,   0 }
+      { "fixup_Mips_HIGHEST",      0,     16,   0 },
+      { "fixup_Mips_GOT_HI16",     0,     16,   0 },
+      { "fixup_Mips_GOT_LO16",     0,     16,   0 },
+      { "fixup_Mips_CALL_HI16",    0,     16,   0 },
+      { "fixup_Mips_CALL_LO16",    0,     16,   0 }
     };
 
     if (Kind < FirstTargetFixupKind)

Modified: projects/mtree/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsBaseInfo.h
==============================================================================
--- projects/mtree/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsBaseInfo.h	Fri Dec 28 21:35:47 2012	(r244787)
+++ projects/mtree/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsBaseInfo.h	Fri Dec 28 21:44:45 2012	(r244788)
@@ -84,7 +84,13 @@ namespace MipsII {
     /// MO_HIGHER/HIGHEST - Represents the highest or higher half word of a
     /// 64-bit symbol address.
     MO_HIGHER,
-    MO_HIGHEST
+    MO_HIGHEST,
+
+    /// MO_GOT_HI16/LO16, MO_CALL_HI16/LO16 - Relocations used for large GOTs.
+    MO_GOT_HI16,
+    MO_GOT_LO16,
+    MO_CALL_HI16,
+    MO_CALL_LO16
   };
 
   enum {

Modified: projects/mtree/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp
==============================================================================
--- projects/mtree/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp	Fri Dec 28 21:35:47 2012	(r244787)
+++ projects/mtree/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp	Fri Dec 28 21:44:45 2012	(r244788)
@@ -179,6 +179,18 @@ unsigned MipsELFObjectWriter::GetRelocTy
   case Mips::fixup_Mips_HIGHEST:
     Type = ELF::R_MIPS_HIGHEST;
     break;
+  case Mips::fixup_Mips_GOT_HI16:
+    Type = ELF::R_MIPS_GOT_HI16;
+    break;
+  case Mips::fixup_Mips_GOT_LO16:
+    Type = ELF::R_MIPS_GOT_LO16;
+    break;
+  case Mips::fixup_Mips_CALL_HI16:
+    Type = ELF::R_MIPS_CALL_HI16;
+    break;
+  case Mips::fixup_Mips_CALL_LO16:
+    Type = ELF::R_MIPS_CALL_LO16;
+    break;
   }
   return Type;
 }

Modified: projects/mtree/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsFixupKinds.h
==============================================================================
--- projects/mtree/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsFixupKinds.h	Fri Dec 28 21:35:47 2012	(r244787)
+++ projects/mtree/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsFixupKinds.h	Fri Dec 28 21:44:45 2012	(r244788)
@@ -116,6 +116,18 @@ namespace Mips {
     // resulting in - R_MIPS_HIGHEST
     fixup_Mips_HIGHEST,
 
+    // resulting in - R_MIPS_GOT_HI16
+    fixup_Mips_GOT_HI16,
+
+    // resulting in - R_MIPS_GOT_LO16
+    fixup_Mips_GOT_LO16,
+
+    // resulting in - R_MIPS_CALL_HI16
+    fixup_Mips_CALL_HI16,
+
+    // resulting in - R_MIPS_CALL_LO16
+    fixup_Mips_CALL_LO16,
+
     // Marker
     LastTargetFixupKind,
     NumTargetFixupKinds = LastTargetFixupKind - FirstTargetFixupKind

Modified: projects/mtree/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp
==============================================================================
--- projects/mtree/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp	Fri Dec 28 21:35:47 2012	(r244787)
+++ projects/mtree/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp	Fri Dec 28 21:44:45 2012	(r244788)
@@ -287,6 +287,18 @@ getMachineOpValue(const MCInst &MI, cons
   case MCSymbolRefExpr::VK_Mips_HIGHEST:
     FixupKind = Mips::fixup_Mips_HIGHEST;
     break;
+  case MCSymbolRefExpr::VK_Mips_GOT_HI16:
+    FixupKind = Mips::fixup_Mips_GOT_HI16;
+    break;
+  case MCSymbolRefExpr::VK_Mips_GOT_LO16:
+    FixupKind = Mips::fixup_Mips_GOT_LO16;
+    break;
+  case MCSymbolRefExpr::VK_Mips_CALL_HI16:
+    FixupKind = Mips::fixup_Mips_CALL_HI16;
+    break;
+  case MCSymbolRefExpr::VK_Mips_CALL_LO16:
+    FixupKind = Mips::fixup_Mips_CALL_LO16;
+    break;
   } // switch
 
   Fixups.push_back(MCFixup::Create(0, MO.getExpr(), MCFixupKind(FixupKind)));

Modified: projects/mtree/contrib/llvm/lib/Target/Mips/Mips64InstrInfo.td
==============================================================================
--- projects/mtree/contrib/llvm/lib/Target/Mips/Mips64InstrInfo.td	Fri Dec 28 21:35:47 2012	(r244787)
+++ projects/mtree/contrib/llvm/lib/Target/Mips/Mips64InstrInfo.td	Fri Dec 28 21:44:45 2012	(r244788)
@@ -255,6 +255,7 @@ def : MipsPat<(MipsHi tblockaddress:$in)
 def : MipsPat<(MipsHi tjumptable:$in), (LUi64 tjumptable:$in)>;
 def : MipsPat<(MipsHi tconstpool:$in), (LUi64 tconstpool:$in)>;
 def : MipsPat<(MipsHi tglobaltlsaddr:$in), (LUi64 tglobaltlsaddr:$in)>;
+def : MipsPat<(MipsHi texternalsym:$in), (LUi64 texternalsym:$in)>;
 
 def : MipsPat<(MipsLo tglobaladdr:$in), (DADDiu ZERO_64, tglobaladdr:$in)>;
 def : MipsPat<(MipsLo tblockaddress:$in), (DADDiu ZERO_64, tblockaddress:$in)>;
@@ -262,6 +263,7 @@ def : MipsPat<(MipsLo tjumptable:$in), (
 def : MipsPat<(MipsLo tconstpool:$in), (DADDiu ZERO_64, tconstpool:$in)>;
 def : MipsPat<(MipsLo tglobaltlsaddr:$in),
               (DADDiu ZERO_64, tglobaltlsaddr:$in)>;
+def : MipsPat<(MipsLo texternalsym:$in), (DADDiu ZERO_64, texternalsym:$in)>;
 
 def : MipsPat<(add CPU64Regs:$hi, (MipsLo tglobaladdr:$lo)),
               (DADDiu CPU64Regs:$hi, tglobaladdr:$lo)>;

Modified: projects/mtree/contrib/llvm/lib/Target/Mips/MipsCodeEmitter.cpp
==============================================================================
--- projects/mtree/contrib/llvm/lib/Target/Mips/MipsCodeEmitter.cpp	Fri Dec 28 21:35:47 2012	(r244787)
+++ projects/mtree/contrib/llvm/lib/Target/Mips/MipsCodeEmitter.cpp	Fri Dec 28 21:44:45 2012	(r244788)
@@ -85,7 +85,7 @@ class MipsCodeEmitter : public MachineFu
 
   private:
 
-    void emitWordLE(unsigned Word);
+    void emitWord(unsigned Word);
 
     /// Routines that handle operands which add machine relocations which are
     /// fixed up by the relocation stage.
@@ -112,12 +112,6 @@ class MipsCodeEmitter : public MachineFu
     unsigned getSizeExtEncoding(const MachineInstr &MI, unsigned OpNo) const;
     unsigned getSizeInsEncoding(const MachineInstr &MI, unsigned OpNo) const;
 
-    int emitULW(const MachineInstr &MI);
-    int emitUSW(const MachineInstr &MI);
-    int emitULH(const MachineInstr &MI);
-    int emitULHu(const MachineInstr &MI);
-    int emitUSH(const MachineInstr &MI);
-
     void emitGlobalAddressUnaligned(const GlobalValue *GV, unsigned Reloc,
                                     int Offset) const;
   };
@@ -133,7 +127,7 @@ bool MipsCodeEmitter::runOnMachineFuncti
   MCPEs = &MF.getConstantPool()->getConstants();
   MJTEs = 0;
   if (MF.getJumpTableInfo()) MJTEs = &MF.getJumpTableInfo()->getJumpTables();
-  JTI->Initialize(MF, IsPIC);
+  JTI->Initialize(MF, IsPIC, Subtarget->isLittle());
   MCE.setModuleInfo(&getAnalysis<MachineModuleInfo> ());
 
   do {
@@ -271,103 +265,6 @@ void MipsCodeEmitter::emitMachineBasicBl
                                              Reloc, BB));
 }
 
-int MipsCodeEmitter::emitUSW(const MachineInstr &MI) {
-  unsigned src = getMachineOpValue(MI, MI.getOperand(0));
-  unsigned base = getMachineOpValue(MI, MI.getOperand(1));
-  unsigned offset = getMachineOpValue(MI, MI.getOperand(2));
-  // swr src, offset(base)
-  // swl src, offset+3(base)
-  MCE.emitWordLE(
-    (0x2e << 26) | (base << 21) | (src << 16) | (offset & 0xffff));
-  MCE.emitWordLE(
-    (0x2a << 26) | (base << 21) | (src << 16) | ((offset+3) & 0xffff));
-  return 2;
-}
-
-int MipsCodeEmitter::emitULW(const MachineInstr &MI) {
-  unsigned dst = getMachineOpValue(MI, MI.getOperand(0));
-  unsigned base = getMachineOpValue(MI, MI.getOperand(1));
-  unsigned offset = getMachineOpValue(MI, MI.getOperand(2));
-  unsigned at = 1;
-  if (dst != base) {
-    // lwr dst, offset(base)
-    // lwl dst, offset+3(base)
-    MCE.emitWordLE(
-      (0x26 << 26) | (base << 21) | (dst << 16) | (offset & 0xffff));
-    MCE.emitWordLE(
-      (0x22 << 26) | (base << 21) | (dst << 16) | ((offset+3) & 0xffff));
-    return 2;
-  } else {
-    // lwr at, offset(base)
-    // lwl at, offset+3(base)
-    // addu dst, at, $zero
-    MCE.emitWordLE(
-      (0x26 << 26) | (base << 21) | (at << 16) | (offset & 0xffff));
-    MCE.emitWordLE(
-      (0x22 << 26) | (base << 21) | (at << 16) | ((offset+3) & 0xffff));
-    MCE.emitWordLE(
-      (0x0 << 26) | (at << 21) | (0x0 << 16) | (dst << 11) | (0x0 << 6) | 0x21);
-    return 3;
-  }
-}
-
-int MipsCodeEmitter::emitUSH(const MachineInstr &MI) {
-  unsigned src = getMachineOpValue(MI, MI.getOperand(0));
-  unsigned base = getMachineOpValue(MI, MI.getOperand(1));
-  unsigned offset = getMachineOpValue(MI, MI.getOperand(2));
-  unsigned at = 1;
-  // sb src, offset(base)
-  // srl at,src,8
-  // sb at, offset+1(base)
-  MCE.emitWordLE(
-    (0x28 << 26) | (base << 21) | (src << 16) | (offset & 0xffff));
-  MCE.emitWordLE(
-    (0x0 << 26) | (0x0 << 21) | (src << 16) | (at << 11) | (0x8 << 6) | 0x2);
-  MCE.emitWordLE(
-    (0x28 << 26) | (base << 21) | (at << 16) | ((offset+1) & 0xffff));
-  return 3;
-}
-
-int MipsCodeEmitter::emitULH(const MachineInstr &MI) {
-  unsigned dst = getMachineOpValue(MI, MI.getOperand(0));
-  unsigned base = getMachineOpValue(MI, MI.getOperand(1));
-  unsigned offset = getMachineOpValue(MI, MI.getOperand(2));
-  unsigned at = 1;
-  // lbu at, offset(base)
-  // lb dst, offset+1(base)
-  // sll dst,dst,8
-  // or dst,dst,at
-  MCE.emitWordLE(
-    (0x24 << 26) | (base << 21) | (at << 16) | (offset & 0xffff));
-  MCE.emitWordLE(
-    (0x20 << 26) | (base << 21) | (dst << 16) | ((offset+1) & 0xffff));
-  MCE.emitWordLE(
-    (0x0 << 26) | (0x0 << 21) | (dst << 16) | (dst << 11) | (0x8 << 6) | 0x0);
-  MCE.emitWordLE(
-    (0x0 << 26) | (dst << 21) | (at << 16) | (dst << 11) | (0x0 << 6) | 0x25);
-  return 4;
-}
-
-int MipsCodeEmitter::emitULHu(const MachineInstr &MI) {
-  unsigned dst = getMachineOpValue(MI, MI.getOperand(0));
-  unsigned base = getMachineOpValue(MI, MI.getOperand(1));
-  unsigned offset = getMachineOpValue(MI, MI.getOperand(2));
-  unsigned at = 1;
-  // lbu at, offset(base)
-  // lbu dst, offset+1(base)
-  // sll dst,dst,8
-  // or dst,dst,at
-  MCE.emitWordLE(
-    (0x24 << 26) | (base << 21) | (at << 16) | (offset & 0xffff));
-  MCE.emitWordLE(
-    (0x24 << 26) | (base << 21) | (dst << 16) | ((offset+1) & 0xffff));
-  MCE.emitWordLE(
-    (0x0 << 26) | (0x0 << 21) | (dst << 16) | (dst << 11) | (0x8 << 6) | 0x0);
-  MCE.emitWordLE(
-    (0x0 << 26) | (dst << 21) | (at << 16) | (dst << 11) | (0x0 << 6) | 0x25);
-  return 4;
-}
-
 void MipsCodeEmitter::emitInstruction(const MachineInstr &MI) {
   DEBUG(errs() << "JIT: " << (void*)MCE.getCurrentPCValue() << ":\t" << MI);
 
@@ -377,16 +274,19 @@ void MipsCodeEmitter::emitInstruction(co
   if ((MI.getDesc().TSFlags & MipsII::FormMask) == MipsII::Pseudo)
     return;
 
-  emitWordLE(getBinaryCodeForInstr(MI));
+  emitWord(getBinaryCodeForInstr(MI));
   ++NumEmitted;  // Keep track of the # of mi's emitted
 
   MCE.processDebugLoc(MI.getDebugLoc(), false);
 }
 
-void MipsCodeEmitter::emitWordLE(unsigned Word) {
+void MipsCodeEmitter::emitWord(unsigned Word) {
   DEBUG(errs() << "  0x";
         errs().write_hex(Word) << "\n");
-  MCE.emitWordLE(Word);
+  if (Subtarget->isLittle())
+    MCE.emitWordLE(Word);
+  else
+    MCE.emitWordBE(Word);
 }
 
 /// createMipsJITCodeEmitterPass - Return a pass that emits the collected Mips

Modified: projects/mtree/contrib/llvm/lib/Target/Mips/MipsISelLowering.cpp
==============================================================================
--- projects/mtree/contrib/llvm/lib/Target/Mips/MipsISelLowering.cpp	Fri Dec 28 21:35:47 2012	(r244787)
+++ projects/mtree/contrib/llvm/lib/Target/Mips/MipsISelLowering.cpp	Fri Dec 28 21:44:45 2012	(r244788)
@@ -46,6 +46,10 @@ static cl::opt<bool>
 EnableMipsTailCalls("enable-mips-tail-calls", cl::Hidden,
                     cl::desc("MIPS: Enable tail calls."), cl::init(false));
 
+static cl::opt<bool>
+LargeGOT("mxgot", cl::Hidden,
+         cl::desc("MIPS: Enable GOT larger than 64k."), cl::init(false));
+
 static const uint16_t O32IntRegs[4] = {
   Mips::A0, Mips::A1, Mips::A2, Mips::A3
 };
@@ -77,6 +81,71 @@ static SDValue GetGlobalReg(SelectionDAG
   return DAG.getRegister(FI->getGlobalBaseReg(), Ty);
 }
 
+static SDValue getTargetNode(SDValue Op, SelectionDAG &DAG, unsigned Flag) {
+  EVT Ty = Op.getValueType();
+
+  if (GlobalAddressSDNode *N = dyn_cast<GlobalAddressSDNode>(Op))
+    return DAG.getTargetGlobalAddress(N->getGlobal(), Op.getDebugLoc(), Ty, 0,
+                                      Flag);
+  if (ExternalSymbolSDNode *N = dyn_cast<ExternalSymbolSDNode>(Op))
+    return DAG.getTargetExternalSymbol(N->getSymbol(), Ty, Flag);
+  if (BlockAddressSDNode *N = dyn_cast<BlockAddressSDNode>(Op))
+    return DAG.getTargetBlockAddress(N->getBlockAddress(), Ty, 0, Flag);
+  if (JumpTableSDNode *N = dyn_cast<JumpTableSDNode>(Op))
+    return DAG.getTargetJumpTable(N->getIndex(), Ty, Flag);
+  if (ConstantPoolSDNode *N = dyn_cast<ConstantPoolSDNode>(Op))
+    return DAG.getTargetConstantPool(N->getConstVal(), Ty, N->getAlignment(),
+                                     N->getOffset(), Flag);
+
+  llvm_unreachable("Unexpected node type.");
+  return SDValue();
+}
+
+static SDValue getAddrNonPIC(SDValue Op, SelectionDAG &DAG) {
+  DebugLoc DL = Op.getDebugLoc();
+  EVT Ty = Op.getValueType();
+  SDValue Hi = getTargetNode(Op, DAG, MipsII::MO_ABS_HI);
+  SDValue Lo = getTargetNode(Op, DAG, MipsII::MO_ABS_LO);
+  return DAG.getNode(ISD::ADD, DL, Ty,
+                     DAG.getNode(MipsISD::Hi, DL, Ty, Hi),
+                     DAG.getNode(MipsISD::Lo, DL, Ty, Lo));
+}
+
+static SDValue getAddrLocal(SDValue Op, SelectionDAG &DAG, bool HasMips64) {
+  DebugLoc DL = Op.getDebugLoc();
+  EVT Ty = Op.getValueType();
+  unsigned GOTFlag = HasMips64 ? MipsII::MO_GOT_PAGE : MipsII::MO_GOT;
+  SDValue GOT = DAG.getNode(MipsISD::Wrapper, DL, Ty, GetGlobalReg(DAG, Ty),
+                            getTargetNode(Op, DAG, GOTFlag));
+  SDValue Load = DAG.getLoad(Ty, DL, DAG.getEntryNode(), GOT,
+                             MachinePointerInfo::getGOT(), false, false, false,
+                             0);
+  unsigned LoFlag = HasMips64 ? MipsII::MO_GOT_OFST : MipsII::MO_ABS_LO;
+  SDValue Lo = DAG.getNode(MipsISD::Lo, DL, Ty, getTargetNode(Op, DAG, LoFlag));
+  return DAG.getNode(ISD::ADD, DL, Ty, Load, Lo);
+}
+
+static SDValue getAddrGlobal(SDValue Op, SelectionDAG &DAG, unsigned Flag) {
+  DebugLoc DL = Op.getDebugLoc();
+  EVT Ty = Op.getValueType();
+  SDValue Tgt = DAG.getNode(MipsISD::Wrapper, DL, Ty, GetGlobalReg(DAG, Ty),
+                            getTargetNode(Op, DAG, Flag));
+  return DAG.getLoad(Ty, DL, DAG.getEntryNode(), Tgt,
+                     MachinePointerInfo::getGOT(), false, false, false, 0);
+}
+
+static SDValue getAddrGlobalLargeGOT(SDValue Op, SelectionDAG &DAG,
+                                     unsigned HiFlag, unsigned LoFlag) {
+  DebugLoc DL = Op.getDebugLoc();
+  EVT Ty = Op.getValueType();
+  SDValue Hi = DAG.getNode(MipsISD::Hi, DL, Ty, getTargetNode(Op, DAG, HiFlag));
+  Hi = DAG.getNode(ISD::ADD, DL, Ty, Hi, GetGlobalReg(DAG, Ty));
+  SDValue Wrapper = DAG.getNode(MipsISD::Wrapper, DL, Ty, Hi,
+                                getTargetNode(Op, DAG, LoFlag));
+  return DAG.getLoad(Ty, DL, DAG.getEntryNode(), Wrapper,
+                     MachinePointerInfo::getGOT(), false, false, false, 0);
+}
+
 const char *MipsTargetLowering::getTargetNodeName(unsigned Opcode) const {
   switch (Opcode) {
   case MipsISD::JmpLink:           return "MipsISD::JmpLink";
@@ -1743,8 +1812,6 @@ SDValue MipsTargetLowering::LowerGlobalA
   const GlobalValue *GV = cast<GlobalAddressSDNode>(Op)->getGlobal();
 
   if (getTargetMachine().getRelocationModel() != Reloc::PIC_ && !IsN64) {
-    SDVTList VTs = DAG.getVTList(MVT::i32);
-
     const MipsTargetObjectFile &TLOF =
       (const MipsTargetObjectFile&)getObjFileLowering();
 
@@ -1752,69 +1819,33 @@ SDValue MipsTargetLowering::LowerGlobalA
     if (TLOF.IsGlobalInSmallSection(GV, getTargetMachine())) {
       SDValue GA = DAG.getTargetGlobalAddress(GV, dl, MVT::i32, 0,
                                               MipsII::MO_GPREL);
-      SDValue GPRelNode = DAG.getNode(MipsISD::GPRel, dl, VTs, &GA, 1);
+      SDValue GPRelNode = DAG.getNode(MipsISD::GPRel, dl,
+                                      DAG.getVTList(MVT::i32), &GA, 1);
       SDValue GPReg = DAG.getRegister(Mips::GP, MVT::i32);
       return DAG.getNode(ISD::ADD, dl, MVT::i32, GPReg, GPRelNode);
     }
+
     // %hi/%lo relocation
-    SDValue GAHi = DAG.getTargetGlobalAddress(GV, dl, MVT::i32, 0,
-                                              MipsII::MO_ABS_HI);
-    SDValue GALo = DAG.getTargetGlobalAddress(GV, dl, MVT::i32, 0,
-                                              MipsII::MO_ABS_LO);
-    SDValue HiPart = DAG.getNode(MipsISD::Hi, dl, VTs, &GAHi, 1);
-    SDValue Lo = DAG.getNode(MipsISD::Lo, dl, MVT::i32, GALo);
-    return DAG.getNode(ISD::ADD, dl, MVT::i32, HiPart, Lo);
-  }
-
-  EVT ValTy = Op.getValueType();
-  bool HasGotOfst = (GV->hasInternalLinkage() ||
-                     (GV->hasLocalLinkage() && !isa<Function>(GV)));
-  unsigned GotFlag = HasMips64 ?
-                     (HasGotOfst ? MipsII::MO_GOT_PAGE : MipsII::MO_GOT_DISP) :
-                     (HasGotOfst ? MipsII::MO_GOT : MipsII::MO_GOT16);
-  SDValue GA = DAG.getTargetGlobalAddress(GV, dl, ValTy, 0, GotFlag);
-  GA = DAG.getNode(MipsISD::Wrapper, dl, ValTy, GetGlobalReg(DAG, ValTy), GA);
-  SDValue ResNode = DAG.getLoad(ValTy, dl, DAG.getEntryNode(), GA,
-                                MachinePointerInfo(), false, false, false, 0);
-  // On functions and global targets not internal linked only
-  // a load from got/GP is necessary for PIC to work.
-  if (!HasGotOfst)
-    return ResNode;
-  SDValue GALo = DAG.getTargetGlobalAddress(GV, dl, ValTy, 0,
-                                            HasMips64 ? MipsII::MO_GOT_OFST :
-                                                        MipsII::MO_ABS_LO);
-  SDValue Lo = DAG.getNode(MipsISD::Lo, dl, ValTy, GALo);
-  return DAG.getNode(ISD::ADD, dl, ValTy, ResNode, Lo);
+    return getAddrNonPIC(Op, DAG);
+  }
+
+  if (GV->hasInternalLinkage() || (GV->hasLocalLinkage() && !isa<Function>(GV)))
+    return getAddrLocal(Op, DAG, HasMips64);
+
+  if (LargeGOT)
+    return getAddrGlobalLargeGOT(Op, DAG, MipsII::MO_GOT_HI16,
+                                 MipsII::MO_GOT_LO16);
+
+  return getAddrGlobal(Op, DAG,
+                       HasMips64 ? MipsII::MO_GOT_DISP : MipsII::MO_GOT16);
 }
 
 SDValue MipsTargetLowering::LowerBlockAddress(SDValue Op,
                                               SelectionDAG &DAG) const {
-  const BlockAddress *BA = cast<BlockAddressSDNode>(Op)->getBlockAddress();
-  // FIXME there isn't actually debug info here
-  DebugLoc dl = Op.getDebugLoc();
+  if (getTargetMachine().getRelocationModel() != Reloc::PIC_ && !IsN64)
+    return getAddrNonPIC(Op, DAG);
 
-  if (getTargetMachine().getRelocationModel() != Reloc::PIC_ && !IsN64) {
-    // %hi/%lo relocation
-    SDValue BAHi =
-      DAG.getTargetBlockAddress(BA, MVT::i32, 0, MipsII::MO_ABS_HI);
-    SDValue BALo =
-      DAG.getTargetBlockAddress(BA, MVT::i32, 0, MipsII::MO_ABS_LO);
-    SDValue Hi = DAG.getNode(MipsISD::Hi, dl, MVT::i32, BAHi);
-    SDValue Lo = DAG.getNode(MipsISD::Lo, dl, MVT::i32, BALo);
-    return DAG.getNode(ISD::ADD, dl, MVT::i32, Hi, Lo);
-  }
-
-  EVT ValTy = Op.getValueType();
-  unsigned GOTFlag = HasMips64 ? MipsII::MO_GOT_PAGE : MipsII::MO_GOT;
-  unsigned OFSTFlag = HasMips64 ? MipsII::MO_GOT_OFST : MipsII::MO_ABS_LO;
-  SDValue BAGOTOffset = DAG.getTargetBlockAddress(BA, ValTy, 0, GOTFlag);
-  BAGOTOffset = DAG.getNode(MipsISD::Wrapper, dl, ValTy,
-                            GetGlobalReg(DAG, ValTy), BAGOTOffset);
-  SDValue BALOOffset = DAG.getTargetBlockAddress(BA, ValTy, 0, OFSTFlag);
-  SDValue Load = DAG.getLoad(ValTy, dl, DAG.getEntryNode(), BAGOTOffset,
-                             MachinePointerInfo(), false, false, false, 0);
-  SDValue Lo = DAG.getNode(MipsISD::Lo, dl, ValTy, BALOOffset);
-  return DAG.getNode(ISD::ADD, dl, ValTy, Load, Lo);
+  return getAddrLocal(Op, DAG, HasMips64);
 }
 
 SDValue MipsTargetLowering::
@@ -1901,41 +1932,15 @@ LowerGlobalTLSAddress(SDValue Op, Select
 SDValue MipsTargetLowering::
 LowerJumpTable(SDValue Op, SelectionDAG &DAG) const
 {
-  SDValue HiPart, JTI, JTILo;
-  // FIXME there isn't actually debug info here
-  DebugLoc dl = Op.getDebugLoc();
-  bool IsPIC = getTargetMachine().getRelocationModel() == Reloc::PIC_;
-  EVT PtrVT = Op.getValueType();
-  JumpTableSDNode *JT = cast<JumpTableSDNode>(Op);
-
-  if (!IsPIC && !IsN64) {
-    JTI = DAG.getTargetJumpTable(JT->getIndex(), PtrVT, MipsII::MO_ABS_HI);
-    HiPart = DAG.getNode(MipsISD::Hi, dl, PtrVT, JTI);
-    JTILo = DAG.getTargetJumpTable(JT->getIndex(), PtrVT, MipsII::MO_ABS_LO);
-  } else {// Emit Load from Global Pointer
-    unsigned GOTFlag = HasMips64 ? MipsII::MO_GOT_PAGE : MipsII::MO_GOT;
-    unsigned OfstFlag = HasMips64 ? MipsII::MO_GOT_OFST : MipsII::MO_ABS_LO;
-    JTI = DAG.getTargetJumpTable(JT->getIndex(), PtrVT, GOTFlag);
-    JTI = DAG.getNode(MipsISD::Wrapper, dl, PtrVT, GetGlobalReg(DAG, PtrVT),
-                      JTI);
-    HiPart = DAG.getLoad(PtrVT, dl, DAG.getEntryNode(), JTI,
-                         MachinePointerInfo(), false, false, false, 0);
-    JTILo = DAG.getTargetJumpTable(JT->getIndex(), PtrVT, OfstFlag);
-  }
+  if (getTargetMachine().getRelocationModel() != Reloc::PIC_ && !IsN64)
+    return getAddrNonPIC(Op, DAG);
 
-  SDValue Lo = DAG.getNode(MipsISD::Lo, dl, PtrVT, JTILo);
-  return DAG.getNode(ISD::ADD, dl, PtrVT, HiPart, Lo);
+  return getAddrLocal(Op, DAG, HasMips64);
 }
 
 SDValue MipsTargetLowering::
 LowerConstantPool(SDValue Op, SelectionDAG &DAG) const
 {
-  SDValue ResNode;
-  ConstantPoolSDNode *N = cast<ConstantPoolSDNode>(Op);
-  const Constant *C = N->getConstVal();
-  // FIXME there isn't actually debug info here
-  DebugLoc dl = Op.getDebugLoc();
-
   // gp_rel relocation
   // FIXME: we should reference the constant pool using small data sections,
   // but the asm printer currently doesn't support this feature without
@@ -1946,31 +1951,10 @@ LowerConstantPool(SDValue Op, SelectionD
   //  SDValue GOT = DAG.getGLOBAL_OFFSET_TABLE(MVT::i32);
   //  ResNode = DAG.getNode(ISD::ADD, MVT::i32, GOT, GPRelNode);
 
-  if (getTargetMachine().getRelocationModel() != Reloc::PIC_ && !IsN64) {
-    SDValue CPHi = DAG.getTargetConstantPool(C, MVT::i32, N->getAlignment(),
-                                             N->getOffset(), MipsII::MO_ABS_HI);
-    SDValue CPLo = DAG.getTargetConstantPool(C, MVT::i32, N->getAlignment(),
-                                             N->getOffset(), MipsII::MO_ABS_LO);
-    SDValue HiPart = DAG.getNode(MipsISD::Hi, dl, MVT::i32, CPHi);
-    SDValue Lo = DAG.getNode(MipsISD::Lo, dl, MVT::i32, CPLo);
-    ResNode = DAG.getNode(ISD::ADD, dl, MVT::i32, HiPart, Lo);
-  } else {
-    EVT ValTy = Op.getValueType();
-    unsigned GOTFlag = HasMips64 ? MipsII::MO_GOT_PAGE : MipsII::MO_GOT;
-    unsigned OFSTFlag = HasMips64 ? MipsII::MO_GOT_OFST : MipsII::MO_ABS_LO;
-    SDValue CP = DAG.getTargetConstantPool(C, ValTy, N->getAlignment(),
-                                           N->getOffset(), GOTFlag);
-    CP = DAG.getNode(MipsISD::Wrapper, dl, ValTy, GetGlobalReg(DAG, ValTy), CP);
-    SDValue Load = DAG.getLoad(ValTy, dl, DAG.getEntryNode(), CP,
-                               MachinePointerInfo::getConstantPool(), false,
-                               false, false, 0);
-    SDValue CPLo = DAG.getTargetConstantPool(C, ValTy, N->getAlignment(),
-                                             N->getOffset(), OFSTFlag);
-    SDValue Lo = DAG.getNode(MipsISD::Lo, dl, ValTy, CPLo);
-    ResNode = DAG.getNode(ISD::ADD, dl, ValTy, Load, Lo);
-  }
+  if (getTargetMachine().getRelocationModel() != Reloc::PIC_ && !IsN64)
+    return getAddrNonPIC(Op, DAG);
 
-  return ResNode;
+  return getAddrLocal(Op, DAG, HasMips64);
 }
 
 SDValue MipsTargetLowering::LowerVASTART(SDValue Op, SelectionDAG &DAG) const {
@@ -2862,60 +2846,41 @@ MipsTargetLowering::LowerCall(TargetLowe
   // If the callee is a GlobalAddress/ExternalSymbol node (quite common, every
   // direct call is) turn it into a TargetGlobalAddress/TargetExternalSymbol
   // node so that legalize doesn't hack it.
-  unsigned char OpFlag;
   bool IsPICCall = (IsN64 || IsPIC); // true if calls are translated to jalr $25
   bool GlobalOrExternal = false;
   SDValue CalleeLo;
 
   if (GlobalAddressSDNode *G = dyn_cast<GlobalAddressSDNode>(Callee)) {
-    if (IsPICCall && G->getGlobal()->hasInternalLinkage()) {
-      OpFlag = IsO32 ? MipsII::MO_GOT : MipsII::MO_GOT_PAGE;
-      unsigned char LoFlag = IsO32 ? MipsII::MO_ABS_LO : MipsII::MO_GOT_OFST;
+    if (IsPICCall) {
+      if (G->getGlobal()->hasInternalLinkage())
+        Callee = getAddrLocal(Callee, DAG, HasMips64);
+      else if (LargeGOT)
+        Callee = getAddrGlobalLargeGOT(Callee, DAG, MipsII::MO_CALL_HI16,
+                                       MipsII::MO_CALL_LO16);
+      else
+        Callee = getAddrGlobal(Callee, DAG, MipsII::MO_GOT_CALL);
+    } else
       Callee = DAG.getTargetGlobalAddress(G->getGlobal(), dl, getPointerTy(), 0,
-                                          OpFlag);
-      CalleeLo = DAG.getTargetGlobalAddress(G->getGlobal(), dl, getPointerTy(),
-                                            0, LoFlag);
-    } else {
-      OpFlag = IsPICCall ? MipsII::MO_GOT_CALL : MipsII::MO_NO_FLAG;
-      Callee = DAG.getTargetGlobalAddress(G->getGlobal(), dl,
-                                          getPointerTy(), 0, OpFlag);
-    }
-
+                                          MipsII::MO_NO_FLAG);
     GlobalOrExternal = true;
   }
   else if (ExternalSymbolSDNode *S = dyn_cast<ExternalSymbolSDNode>(Callee)) {
-    if (IsN64 || (!IsO32 && IsPIC))
-      OpFlag = MipsII::MO_GOT_DISP;
-    else if (!IsPIC) // !N64 && static
-      OpFlag = MipsII::MO_NO_FLAG;
+    if (!IsN64 && !IsPIC) // !N64 && static
+      Callee = DAG.getTargetExternalSymbol(S->getSymbol(), getPointerTy(),
+                                            MipsII::MO_NO_FLAG);
+    else if (LargeGOT)
+      Callee = getAddrGlobalLargeGOT(Callee, DAG, MipsII::MO_CALL_HI16,
+                                     MipsII::MO_CALL_LO16);
+    else if (HasMips64)
+      Callee = getAddrGlobal(Callee, DAG, MipsII::MO_GOT_DISP);
     else // O32 & PIC
-      OpFlag = MipsII::MO_GOT_CALL;
-    Callee = DAG.getTargetExternalSymbol(S->getSymbol(), getPointerTy(),
-                                         OpFlag);
+      Callee = getAddrGlobal(Callee, DAG, MipsII::MO_GOT_CALL);
+
     GlobalOrExternal = true;
   }
 
   SDValue InFlag;
 
-  // Create nodes that load address of callee and copy it to T9
-  if (IsPICCall) {
-    if (GlobalOrExternal) {
-      // Load callee address
-      Callee = DAG.getNode(MipsISD::Wrapper, dl, getPointerTy(),
-                           GetGlobalReg(DAG, getPointerTy()), Callee);
-      SDValue LoadValue = DAG.getLoad(getPointerTy(), dl, DAG.getEntryNode(),
-                                      Callee, MachinePointerInfo::getGOT(),
-                                      false, false, false, 0);
-
-      // Use GOT+LO if callee has internal linkage.
-      if (CalleeLo.getNode()) {
-        SDValue Lo = DAG.getNode(MipsISD::Lo, dl, getPointerTy(), CalleeLo);
-        Callee = DAG.getNode(ISD::ADD, dl, getPointerTy(), LoadValue, Lo);
-      } else
-        Callee = LoadValue;
-    }
-  }
-
   // T9 register operand.
   SDValue T9;
 

Modified: projects/mtree/contrib/llvm/lib/Target/Mips/MipsInstrInfo.td
==============================================================================
--- projects/mtree/contrib/llvm/lib/Target/Mips/MipsInstrInfo.td	Fri Dec 28 21:35:47 2012	(r244787)
+++ projects/mtree/contrib/llvm/lib/Target/Mips/MipsInstrInfo.td	Fri Dec 28 21:44:45 2012	(r244788)
@@ -1154,12 +1154,14 @@ def : MipsPat<(MipsHi tblockaddress:$in)
 def : MipsPat<(MipsHi tjumptable:$in), (LUi tjumptable:$in)>;
 def : MipsPat<(MipsHi tconstpool:$in), (LUi tconstpool:$in)>;
 def : MipsPat<(MipsHi tglobaltlsaddr:$in), (LUi tglobaltlsaddr:$in)>;
+def : MipsPat<(MipsHi texternalsym:$in), (LUi texternalsym:$in)>;
 
 def : MipsPat<(MipsLo tglobaladdr:$in), (ADDiu ZERO, tglobaladdr:$in)>;
 def : MipsPat<(MipsLo tblockaddress:$in), (ADDiu ZERO, tblockaddress:$in)>;
 def : MipsPat<(MipsLo tjumptable:$in), (ADDiu ZERO, tjumptable:$in)>;
 def : MipsPat<(MipsLo tconstpool:$in), (ADDiu ZERO, tconstpool:$in)>;
 def : MipsPat<(MipsLo tglobaltlsaddr:$in), (ADDiu ZERO, tglobaltlsaddr:$in)>;
+def : MipsPat<(MipsLo texternalsym:$in), (ADDiu ZERO, texternalsym:$in)>;
 
 def : MipsPat<(add CPURegs:$hi, (MipsLo tglobaladdr:$lo)),
               (ADDiu CPURegs:$hi, tglobaladdr:$lo)>;

Modified: projects/mtree/contrib/llvm/lib/Target/Mips/MipsJITInfo.cpp
==============================================================================
--- projects/mtree/contrib/llvm/lib/Target/Mips/MipsJITInfo.cpp	Fri Dec 28 21:35:47 2012	(r244787)
+++ projects/mtree/contrib/llvm/lib/Target/Mips/MipsJITInfo.cpp	Fri Dec 28 21:44:45 2012	(r244788)
@@ -222,10 +222,17 @@ void *MipsJITInfo::emitFunctionStub(cons
   // addiu t9, t9, %lo(EmittedAddr)
   // jalr t8, t9
   // nop
-  JCE.emitWordLE(0xf << 26 | 25 << 16 | Hi);
-  JCE.emitWordLE(9 << 26 | 25 << 21 | 25 << 16 | Lo);
-  JCE.emitWordLE(25 << 21 | 24 << 11 | 9);
-  JCE.emitWordLE(0);
+  if (IsLittleEndian) {
+    JCE.emitWordLE(0xf << 26 | 25 << 16 | Hi);
+    JCE.emitWordLE(9 << 26 | 25 << 21 | 25 << 16 | Lo);
+    JCE.emitWordLE(25 << 21 | 24 << 11 | 9);
+    JCE.emitWordLE(0);
+  } else {
+    JCE.emitWordBE(0xf << 26 | 25 << 16 | Hi);
+    JCE.emitWordBE(9 << 26 | 25 << 21 | 25 << 16 | Lo);
+    JCE.emitWordBE(25 << 21 | 24 << 11 | 9);
+    JCE.emitWordBE(0);
+  }
 
   sys::Memory::InvalidateInstructionCache(Addr, 16);
   if (!sys::Memory::setRangeExecutable(Addr, 16))

Modified: projects/mtree/contrib/llvm/lib/Target/Mips/MipsJITInfo.h
==============================================================================
--- projects/mtree/contrib/llvm/lib/Target/Mips/MipsJITInfo.h	Fri Dec 28 21:35:47 2012	(r244787)
+++ projects/mtree/contrib/llvm/lib/Target/Mips/MipsJITInfo.h	Fri Dec 28 21:44:45 2012	(r244788)
@@ -26,10 +26,11 @@ class MipsTargetMachine;
 class MipsJITInfo : public TargetJITInfo {
 
   bool IsPIC;
+  bool IsLittleEndian;
 
   public:
     explicit MipsJITInfo() :
-      IsPIC(false) {}
+      IsPIC(false), IsLittleEndian(true) {}
 
     /// replaceMachineCodeForFunction - Make it so that calling the function
     /// whose machine code is at OLD turns into a call to NEW, perhaps by
@@ -58,8 +59,10 @@ class MipsJITInfo : public TargetJITInfo
                           unsigned NumRelocs, unsigned char *GOTBase);
 
     /// Initialize - Initialize internal stage for the function being JITted.
-    void Initialize(const MachineFunction &MF, bool isPIC) {
+    void Initialize(const MachineFunction &MF, bool isPIC,
+                    bool isLittleEndian) {
       IsPIC = isPIC;
+      IsLittleEndian = isLittleEndian;
     }
 
 };

Modified: projects/mtree/contrib/llvm/lib/Target/Mips/MipsMCInstLower.cpp
==============================================================================
--- projects/mtree/contrib/llvm/lib/Target/Mips/MipsMCInstLower.cpp	Fri Dec 28 21:35:47 2012	(r244787)
+++ projects/mtree/contrib/llvm/lib/Target/Mips/MipsMCInstLower.cpp	Fri Dec 28 21:44:45 2012	(r244788)
@@ -62,6 +62,10 @@ MCOperand MipsMCInstLower::LowerSymbolOp
   case MipsII::MO_GOT_OFST:  Kind = MCSymbolRefExpr::VK_Mips_GOT_OFST; break;
   case MipsII::MO_HIGHER:    Kind = MCSymbolRefExpr::VK_Mips_HIGHER; break;
   case MipsII::MO_HIGHEST:   Kind = MCSymbolRefExpr::VK_Mips_HIGHEST; break;
+  case MipsII::MO_GOT_HI16:  Kind = MCSymbolRefExpr::VK_Mips_GOT_HI16; break;
+  case MipsII::MO_GOT_LO16:  Kind = MCSymbolRefExpr::VK_Mips_GOT_LO16; break;
+  case MipsII::MO_CALL_HI16: Kind = MCSymbolRefExpr::VK_Mips_CALL_HI16; break;
+  case MipsII::MO_CALL_LO16: Kind = MCSymbolRefExpr::VK_Mips_CALL_LO16; break;
   }
 
   switch (MOTy) {

Modified: projects/mtree/contrib/llvm/lib/Transforms/Scalar/SROA.cpp
==============================================================================
--- projects/mtree/contrib/llvm/lib/Transforms/Scalar/SROA.cpp	Fri Dec 28 21:35:47 2012	(r244787)
+++ projects/mtree/contrib/llvm/lib/Transforms/Scalar/SROA.cpp	Fri Dec 28 21:44:45 2012	(r244788)
@@ -2160,6 +2160,9 @@ static bool isIntegerWideningViable(cons
                                     AllocaPartitioning::const_use_iterator I,
                                     AllocaPartitioning::const_use_iterator E) {
   uint64_t SizeInBits = TD.getTypeSizeInBits(AllocaTy);
+  // Don't create integer types larger than the maximum bitwidth.
+  if (SizeInBits > IntegerType::MAX_INT_BITS)
+    return false;
 
   // Don't try to handle allocas with bit-padding.
   if (SizeInBits != TD.getTypeStoreSizeInBits(AllocaTy))
@@ -2198,7 +2201,7 @@ static bool isIntegerWideningViable(cons
       if (RelBegin == 0 && RelEnd == Size)
         WholeAllocaOp = true;
       if (IntegerType *ITy = dyn_cast<IntegerType>(LI->getType())) {
-        if (ITy->getBitWidth() < TD.getTypeStoreSize(ITy))
+        if (ITy->getBitWidth() < TD.getTypeStoreSizeInBits(ITy))
           return false;
         continue;
       }
@@ -2214,7 +2217,7 @@ static bool isIntegerWideningViable(cons
       if (RelBegin == 0 && RelEnd == Size)
         WholeAllocaOp = true;
       if (IntegerType *ITy = dyn_cast<IntegerType>(ValueTy)) {
-        if (ITy->getBitWidth() < TD.getTypeStoreSize(ITy))
+        if (ITy->getBitWidth() < TD.getTypeStoreSizeInBits(ITy))
           return false;
         continue;
       }
@@ -2224,7 +2227,7 @@ static bool isIntegerWideningViable(cons
           !canConvertValue(TD, ValueTy, AllocaTy))
         return false;
     } else if (MemIntrinsic *MI = dyn_cast<MemIntrinsic>(I->U->getUser())) {
-      if (MI->isVolatile())
+      if (MI->isVolatile() || !isa<Constant>(MI->getLength()))
         return false;
       if (MemTransferInst *MTI = dyn_cast<MemTransferInst>(I->U->getUser())) {
         const AllocaPartitioning::MemTransferOffsets &MTO

Modified: projects/mtree/contrib/llvm/tools/clang/include/clang/Sema/Scope.h
==============================================================================
--- projects/mtree/contrib/llvm/tools/clang/include/clang/Sema/Scope.h	Fri Dec 28 21:35:47 2012	(r244787)
+++ projects/mtree/contrib/llvm/tools/clang/include/clang/Sema/Scope.h	Fri Dec 28 21:44:45 2012	(r244788)
@@ -84,11 +84,18 @@ public:
     /// TryScope - This is the scope of a C++ try statement.
     TryScope = 0x1000,
 
+    /// CatchScope - This is the scope of a C++ catch statement.
+    CatchScope = 0x2000,
+
+    /// FnTryCatchScope - This is the scope for a function-level C++ try or
+    /// catch scope.
+    FnTryCatchScope = 0x4000,
+
     /// FnTryScope - This is the scope of a function-level C++ try scope.
-    FnTryScope = 0x3000,
+    FnTryScope = TryScope | FnTryCatchScope,
 
     /// FnCatchScope - This is the scope of a function-level C++ catch scope.
-    FnCatchScope = 0x4000
+    FnCatchScope = CatchScope | FnTryCatchScope
   };
 private:
   /// The parent scope for this scope.  This is null for the translation-unit

Modified: projects/mtree/contrib/llvm/tools/clang/lib/Basic/Targets.cpp
==============================================================================
--- projects/mtree/contrib/llvm/tools/clang/lib/Basic/Targets.cpp	Fri Dec 28 21:35:47 2012	(r244787)
+++ projects/mtree/contrib/llvm/tools/clang/lib/Basic/Targets.cpp	Fri Dec 28 21:44:45 2012	(r244788)
@@ -3078,7 +3078,9 @@ public:
     // name.
     if (Name == "apcs-gnu") {
       DoubleAlign = LongLongAlign = LongDoubleAlign = SuitableAlign = 32;
-      SizeType = UnsignedLong;
+      // size_t is unsigned int on FreeBSD.
+      if (getTriple().getOS() != llvm::Triple::FreeBSD)
+        SizeType = UnsignedLong;
 
       // Revert to using SignedInt on apcs-gnu to comply with existing behaviour.
       WCharType = SignedInt;

Modified: projects/mtree/contrib/llvm/tools/clang/lib/Basic/Version.cpp
==============================================================================
--- projects/mtree/contrib/llvm/tools/clang/lib/Basic/Version.cpp	Fri Dec 28 21:35:47 2012	(r244787)
+++ projects/mtree/contrib/llvm/tools/clang/lib/Basic/Version.cpp	Fri Dec 28 21:44:45 2012	(r244788)
@@ -32,7 +32,7 @@ std::string getClangRepositoryPath() {
 

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***



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