Date: Tue, 25 Dec 2012 13:00:20 +0000 (UTC) From: Alexander Motin <mav@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r244677 - in projects/calloutng: . bin/date contrib/binutils/bfd contrib/gdb/gdb contrib/libc-vis contrib/libstdc++/include/std contrib/llvm/include/llvm/MC contrib/llvm/lib/ExecutionEn... Message-ID: <201212251300.qBPD0K7N058879@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: mav Date: Tue Dec 25 13:00:19 2012 New Revision: 244677 URL: http://svnweb.freebsd.org/changeset/base/244677 Log: MFC @ r244676 Added: projects/calloutng/contrib/libc-vis/ - copied from r244676, head/contrib/libc-vis/ projects/calloutng/contrib/mknod/ - copied from r244676, head/contrib/mknod/ projects/calloutng/contrib/mtree/ - copied from r244676, head/contrib/mtree/ projects/calloutng/lib/libc/gen/unvis-compat.c - copied unchanged from r244676, head/lib/libc/gen/unvis-compat.c projects/calloutng/lib/libnetbsd/ - copied from r244676, head/lib/libnetbsd/ projects/calloutng/lib/libstand/amd64/ - copied from r244676, head/lib/libstand/amd64/ projects/calloutng/sys/arm/arm/cpufunc_asm_arm11x6.S - copied unchanged from r244676, head/sys/arm/arm/cpufunc_asm_arm11x6.S projects/calloutng/sys/boot/ficl64/ - copied from r244676, head/sys/boot/ficl64/ projects/calloutng/sys/kern/subr_busdma_bufalloc.c - copied unchanged from r244676, head/sys/kern/subr_busdma_bufalloc.c projects/calloutng/sys/sys/busdma_bufalloc.h - copied unchanged from r244676, head/sys/sys/busdma_bufalloc.h projects/calloutng/tools/regression/usr.bin/printf/regress.zero.out - copied unchanged from r244676, head/tools/regression/usr.bin/printf/regress.zero.out projects/calloutng/usr.sbin/nmtree/ - copied from r244676, head/usr.sbin/nmtree/ Deleted: projects/calloutng/include/vis.h projects/calloutng/lib/libc/gen/unvis.3 projects/calloutng/lib/libc/gen/unvis.c projects/calloutng/lib/libc/gen/vis.3 projects/calloutng/lib/libc/gen/vis.c projects/calloutng/sys/boot/userboot/libstand/amd64/ Modified: projects/calloutng/UPDATING projects/calloutng/bin/date/netdate.c projects/calloutng/contrib/binutils/bfd/elflink.c projects/calloutng/contrib/gdb/gdb/dwarf2read.c projects/calloutng/contrib/gdb/gdb/gdbtypes.c projects/calloutng/contrib/gdb/gdb/gdbtypes.h projects/calloutng/contrib/gdb/gdb/hpread.c projects/calloutng/contrib/gdb/gdb/parse.c projects/calloutng/contrib/gdb/gdb/stabsread.c projects/calloutng/contrib/libstdc++/include/std/std_limits.h projects/calloutng/contrib/llvm/include/llvm/MC/MCExpr.h projects/calloutng/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp projects/calloutng/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp projects/calloutng/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h projects/calloutng/contrib/llvm/lib/MC/MCExpr.cpp projects/calloutng/contrib/llvm/lib/Target/Mips/InstPrinter/MipsInstPrinter.cpp projects/calloutng/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp projects/calloutng/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsBaseInfo.h projects/calloutng/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp projects/calloutng/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsFixupKinds.h projects/calloutng/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp projects/calloutng/contrib/llvm/lib/Target/Mips/Mips64InstrInfo.td projects/calloutng/contrib/llvm/lib/Target/Mips/MipsCodeEmitter.cpp projects/calloutng/contrib/llvm/lib/Target/Mips/MipsISelLowering.cpp projects/calloutng/contrib/llvm/lib/Target/Mips/MipsInstrInfo.td projects/calloutng/contrib/llvm/lib/Target/Mips/MipsJITInfo.cpp projects/calloutng/contrib/llvm/lib/Target/Mips/MipsJITInfo.h projects/calloutng/contrib/llvm/lib/Target/Mips/MipsMCInstLower.cpp projects/calloutng/contrib/llvm/lib/Transforms/Scalar/SROA.cpp projects/calloutng/contrib/llvm/tools/clang/include/clang/Sema/Scope.h projects/calloutng/contrib/llvm/tools/clang/lib/Basic/Targets.cpp projects/calloutng/contrib/llvm/tools/clang/lib/Basic/Version.cpp projects/calloutng/contrib/llvm/tools/clang/lib/Driver/ToolChains.cpp projects/calloutng/contrib/llvm/tools/clang/lib/Driver/ToolChains.h projects/calloutng/contrib/llvm/tools/clang/lib/Driver/Tools.cpp projects/calloutng/contrib/llvm/tools/clang/lib/Parse/ParseDeclCXX.cpp projects/calloutng/contrib/llvm/tools/clang/lib/Parse/ParseStmt.cpp projects/calloutng/contrib/llvm/tools/clang/lib/Sema/IdentifierResolver.cpp projects/calloutng/contrib/xz/AUTHORS projects/calloutng/contrib/xz/ChangeLog projects/calloutng/contrib/xz/README projects/calloutng/contrib/xz/THANKS projects/calloutng/contrib/xz/po/de.po projects/calloutng/contrib/xz/po/fr.po projects/calloutng/contrib/xz/po/it.po projects/calloutng/contrib/xz/po/pl.po projects/calloutng/contrib/xz/src/common/sysdefs.h projects/calloutng/contrib/xz/src/liblzma/api/lzma/version.h projects/calloutng/contrib/xz/src/liblzma/simple/simple_coder.c projects/calloutng/contrib/xz/src/liblzma/simple/simple_private.h projects/calloutng/contrib/xz/src/xz/args.c projects/calloutng/contrib/xz/src/xz/coder.c projects/calloutng/contrib/xz/src/xz/message.c projects/calloutng/contrib/xz/src/xz/xz.1 projects/calloutng/etc/defaults/rc.conf projects/calloutng/etc/login.conf projects/calloutng/etc/newsyslog.conf projects/calloutng/etc/periodic/daily/Makefile projects/calloutng/gnu/lib/libgcc/Makefile projects/calloutng/gnu/usr.bin/binutils/as/Makefile projects/calloutng/include/Makefile projects/calloutng/lib/Makefile projects/calloutng/lib/clang/include/clang/Basic/Version.inc projects/calloutng/lib/libc/gen/Makefile.inc projects/calloutng/lib/libc/gen/Symbol.map projects/calloutng/lib/libc/gen/check_utility_compat.c projects/calloutng/lib/libc/iconv/citrus_mmap.c projects/calloutng/lib/libc/nls/msgcat.c projects/calloutng/lib/libcompiler_rt/Makefile projects/calloutng/lib/libnetgraph/sock.c projects/calloutng/release/picobsd/build/picobsd projects/calloutng/sbin/hastd/parse.y projects/calloutng/sbin/ifconfig/af_nd6.c projects/calloutng/sbin/ifconfig/ifconfig.c projects/calloutng/sbin/route/route.c projects/calloutng/sbin/savecore/savecore.8 projects/calloutng/sbin/savecore/savecore.c projects/calloutng/sbin/setkey/setkey.8 projects/calloutng/share/i18n/csmapper/Makefile.part projects/calloutng/share/man/man4/arcmsr.4 projects/calloutng/share/man/man9/lock.9 projects/calloutng/share/man/man9/make_dev.9 projects/calloutng/share/misc/committers-src.dot projects/calloutng/share/mk/bsd.lib.mk projects/calloutng/share/mk/bsd.own.mk projects/calloutng/share/mk/sys.mk projects/calloutng/sys/arm/arm/busdma_machdep-v6.c projects/calloutng/sys/arm/arm/busdma_machdep.c projects/calloutng/sys/arm/arm/cpufunc.c projects/calloutng/sys/arm/arm/elf_trampoline.c projects/calloutng/sys/arm/arm/identcpu.c projects/calloutng/sys/arm/arm/locore.S projects/calloutng/sys/arm/arm/pmap-v6.c projects/calloutng/sys/arm/arm/pmap.c projects/calloutng/sys/arm/broadcom/bcm2835/bcm2835_gpio.c projects/calloutng/sys/arm/broadcom/bcm2835/files.bcm2835 projects/calloutng/sys/arm/conf/PANDABOARD projects/calloutng/sys/arm/conf/RPI-B projects/calloutng/sys/arm/conf/VERSATILEPB projects/calloutng/sys/arm/include/armreg.h projects/calloutng/sys/arm/include/cpuconf.h projects/calloutng/sys/arm/include/cpufunc.h projects/calloutng/sys/arm/include/intr.h projects/calloutng/sys/arm/include/pmap.h projects/calloutng/sys/arm/include/vm.h projects/calloutng/sys/arm/versatile/files.versatile projects/calloutng/sys/boot/ficl/Makefile projects/calloutng/sys/boot/i386/efi/ldscript.amd64 projects/calloutng/sys/boot/userboot/libstand/Makefile projects/calloutng/sys/cam/scsi/scsi_enc_ses.c projects/calloutng/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c projects/calloutng/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c projects/calloutng/sys/cddl/dev/dtrace/dtrace_debug.c projects/calloutng/sys/conf/files projects/calloutng/sys/conf/files.arm projects/calloutng/sys/conf/options.arm projects/calloutng/sys/dev/ale/if_ale.c projects/calloutng/sys/dev/arcmsr/arcmsr.c projects/calloutng/sys/dev/arcmsr/arcmsr.h projects/calloutng/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c projects/calloutng/sys/dev/atkbdc/psm.c projects/calloutng/sys/dev/cxgbe/t4_l2t.c projects/calloutng/sys/dev/cxgbe/t4_main.c projects/calloutng/sys/dev/ixgbe/ixgbe.c projects/calloutng/sys/dev/ixgbe/ixgbe.h projects/calloutng/sys/dev/mii/brgphy.c projects/calloutng/sys/dev/mii/miidevs projects/calloutng/sys/dev/netmap/ixgbe_netmap.h projects/calloutng/sys/dev/nvme/nvme.c projects/calloutng/sys/dev/nvme/nvme_ctrlr.c projects/calloutng/sys/dev/nvme/nvme_private.h projects/calloutng/sys/dev/nvme/nvme_test.c projects/calloutng/sys/dev/sound/usb/uaudio.c projects/calloutng/sys/dev/usb/serial/usb_serial.c projects/calloutng/sys/dev/usb/serial/usb_serial.h projects/calloutng/sys/dev/usb/storage/umass.c projects/calloutng/sys/dev/usb/storage/ustorage_fs.c projects/calloutng/sys/dev/usb/usb_busdma.c projects/calloutng/sys/dev/usb/usb_msctest.c projects/calloutng/sys/dev/usb/usb_transfer.c projects/calloutng/sys/dev/usb/usbdi.h projects/calloutng/sys/dev/usb/wlan/if_uath.c projects/calloutng/sys/dev/usb/wlan/if_uathvar.h projects/calloutng/sys/dev/usb/wlan/if_upgt.c projects/calloutng/sys/dev/usb/wlan/if_upgtvar.h projects/calloutng/sys/dev/usb/wlan/if_urtw.c projects/calloutng/sys/dev/usb/wlan/if_urtwvar.h projects/calloutng/sys/dev/wtap/if_wtap.c projects/calloutng/sys/fs/devfs/devfs_vnops.c projects/calloutng/sys/fs/ext2fs/ext2_dinode.h projects/calloutng/sys/fs/ext2fs/ext2_inode_cnv.c projects/calloutng/sys/fs/ext2fs/ext2_vfsops.c projects/calloutng/sys/fs/ext2fs/ext2fs.h projects/calloutng/sys/geom/label/g_label.c projects/calloutng/sys/kern/kern_conf.c projects/calloutng/sys/kern/kern_descrip.c projects/calloutng/sys/kern/kern_jail.c projects/calloutng/sys/kern/kern_lock.c projects/calloutng/sys/kern/kern_mutex.c projects/calloutng/sys/kern/kern_priv.c projects/calloutng/sys/kern/kern_rmlock.c projects/calloutng/sys/kern/kern_rwlock.c projects/calloutng/sys/kern/kern_sig.c projects/calloutng/sys/kern/kern_sx.c projects/calloutng/sys/kern/subr_smp.c projects/calloutng/sys/kern/subr_syscall.c projects/calloutng/sys/kern/sys_generic.c projects/calloutng/sys/kern/vfs_bio.c projects/calloutng/sys/kern/vfs_mount.c projects/calloutng/sys/kern/vfs_subr.c projects/calloutng/sys/kgssapi/gss_accept_sec_context.c projects/calloutng/sys/kgssapi/gss_acquire_cred.c projects/calloutng/sys/kgssapi/gss_canonicalize_name.c projects/calloutng/sys/kgssapi/gss_delete_sec_context.c projects/calloutng/sys/kgssapi/gss_display_status.c projects/calloutng/sys/kgssapi/gss_export_name.c projects/calloutng/sys/kgssapi/gss_impl.c projects/calloutng/sys/kgssapi/gss_import_name.c projects/calloutng/sys/kgssapi/gss_init_sec_context.c projects/calloutng/sys/kgssapi/gss_pname_to_uid.c projects/calloutng/sys/kgssapi/gss_release_cred.c projects/calloutng/sys/kgssapi/gss_release_name.c projects/calloutng/sys/kgssapi/gss_set_cred_option.c projects/calloutng/sys/kgssapi/gssapi_impl.h projects/calloutng/sys/mips/include/param.h projects/calloutng/sys/net/if_bridge.c projects/calloutng/sys/net80211/ieee80211_hostap.c projects/calloutng/sys/net80211/ieee80211_proto.c projects/calloutng/sys/netinet/in.c projects/calloutng/sys/netinet/tcp_input.c projects/calloutng/sys/netinet6/ip6_output.c projects/calloutng/sys/netinet6/ip6_var.h projects/calloutng/sys/netpfil/ipfw/ip_fw2.c projects/calloutng/sys/netpfil/ipfw/ip_fw_dynamic.c projects/calloutng/sys/netpfil/ipfw/ip_fw_log.c projects/calloutng/sys/netpfil/ipfw/ip_fw_private.h projects/calloutng/sys/netpfil/pf/pf.c projects/calloutng/sys/netpfil/pf/pf_norm.c projects/calloutng/sys/sys/file.h projects/calloutng/sys/sys/ktr.h projects/calloutng/sys/tools/vnode_if.awk projects/calloutng/sys/ufs/ffs/ffs_softdep.c projects/calloutng/sys/vm/uma_int.h projects/calloutng/sys/vm/vm.h projects/calloutng/sys/vm/vm_map.c projects/calloutng/sys/vm/vm_mmap.c projects/calloutng/sys/vm/vm_unix.c projects/calloutng/tools/build/mk/OptionalObsoleteFiles.inc projects/calloutng/tools/regression/usr.bin/printf/regress.sh projects/calloutng/tools/tools/netrate/netreceive/Makefile projects/calloutng/tools/tools/netrate/netreceive/netreceive.c projects/calloutng/usr.bin/clang/clang/clang.1 projects/calloutng/usr.bin/grep/grep.c projects/calloutng/usr.bin/grep/grep.h projects/calloutng/usr.bin/grep/util.c projects/calloutng/usr.bin/indent/indent_globs.h projects/calloutng/usr.bin/printf/printf.c projects/calloutng/usr.bin/sort/sort.c projects/calloutng/usr.bin/sort/sort.h projects/calloutng/usr.sbin/Makefile projects/calloutng/usr.sbin/acpi/acpidump/acpi.c projects/calloutng/usr.sbin/acpi/acpidump/acpidump.8 projects/calloutng/usr.sbin/bsdconfig/bsdconfig projects/calloutng/usr.sbin/bsdconfig/console/console projects/calloutng/usr.sbin/bsdconfig/console/font projects/calloutng/usr.sbin/bsdconfig/console/keymap projects/calloutng/usr.sbin/bsdconfig/console/repeat projects/calloutng/usr.sbin/bsdconfig/console/saver projects/calloutng/usr.sbin/bsdconfig/console/screenmap projects/calloutng/usr.sbin/bsdconfig/console/ttys projects/calloutng/usr.sbin/bsdconfig/diskmgmt/diskmgmt projects/calloutng/usr.sbin/bsdconfig/docsinstall/docsinstall projects/calloutng/usr.sbin/bsdconfig/dot/dot projects/calloutng/usr.sbin/bsdconfig/examples/bsdconfigrc projects/calloutng/usr.sbin/bsdconfig/mouse/disable projects/calloutng/usr.sbin/bsdconfig/mouse/enable projects/calloutng/usr.sbin/bsdconfig/mouse/flags projects/calloutng/usr.sbin/bsdconfig/mouse/mouse projects/calloutng/usr.sbin/bsdconfig/mouse/port projects/calloutng/usr.sbin/bsdconfig/mouse/type projects/calloutng/usr.sbin/bsdconfig/networking/defaultrouter projects/calloutng/usr.sbin/bsdconfig/networking/devices projects/calloutng/usr.sbin/bsdconfig/networking/hostname projects/calloutng/usr.sbin/bsdconfig/networking/nameservers projects/calloutng/usr.sbin/bsdconfig/networking/networking projects/calloutng/usr.sbin/bsdconfig/networking/share/common.subr projects/calloutng/usr.sbin/bsdconfig/networking/share/device.subr projects/calloutng/usr.sbin/bsdconfig/networking/share/hostname.subr projects/calloutng/usr.sbin/bsdconfig/networking/share/ipaddr.subr projects/calloutng/usr.sbin/bsdconfig/networking/share/media.subr projects/calloutng/usr.sbin/bsdconfig/networking/share/netmask.subr projects/calloutng/usr.sbin/bsdconfig/networking/share/resolv.subr projects/calloutng/usr.sbin/bsdconfig/networking/share/routing.subr projects/calloutng/usr.sbin/bsdconfig/password/password projects/calloutng/usr.sbin/bsdconfig/password/share/password.subr projects/calloutng/usr.sbin/bsdconfig/security/kern_securelevel projects/calloutng/usr.sbin/bsdconfig/security/security projects/calloutng/usr.sbin/bsdconfig/share/common.subr projects/calloutng/usr.sbin/bsdconfig/share/dialog.subr projects/calloutng/usr.sbin/bsdconfig/share/mustberoot.subr projects/calloutng/usr.sbin/bsdconfig/share/strings.subr projects/calloutng/usr.sbin/bsdconfig/share/sysrc.subr projects/calloutng/usr.sbin/bsdconfig/startup/misc projects/calloutng/usr.sbin/bsdconfig/startup/rcadd projects/calloutng/usr.sbin/bsdconfig/startup/rcconf projects/calloutng/usr.sbin/bsdconfig/startup/rcdelete projects/calloutng/usr.sbin/bsdconfig/startup/rcedit projects/calloutng/usr.sbin/bsdconfig/startup/rcvar projects/calloutng/usr.sbin/bsdconfig/startup/share/rcconf.subr projects/calloutng/usr.sbin/bsdconfig/startup/share/rcedit.subr projects/calloutng/usr.sbin/bsdconfig/startup/share/rcvar.subr projects/calloutng/usr.sbin/bsdconfig/startup/startup projects/calloutng/usr.sbin/bsdconfig/timezone/share/continents.subr projects/calloutng/usr.sbin/bsdconfig/timezone/share/countries.subr projects/calloutng/usr.sbin/bsdconfig/timezone/share/iso3166.subr projects/calloutng/usr.sbin/bsdconfig/timezone/share/menus.subr projects/calloutng/usr.sbin/bsdconfig/timezone/share/zones.subr projects/calloutng/usr.sbin/bsdconfig/timezone/timezone projects/calloutng/usr.sbin/bsdconfig/ttys/ttys projects/calloutng/usr.sbin/bsdconfig/usermgmt/groupadd projects/calloutng/usr.sbin/bsdconfig/usermgmt/groupdel projects/calloutng/usr.sbin/bsdconfig/usermgmt/groupedit projects/calloutng/usr.sbin/bsdconfig/usermgmt/groupinput projects/calloutng/usr.sbin/bsdconfig/usermgmt/share/group_input.subr projects/calloutng/usr.sbin/bsdconfig/usermgmt/share/user_input.subr projects/calloutng/usr.sbin/bsdconfig/usermgmt/useradd projects/calloutng/usr.sbin/bsdconfig/usermgmt/userdel projects/calloutng/usr.sbin/bsdconfig/usermgmt/useredit projects/calloutng/usr.sbin/bsdconfig/usermgmt/userinput projects/calloutng/usr.sbin/bsdconfig/usermgmt/usermgmt projects/calloutng/usr.sbin/gssd/Makefile projects/calloutng/usr.sbin/gssd/gssd.8 projects/calloutng/usr.sbin/gssd/gssd.c projects/calloutng/usr.sbin/mountd/mountd.c projects/calloutng/usr.sbin/mptable/mptable.c projects/calloutng/usr.sbin/mtest/mtest.c projects/calloutng/usr.sbin/ndp/ndp.8 projects/calloutng/usr.sbin/nfsd/nfsd.c projects/calloutng/usr.sbin/pkg/pkg.c projects/calloutng/usr.sbin/rpcbind/rpcbind.c projects/calloutng/usr.sbin/syslogd/syslogd.c projects/calloutng/usr.sbin/ypserv/yp_main.c Directory Properties: projects/calloutng/ (props changed) projects/calloutng/contrib/binutils/ (props changed) projects/calloutng/contrib/gdb/ (props changed) projects/calloutng/contrib/libstdc++/ (props changed) projects/calloutng/contrib/llvm/ (props changed) projects/calloutng/contrib/llvm/tools/clang/ (props changed) projects/calloutng/contrib/xz/ (props changed) projects/calloutng/gnu/lib/ (props changed) projects/calloutng/gnu/usr.bin/binutils/ (props changed) projects/calloutng/lib/libc/ (props changed) projects/calloutng/sbin/ (props changed) projects/calloutng/share/man/man4/ (props changed) projects/calloutng/sys/ (props changed) projects/calloutng/sys/boot/ (props changed) projects/calloutng/sys/boot/i386/efi/ (props changed) projects/calloutng/sys/cddl/contrib/opensolaris/ (props changed) projects/calloutng/sys/conf/ (props changed) Modified: projects/calloutng/UPDATING ============================================================================== --- projects/calloutng/UPDATING Tue Dec 25 11:11:26 2012 (r244676) +++ projects/calloutng/UPDATING Tue Dec 25 13:00:19 2012 (r244677) @@ -26,6 +26,24 @@ 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 + stored in the dump directory) add the following line to /etc/rc.conf: + + savecore_flags="" + 20121201: With the addition of auditdistd(8), a new auditdistd user is now depended on during installworld. "mergemaster -p" can be used to add Modified: projects/calloutng/bin/date/netdate.c ============================================================================== --- projects/calloutng/bin/date/netdate.c Tue Dec 25 11:11:26 2012 (r244676) +++ projects/calloutng/bin/date/netdate.c Tue Dec 25 13:00:19 2012 (r244677) @@ -85,7 +85,7 @@ netsettime(time_t tval) dest.sin_addr.s_addr = htonl((u_long)INADDR_ANY); s = socket(AF_INET, SOCK_DGRAM, 0); if (s < 0) { - if (errno != EPROTONOSUPPORT) + if (errno != EAFNOSUPPORT) warn("timed"); return (retval = 2); } Modified: projects/calloutng/contrib/binutils/bfd/elflink.c ============================================================================== --- projects/calloutng/contrib/binutils/bfd/elflink.c Tue Dec 25 11:11:26 2012 (r244676) +++ projects/calloutng/contrib/binutils/bfd/elflink.c Tue Dec 25 13:00:19 2012 (r244677) @@ -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/calloutng/contrib/gdb/gdb/dwarf2read.c ============================================================================== --- projects/calloutng/contrib/gdb/gdb/dwarf2read.c Tue Dec 25 11:11:26 2012 (r244676) +++ projects/calloutng/contrib/gdb/gdb/dwarf2read.c Tue Dec 25 13:00:19 2012 (r244677) @@ -834,6 +834,8 @@ static void read_tag_const_type (struct static void read_tag_volatile_type (struct die_info *, struct dwarf2_cu *); +static void read_tag_restrict_type (struct die_info *, struct dwarf2_cu *); + static void read_tag_string_type (struct die_info *, struct dwarf2_cu *); static void read_subroutine_type (struct die_info *, struct dwarf2_cu *); @@ -3729,7 +3731,8 @@ read_tag_const_type (struct die_info *di } base_type = die_type (die, cu); - die->type = make_cv_type (1, TYPE_VOLATILE (base_type), base_type, 0); + die->type = make_cvr_type (1, TYPE_VOLATILE (base_type), + TYPE_RESTRICT (base_type), base_type, 0); } static void @@ -3743,7 +3746,23 @@ read_tag_volatile_type (struct die_info } base_type = die_type (die, cu); - die->type = make_cv_type (TYPE_CONST (base_type), 1, base_type, 0); + die->type = make_cvr_type (TYPE_CONST (base_type), 1, + TYPE_RESTRICT (base_type), base_type, 0); +} + +static void +read_tag_restrict_type (struct die_info *die, struct dwarf2_cu *cu) +{ + struct type *base_type; + + if (die->type) + { + return; + } + + base_type = die_type (die, cu); + die->type = make_cvr_type (TYPE_CONST (base_type), TYPE_VOLATILE (base_type), + 1, base_type, 0); } /* Extract all information from a DW_TAG_string_type DIE and add to @@ -6086,6 +6105,9 @@ read_type_die (struct die_info *die, str case DW_TAG_volatile_type: read_tag_volatile_type (die, cu); break; + case DW_TAG_restrict_type: + read_tag_restrict_type (die, cu); + break; case DW_TAG_string_type: read_tag_string_type (die, cu); break; Modified: projects/calloutng/contrib/gdb/gdb/gdbtypes.c ============================================================================== --- projects/calloutng/contrib/gdb/gdb/gdbtypes.c Tue Dec 25 11:11:26 2012 (r244676) +++ projects/calloutng/contrib/gdb/gdb/gdbtypes.c Tue Dec 25 13:00:19 2012 (r244677) @@ -502,7 +502,8 @@ make_type_with_address_space (struct typ We allocate new memory if needed. */ struct type * -make_cv_type (int cnst, int voltl, struct type *type, struct type **typeptr) +make_cvr_type (int cnst, int voltl, int restrct, struct type *type, + struct type **typeptr) { struct type *ntype; /* New type */ struct type *tmp_type = type; /* tmp type */ @@ -517,6 +518,9 @@ make_cv_type (int cnst, int voltl, struc if (voltl) new_flags |= TYPE_FLAG_VOLATILE; + if (restrct) + new_flags |= TYPE_FLAG_RESTRICT; + if (typeptr && *typeptr != NULL) { /* Objfile is per-core-type. This const-qualified type had best @@ -1371,7 +1375,7 @@ struct type * check_typedef (struct type *type) { struct type *orig_type = type; - int is_const, is_volatile; + int is_const, is_volatile, is_restrict; while (TYPE_CODE (type) == TYPE_CODE_TYPEDEF) { @@ -1407,6 +1411,7 @@ check_typedef (struct type *type) is_const = TYPE_CONST (type); is_volatile = TYPE_VOLATILE (type); + is_restrict = TYPE_RESTRICT (type); /* If this is a struct/class/union with no fields, then check whether a full definition exists somewhere else. This is for systems where a @@ -1424,7 +1429,7 @@ check_typedef (struct type *type) } newtype = lookup_transparent_type (name); if (newtype) - make_cv_type (is_const, is_volatile, newtype, &type); + make_cvr_type (is_const, is_volatile, is_restrict, newtype, &type); } /* Otherwise, rely on the stub flag being set for opaque/stubbed types */ else if (TYPE_STUB (type) && !currently_reading_symtab) @@ -1442,7 +1447,8 @@ check_typedef (struct type *type) } sym = lookup_symbol (name, 0, STRUCT_DOMAIN, 0, (struct symtab **) NULL); if (sym) - make_cv_type (is_const, is_volatile, SYMBOL_TYPE (sym), &type); + make_cvr_type (is_const, is_volatile, is_restrict, SYMBOL_TYPE (sym), + &type); } if (TYPE_TARGET_STUB (type)) Modified: projects/calloutng/contrib/gdb/gdb/gdbtypes.h ============================================================================== --- projects/calloutng/contrib/gdb/gdb/gdbtypes.h Tue Dec 25 11:11:26 2012 (r244676) +++ projects/calloutng/contrib/gdb/gdb/gdbtypes.h Tue Dec 25 13:00:19 2012 (r244677) @@ -273,6 +273,13 @@ enum type_code #define TYPE_ADDRESS_CLASS_ALL(t) (TYPE_INSTANCE_FLAGS(t) \ & TYPE_FLAG_ADDRESS_CLASS_ALL) +/* Restrict type. If this is set, the corresponding type has a + * restrict modifier. + */ + +#define TYPE_FLAG_RESTRICT (1 << 17) +#define TYPE_RESTRICT(t) (TYPE_INSTANCE_FLAGS (t) & TYPE_FLAG_RESTRICT) + /* Array bound type. */ enum array_bound_type { @@ -1099,7 +1106,8 @@ extern struct type *lookup_reference_typ extern struct type *make_reference_type (struct type *, struct type **); -extern struct type *make_cv_type (int, int, struct type *, struct type **); +extern struct type *make_cvr_type (int, int, int, struct type *, + struct type **); extern void replace_type (struct type *, struct type *); Modified: projects/calloutng/contrib/gdb/gdb/hpread.c ============================================================================== --- projects/calloutng/contrib/gdb/gdb/hpread.c Tue Dec 25 11:11:26 2012 (r244676) +++ projects/calloutng/contrib/gdb/gdb/hpread.c Tue Dec 25 13:00:19 2012 (r244677) @@ -4939,8 +4939,9 @@ hpread_type_lookup (dnttpointer hp_type, * "m_void" modifiers? Is static_flag really needed here? * (m_static used for methods of classes, elsewhere). */ - tmp_type = make_cv_type (dn_bufp->dmodifier.m_const, + tmp_type = make_cvr_type (dn_bufp->dmodifier.m_const, dn_bufp->dmodifier.m_volatile, + 0, hpread_type_lookup (dn_bufp->dmodifier.type, objfile), 0); return tmp_type; Modified: projects/calloutng/contrib/gdb/gdb/parse.c ============================================================================== --- projects/calloutng/contrib/gdb/gdb/parse.c Tue Dec 25 11:11:26 2012 (r244676) +++ projects/calloutng/contrib/gdb/gdb/parse.c Tue Dec 25 13:00:19 2012 (r244677) @@ -1167,13 +1167,15 @@ follow_types (struct type *follow_type) case tp_end: done = 1; if (make_const) - follow_type = make_cv_type (make_const, - TYPE_VOLATILE (follow_type), - follow_type, 0); + follow_type = make_cvr_type (make_const, + TYPE_VOLATILE (follow_type), + TYPE_RESTRICT (follow_type), + follow_type, 0); if (make_volatile) - follow_type = make_cv_type (TYPE_CONST (follow_type), - make_volatile, - follow_type, 0); + follow_type = make_cvr_type (TYPE_CONST (follow_type), + make_volatile, + TYPE_RESTRICT (follow_type), + follow_type, 0); if (make_addr_space) follow_type = make_type_with_address_space (follow_type, make_addr_space); @@ -1192,13 +1194,15 @@ follow_types (struct type *follow_type) case tp_pointer: follow_type = lookup_pointer_type (follow_type); if (make_const) - follow_type = make_cv_type (make_const, - TYPE_VOLATILE (follow_type), - follow_type, 0); + follow_type = make_cvr_type (make_const, + TYPE_VOLATILE (follow_type), + TYPE_RESTRICT (follow_type), + follow_type, 0); if (make_volatile) - follow_type = make_cv_type (TYPE_CONST (follow_type), - make_volatile, - follow_type, 0); + follow_type = make_cvr_type (TYPE_CONST (follow_type), + make_volatile, + TYPE_RESTRICT (follow_type), + follow_type, 0); if (make_addr_space) follow_type = make_type_with_address_space (follow_type, make_addr_space); @@ -1208,13 +1212,15 @@ follow_types (struct type *follow_type) case tp_reference: follow_type = lookup_reference_type (follow_type); if (make_const) - follow_type = make_cv_type (make_const, - TYPE_VOLATILE (follow_type), - follow_type, 0); + follow_type = make_cvr_type (make_const, + TYPE_VOLATILE (follow_type), + TYPE_RESTRICT (follow_type), + follow_type, 0); if (make_volatile) - follow_type = make_cv_type (TYPE_CONST (follow_type), - make_volatile, - follow_type, 0); + follow_type = make_cvr_type (TYPE_CONST (follow_type), + make_volatile, + TYPE_RESTRICT (follow_type), + follow_type, 0); if (make_addr_space) follow_type = make_type_with_address_space (follow_type, make_addr_space); Modified: projects/calloutng/contrib/gdb/gdb/stabsread.c ============================================================================== --- projects/calloutng/contrib/gdb/gdb/stabsread.c Tue Dec 25 11:11:26 2012 (r244676) +++ projects/calloutng/contrib/gdb/gdb/stabsread.c Tue Dec 25 13:00:19 2012 (r244677) @@ -1750,13 +1750,13 @@ again: case 'k': /* Const qualifier on some type (Sun) */ type = read_type (pp, objfile); - type = make_cv_type (1, TYPE_VOLATILE (type), type, + type = make_cvr_type (1, TYPE_VOLATILE (type), TYPE_RESTRICT(type), type, dbx_lookup_type (typenums)); break; case 'B': /* Volatile qual on some type (Sun) */ type = read_type (pp, objfile); - type = make_cv_type (TYPE_CONST (type), 1, type, + type = make_cvr_type (TYPE_CONST (type), 1, TYPE_RESTRICT(type), type, dbx_lookup_type (typenums)); break; Modified: projects/calloutng/contrib/libstdc++/include/std/std_limits.h ============================================================================== --- projects/calloutng/contrib/libstdc++/include/std/std_limits.h Tue Dec 25 11:11:26 2012 (r244676) +++ projects/calloutng/contrib/libstdc++/include/std/std_limits.h Tue Dec 25 13:00:19 2012 (r244677) @@ -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/calloutng/contrib/llvm/include/llvm/MC/MCExpr.h ============================================================================== --- projects/calloutng/contrib/llvm/include/llvm/MC/MCExpr.h Tue Dec 25 11:11:26 2012 (r244676) +++ projects/calloutng/contrib/llvm/include/llvm/MC/MCExpr.h Tue Dec 25 13:00:19 2012 (r244677) @@ -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/calloutng/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp ============================================================================== --- projects/calloutng/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp Tue Dec 25 11:11:26 2012 (r244676) +++ projects/calloutng/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp Tue Dec 25 13:00:19 2012 (r244677) @@ -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/calloutng/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp ============================================================================== --- projects/calloutng/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp Tue Dec 25 11:11:26 2012 (r244676) +++ projects/calloutng/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp Tue Dec 25 13:00:19 2012 (r244677) @@ -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/calloutng/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h ============================================================================== --- projects/calloutng/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h Tue Dec 25 11:11:26 2012 (r244676) +++ projects/calloutng/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h Tue Dec 25 13:00:19 2012 (r244677) @@ -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/calloutng/contrib/llvm/lib/MC/MCExpr.cpp ============================================================================== --- projects/calloutng/contrib/llvm/lib/MC/MCExpr.cpp Tue Dec 25 11:11:26 2012 (r244676) +++ projects/calloutng/contrib/llvm/lib/MC/MCExpr.cpp Tue Dec 25 13:00:19 2012 (r244677) @@ -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/calloutng/contrib/llvm/lib/Target/Mips/InstPrinter/MipsInstPrinter.cpp ============================================================================== --- projects/calloutng/contrib/llvm/lib/Target/Mips/InstPrinter/MipsInstPrinter.cpp Tue Dec 25 11:11:26 2012 (r244676) +++ projects/calloutng/contrib/llvm/lib/Target/Mips/InstPrinter/MipsInstPrinter.cpp Tue Dec 25 13:00:19 2012 (r244677) @@ -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/calloutng/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp ============================================================================== --- projects/calloutng/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp Tue Dec 25 11:11:26 2012 (r244676) +++ projects/calloutng/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp Tue Dec 25 13:00:19 2012 (r244677) @@ -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/calloutng/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsBaseInfo.h ============================================================================== --- projects/calloutng/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsBaseInfo.h Tue Dec 25 11:11:26 2012 (r244676) +++ projects/calloutng/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsBaseInfo.h Tue Dec 25 13:00:19 2012 (r244677) @@ -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/calloutng/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp ============================================================================== --- projects/calloutng/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp Tue Dec 25 11:11:26 2012 (r244676) +++ projects/calloutng/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp Tue Dec 25 13:00:19 2012 (r244677) @@ -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/calloutng/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsFixupKinds.h ============================================================================== --- projects/calloutng/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsFixupKinds.h Tue Dec 25 11:11:26 2012 (r244676) +++ projects/calloutng/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsFixupKinds.h Tue Dec 25 13:00:19 2012 (r244677) @@ -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/calloutng/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp ============================================================================== --- projects/calloutng/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp Tue Dec 25 11:11:26 2012 (r244676) +++ projects/calloutng/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp Tue Dec 25 13:00:19 2012 (r244677) @@ -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/calloutng/contrib/llvm/lib/Target/Mips/Mips64InstrInfo.td ============================================================================== --- projects/calloutng/contrib/llvm/lib/Target/Mips/Mips64InstrInfo.td Tue Dec 25 11:11:26 2012 (r244676) +++ projects/calloutng/contrib/llvm/lib/Target/Mips/Mips64InstrInfo.td Tue Dec 25 13:00:19 2012 (r244677) @@ -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/calloutng/contrib/llvm/lib/Target/Mips/MipsCodeEmitter.cpp ============================================================================== --- projects/calloutng/contrib/llvm/lib/Target/Mips/MipsCodeEmitter.cpp Tue Dec 25 11:11:26 2012 (r244676) +++ projects/calloutng/contrib/llvm/lib/Target/Mips/MipsCodeEmitter.cpp Tue Dec 25 13:00:19 2012 (r244677) @@ -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/calloutng/contrib/llvm/lib/Target/Mips/MipsISelLowering.cpp ============================================================================== --- projects/calloutng/contrib/llvm/lib/Target/Mips/MipsISelLowering.cpp Tue Dec 25 11:11:26 2012 (r244676) +++ projects/calloutng/contrib/llvm/lib/Target/Mips/MipsISelLowering.cpp Tue Dec 25 13:00:19 2012 (r244677) @@ -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); - *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201212251300.qBPD0K7N058879>