<div dir="ltr">Hi Simon,<br><br>Seems some of these changes broke couple builders:<br><br><a href="http://lab.llvm.org:8011/builders/lld-x86_64-darwin11/builds/7661">http://lab.llvm.org:8011/builders/lld-x86_64-darwin11/builds/7661</a><br>
<a href="http://lab.llvm.org:8011/builders/lld-x86_64-freeBSD/builds/4241">http://lab.llvm.org:8011/builders/lld-x86_64-freeBSD/builds/4241</a><br><br>Please have a look at these?<br><br>Thanks<br><br>Galina<br></div><div class="gmail_extra">
<br><br><div class="gmail_quote">On Wed, Mar 19, 2014 at 8:46 AM, Simon Atanasyan <span dir="ltr"><<a href="mailto:simon@atanasyan.com" target="_blank">simon@atanasyan.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Author: atanasyan<br>
Date: Wed Mar 19 10:46:25 2014<br>
New Revision: 204247<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=204247&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=204247&view=rev</a><br>
Log:<br>
[Mips] Fix handling of R_MIPS_GOT16 relocation and building local part<br>
of GOT.<br>
* Read addend for R_MIPS_GOT16 relocation.<br>
* Put only high 16 bits of symbol + addend into GOT entries for<br>
locally visible symbols.<br>
<br>
Modified:<br>
lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFile.h<br>
lld/trunk/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.h<br>
lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp<br>
lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationPass.cpp<br>
lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp<br>
lld/trunk/test/elf/Mips/dynlib-dynsym.test<br>
lld/trunk/test/elf/Mips/got16.test<br>
<br>
Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFile.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFile.h?rev=204247&r1=204246&r2=204247&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFile.h?rev=204247&r1=204246&r2=204247&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFile.h (original)<br>
+++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFile.h Wed Mar 19 10:46:25 2014<br>
@@ -78,6 +78,7 @@ private:<br>
break;<br>
case R_MIPS_HI16:<br>
case R_MIPS_LO16:<br>
+ case R_MIPS_GOT16:<br>
ref->setAddend(*(int16_t *)ap);<br>
break;<br>
}<br>
<br>
Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.h?rev=204247&r1=204246&r2=204247&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.h?rev=204247&r1=204246&r2=204247&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.h (original)<br>
+++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.h Wed Mar 19 10:46:25 2014<br>
@@ -18,6 +18,8 @@ namespace elf {<br>
enum {<br>
/// \brief Do nothing but mark GOT entry as a global one.<br>
LLD_R_MIPS_GLOBAL_GOT = 1024,<br>
+ /// \brief Apply high 16 bits of symbol + addend.<br>
+ LLD_R_MIPS_32_HI16 = 1025,<br>
/// \brief The same as R_MIPS_26 but for global symbols.<br>
LLD_R_MIPS_GLOBAL_26 = 1026,<br>
/// \brief Setup hi 16 bits using the symbol this reference refers to.<br>
<br>
Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp?rev=204247&r1=204246&r2=204247&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp?rev=204247&r1=204246&r2=204247&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp (original)<br>
+++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp Wed Mar 19 10:46:25 2014<br>
@@ -105,6 +105,11 @@ void relocCall16(uint8_t *location, uint<br>
applyReloc(location, G, 0xffff);<br>
}<br>
<br>
+/// \brief LLD_R_MIPS_32_HI16<br>
+void reloc32hi16(uint8_t *location, uint64_t S, int64_t A) {<br>
+ applyReloc(location, (S + A) & 0xffff0000, 0xffffffff);<br>
+}<br>
+<br>
/// \brief LLD_R_MIPS_HI16<br>
void relocLldHi16(uint8_t *location, uint64_t S) {<br>
applyReloc(location, (S + 0x8000) >> 16, 0xffff);<br>
@@ -164,6 +169,9 @@ error_code MipsTargetRelocationHandler::<br>
case LLD_R_MIPS_GLOBAL_GOT:<br>
// Do nothing.<br>
break;<br>
+ case LLD_R_MIPS_32_HI16:<br>
+ reloc32hi16(location, targetVAddress, ref.addend());<br>
+ break;<br>
case LLD_R_MIPS_GLOBAL_26:<br>
reloc26ext(location, targetVAddress, ref.addend());<br>
break;<br>
<br>
Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationPass.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationPass.cpp?rev=204247&r1=204246&r2=204247&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationPass.cpp?rev=204247&r1=204246&r2=204247&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationPass.cpp (original)<br>
+++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationPass.cpp Wed Mar 19 10:46:25 2014<br>
@@ -125,8 +125,11 @@ private:<br>
/// \brief Owner of all the Atoms created by this pass.<br>
RelocationPassFile _file;<br>
<br>
- /// \brief Map Atoms to their GOT entries.<br>
- llvm::DenseMap<const Atom *, GOTAtom *> _gotLocalMap;<br>
+ /// \brief Map Atoms and addend to local GOT entries.<br>
+ typedef std::pair<const Atom *, int64_t> LocalGotMapKeyT;<br>
+ llvm::DenseMap<LocalGotMapKeyT, GOTAtom *> _gotLocalMap;<br>
+<br>
+ /// \brief Map Atoms to global GOT entries.<br>
llvm::DenseMap<const Atom *, GOTAtom *> _gotGlobalMap;<br>
<br>
/// \brief the list of local GOT atoms.<br>
@@ -160,7 +163,7 @@ private:<br>
void handlePLT(const Reference &ref);<br>
void handleGOT(const Reference &ref);<br>
<br>
- const GOTAtom *getLocalGOTEntry(const Atom *a);<br>
+ const GOTAtom *getLocalGOTEntry(const Reference &ref);<br>
const GOTAtom *getGlobalGOTEntry(const Atom *a);<br>
const PLTAtom *getPLTEntry(const Atom *a);<br>
const ObjectAtom *getObjectEntry(const SharedLibraryAtom *a);<br>
@@ -302,7 +305,7 @@ void RelocationPass::handlePLT(const Ref<br>
<br>
void RelocationPass::handleGOT(const Reference &ref) {<br>
if (requireLocalGOT(ref.target()))<br>
- const_cast<Reference &>(ref).setTarget(getLocalGOTEntry(ref.target()));<br>
+ const_cast<Reference &>(ref).setTarget(getLocalGOTEntry(ref));<br>
else<br>
const_cast<Reference &>(ref).setTarget(getGlobalGOTEntry(ref.target()));<br>
}<br>
@@ -327,18 +330,23 @@ bool RelocationPass::requireLocalGOT(con<br>
return false;<br>
}<br>
<br>
-const GOTAtom *RelocationPass::getLocalGOTEntry(const Atom *a) {<br>
- auto got = _gotLocalMap.find(a);<br>
+const GOTAtom *RelocationPass::getLocalGOTEntry(const Reference &ref) {<br>
+ const Atom *a = ref.target();<br>
+ LocalGotMapKeyT key(a, ref.addend());<br>
+<br>
+ auto got = _gotLocalMap.find(key);<br>
if (got != _gotLocalMap.end())<br>
return got->second;<br>
<br>
auto ga = new (_file._alloc) GOT0Atom(_file);<br>
- _gotLocalMap[a] = ga;<br>
+ _gotLocalMap[key] = ga;<br>
<br>
_localGotVector.push_back(ga);<br>
<br>
- if (const DefinedAtom *da = dyn_cast<DefinedAtom>(a))<br>
- ga->addReferenceELF_Mips(R_MIPS_32, 0, da, 0);<br>
+ if (isLocal(a))<br>
+ ga->addReferenceELF_Mips(LLD_R_MIPS_32_HI16, 0, a, ref.addend());<br>
+ else<br>
+ ga->addReferenceELF_Mips(R_MIPS_32, 0, a, 0);<br>
<br>
DEBUG_WITH_TYPE("MipsGOT", {<br>
ga->_name = "__got_";<br>
<br>
Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp?rev=204247&r1=204246&r2=204247&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp?rev=204247&r1=204246&r2=204247&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp (original)<br>
+++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp Wed Mar 19 10:46:25 2014<br>
@@ -58,6 +58,7 @@ const Registry::KindStrings MipsTargetHa<br>
LLD_KIND_STRING_ENTRY(R_MIPS_COPY),<br>
LLD_KIND_STRING_ENTRY(R_MIPS_JUMP_SLOT),<br>
LLD_KIND_STRING_ENTRY(LLD_R_MIPS_GLOBAL_GOT),<br>
+ LLD_KIND_STRING_ENTRY(LLD_R_MIPS_32_HI16),<br>
LLD_KIND_STRING_ENTRY(LLD_R_MIPS_GLOBAL_26),<br>
LLD_KIND_STRING_ENTRY(LLD_R_MIPS_HI16),<br>
LLD_KIND_STRING_ENTRY(LLD_R_MIPS_LO16),<br>
<br>
Modified: lld/trunk/test/elf/Mips/dynlib-dynsym.test<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Mips/dynlib-dynsym.test?rev=204247&r1=204246&r2=204247&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Mips/dynlib-dynsym.test?rev=204247&r1=204246&r2=204247&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/test/elf/Mips/dynlib-dynsym.test (original)<br>
+++ lld/trunk/test/elf/Mips/dynlib-dynsym.test Wed Mar 19 10:46:25 2014<br>
@@ -83,7 +83,7 @@<br>
# CHECK-GOT: section-name: .got<br>
# CHECK-GOT: permissions: rw-<br>
# CHECK-GOT: references:<br>
-# CHECK-GOT: - kind: R_MIPS_32<br>
+# CHECK-GOT: - kind: LLD_R_MIPS_32_HI16<br>
# CHECK-GOT: offset: 0<br>
# CHECK-GOT: target: L003<br>
# CHECK-GOT: - ref-name: L004<br>
@@ -94,7 +94,7 @@<br>
# CHECK-GOT: section-name: .got<br>
# CHECK-GOT: permissions: rw-<br>
# CHECK-GOT: references:<br>
-# CHECK-GOT: - kind: R_MIPS_32<br>
+# CHECK-GOT: - kind: LLD_R_MIPS_32_HI16<br>
# CHECK-GOT: offset: 0<br>
# CHECK-GOT: target: L005<br>
# CHECK-GOT: - ref-name: L006<br>
<br>
Modified: lld/trunk/test/elf/Mips/got16.test<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Mips/got16.test?rev=204247&r1=204246&r2=204247&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Mips/got16.test?rev=204247&r1=204246&r2=204247&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/test/elf/Mips/got16.test (original)<br>
+++ lld/trunk/test/elf/Mips/got16.test Wed Mar 19 10:46:25 2014<br>
@@ -6,105 +6,141 @@<br>
# RUN: lld -flavor gnu -target mipsel -shared --noinhibit-exec -o %t2 %t1<br>
# RUN: llvm-objdump -t -disassemble %t2 | FileCheck -check-prefix RAW %s<br>
<br>
-<br>
-# YAML: - ref-name: [[L002:[-a-zA-Z0-9_]+]]<br>
-# YAML: type: got<br>
-# YAML: content: [ 00, 00, 00, 00 ]<br>
-# YAML: alignment: 2^2<br>
-# YAML: section-choice: custom-required<br>
-# YAML: section-name: .got<br>
-# YAML: permissions: rw-<br>
-# YAML: references:<br>
-# YAML: - kind: R_MIPS_32<br>
-# YAML: offset: 0<br>
-# YAML: target: [[L003:[-a-zA-Z0-9_]+]]<br>
-# YAML: - ref-name: [[L004:[-a-zA-Z0-9_]+]]<br>
-# YAML: type: got<br>
-# YAML: content: [ 00, 00, 00, 00 ]<br>
-# YAML: alignment: 2^2<br>
-# YAML: section-choice: custom-required<br>
-# YAML: section-name: .got<br>
-# YAML: permissions: rw-<br>
-# YAML: references:<br>
-# YAML: - kind: R_MIPS_32<br>
-# YAML: offset: 0<br>
-# YAML: target: hidden<br>
-# YAML: - ref-name: [[L005:[-a-zA-Z0-9_]+]]<br>
-# YAML: type: got<br>
-# YAML: content: [ 00, 00, 00, 00 ]<br>
-# YAML: alignment: 2^2<br>
-# YAML: section-choice: custom-required<br>
-# YAML: section-name: .got<br>
-# YAML: permissions: rw-<br>
-# YAML: references:<br>
-# YAML: - kind: LLD_R_MIPS_GLOBAL_GOT<br>
-# YAML: offset: 0<br>
-# YAML: target: glob<br>
-# YAML: - kind: R_MIPS_32<br>
-# YAML: offset: 0<br>
-# YAML: target: glob<br>
-# YAML: - ref-name: [[L006:[-a-zA-Z0-9_]+]]<br>
-# YAML: type: got<br>
-# YAML: content: [ 00, 00, 00, 00 ]<br>
-# YAML: alignment: 2^2<br>
-# YAML: section-choice: custom-required<br>
-# YAML: section-name: .got<br>
-# YAML: permissions: rw-<br>
-# YAML: references:<br>
-# YAML: - kind: LLD_R_MIPS_GLOBAL_GOT<br>
-# YAML: offset: 0<br>
-# YAML: target: extern<br>
-# YAML: - ref-name: [[L007:[-a-zA-Z0-9_]+]]<br>
-# YAML: alignment: 2^2<br>
-# YAML: references:<br>
-# YAML: - kind: layout-after<br>
-# YAML: offset: 0<br>
-# YAML: target: glob<br>
-# YAML: - name: glob<br>
-# YAML: scope: global<br>
-# YAML: content: [ 00, 00, 84, 8F, 00, 00, 84, 24, 00, 00, 84, 8F,<br>
-# YAML: 00, 00, 84, 8F, 00, 00, 84, 8F ]<br>
-# YAML: alignment: 2^2<br>
-# YAML: references:<br>
-# YAML: - kind: R_MIPS_LO16<br>
-# YAML: offset: 4<br>
-# YAML: target: [[L003]]<br>
-# YAML: - kind: R_MIPS_GOT16<br>
-# YAML: offset: 8<br>
-# YAML: target: [[L004]]<br>
-# YAML: - kind: R_MIPS_CALL16<br>
-# YAML: offset: 12<br>
-# YAML: target: [[L005]]<br>
-# YAML: - kind: R_MIPS_CALL16<br>
-# YAML: offset: 16<br>
-# YAML: target: [[L006]]<br>
+# Local GOT entries:<br>
+# YAML: - ref-name: L003<br>
+# YAML-NEXT: type: got<br>
+# YAML-NEXT: content: [ 00, 00, 00, 00 ]<br>
+# YAML-NEXT: alignment: 2^2<br>
+# YAML-NEXT: section-choice: custom-required<br>
+# YAML-NEXT: section-name: .got<br>
+# YAML-NEXT: permissions: rw-<br>
+# YAML-NEXT: references:<br>
+# YAML-NEXT: - kind: LLD_R_MIPS_32_HI16<br>
+# YAML-NEXT: offset: 0<br>
+# YAML-NEXT: target: L006<br>
+# YAML-NEXT: - ref-name: L005<br>
+# YAML-NEXT: type: got<br>
+# YAML-NEXT: content: [ 00, 00, 00, 00 ]<br>
+# YAML-NEXT: alignment: 2^2<br>
+# YAML-NEXT: section-choice: custom-required<br>
+# YAML-NEXT: section-name: .got<br>
+# YAML-NEXT: permissions: rw-<br>
+# YAML-NEXT: references:<br>
+# YAML-NEXT: - kind: LLD_R_MIPS_32_HI16<br>
+# YAML-NEXT: offset: 0<br>
+# YAML-NEXT: target: L006<br>
+# YAML-NEXT: addend: 66048<br>
+# YAML-NEXT: - ref-name: L007<br>
+# YAML-NEXT: type: got<br>
+# YAML-NEXT: content: [ 00, 00, 00, 00 ]<br>
+# YAML-NEXT: alignment: 2^2<br>
+# YAML-NEXT: section-choice: custom-required<br>
+# YAML-NEXT: section-name: .got<br>
+# YAML-NEXT: permissions: rw-<br>
+# YAML-NEXT: references:<br>
+# YAML-NEXT: - kind: R_MIPS_32<br>
+# YAML-NEXT: offset: 0<br>
+# YAML-NEXT: target: hidden<br>
+<br>
+# Global GOT entries:<br>
+# YAML-NEXT: - ref-name: L008<br>
+# YAML-NEXT: type: got<br>
+# YAML-NEXT: content: [ 00, 00, 00, 00 ]<br>
+# YAML-NEXT: alignment: 2^2<br>
+# YAML-NEXT: section-choice: custom-required<br>
+# YAML-NEXT: section-name: .got<br>
+# YAML-NEXT: permissions: rw-<br>
+# YAML-NEXT: references:<br>
+# YAML-NEXT: - kind: LLD_R_MIPS_GLOBAL_GOT<br>
+# YAML-NEXT: offset: 0<br>
+# YAML-NEXT: target: glob<br>
+# YAML-NEXT: - kind: R_MIPS_32<br>
+# YAML-NEXT: offset: 0<br>
+# YAML-NEXT: target: glob<br>
+# YAML-NEXT: - ref-name: L009<br>
+# YAML-NEXT: type: got<br>
+# YAML-NEXT: content: [ 00, 00, 00, 00 ]<br>
+# YAML-NEXT: alignment: 2^2<br>
+# YAML-NEXT: section-choice: custom-required<br>
+# YAML-NEXT: section-name: .got<br>
+# YAML-NEXT: permissions: rw-<br>
+# YAML-NEXT: references:<br>
+# YAML-NEXT: - kind: LLD_R_MIPS_GLOBAL_GOT<br>
+# YAML-NEXT: offset: 0<br>
+# YAML-NEXT: target: extern<br>
+<br>
+# Function glob<br>
+# YAML: - name: glob<br>
+# YAML-NEXT: scope: global<br>
+# YAML-NEXT: content: [ 00, 00, 84, 8F, 00, 00, 84, 24, 01, 00, 84, 8F,<br>
+# YAML-NEXT: 00, 02, 84, 24, 00, 00, 84, 8F, 00, 00, 84, 8F,<br>
+# YAML-NEXT: 00, 00, 84, 8F ]<br>
+# YAML-NEXT: alignment: 2^2<br>
+# YAML-NEXT: references:<br>
+# YAML-NEXT: - kind: R_MIPS_GOT16<br>
+# YAML-NEXT: offset: 0<br>
+# YAML-NEXT: target: L003<br>
+# YAML-NEXT: - kind: R_MIPS_LO16<br>
+# YAML-NEXT: offset: 4<br>
+# YAML-NEXT: target: L006<br>
+# YAML-NEXT: - kind: R_MIPS_GOT16<br>
+# YAML-NEXT: offset: 8<br>
+# YAML-NEXT: target: L005<br>
+# YAML-NEXT: addend: 66048<br>
+# YAML-NEXT: - kind: R_MIPS_LO16<br>
+# YAML-NEXT: offset: 12<br>
+# YAML-NEXT: target: L006<br>
+# YAML-NEXT: addend: 512<br>
+# YAML-NEXT: - kind: R_MIPS_GOT16<br>
+# YAML-NEXT: offset: 16<br>
+# YAML-NEXT: target: L007<br>
+# YAML-NEXT: - kind: R_MIPS_CALL16<br>
+# YAML-NEXT: offset: 20<br>
+# YAML-NEXT: target: L008<br>
+# YAML-NEXT: - kind: R_MIPS_CALL16<br>
+# YAML-NEXT: offset: 24<br>
+# YAML-NEXT: target: L009<br>
<br>
# RAW: Disassembly of section .text:<br>
# RAW: glob:<br>
-# RAW-NEXT: 148: 18 80 84 8f lw $4, -32744($gp)<br>
-# RAW-NEXT: 14c: 00 20 84 24 addiu $4, $4, 8192<br>
-# RAW-NEXT: 150: 1c 80 84 8f lw $4, -32740($gp)<br>
-# RAW-NEXT: 154: 20 80 84 8f lw $4, -32736($gp)<br>
-# RAW-NEXT: 158: 24 80 84 8f lw $4, -32732($gp)<br>
+# RAW-NEXT: 12c: 18 80 84 8f lw $4, -32744($gp)<br>
+# RAW-NEXT: 130: 00 20 84 24 addiu $4, $4, 8192<br>
+# RAW-NEXT: 134: 1c 80 84 8f lw $4, -32740($gp)<br>
+# RAW-NEXT: 138: 00 22 84 24 addiu $4, $4, 8704<br>
+# RAW-NEXT: 13c: 20 80 84 8f lw $4, -32736($gp)<br>
+# RAW-NEXT: 140: 24 80 84 8f lw $4, -32732($gp)<br>
+# RAW-NEXT: 144: 28 80 84 8f lw $4, -32728($gp)<br>
<br>
# RAW: SYMBOL TABLE:<br>
# RAW: 00000000 *UND* 00000000<br>
-# RAW: 00002000 l .data 00000000 local<br>
+# RAW: 00002000 l .data 00000000 str1<br>
+# RAW: 00012200 l .data 00000005 str2<br>
+# RAW: 0000012c g F .text 0000001c glob<br>
+# RAW: 00012205 g .data 00000004 hidden<br>
<br>
.global glob<br>
.ent glob<br>
glob:<br>
- lw $4,%got(local)($28) # G(local)<br>
- addiu $4,$4,%lo(local) # local (0x2000)<br>
+ lw $4,%got(str1)($28) # G(str1)<br>
+ addiu $4,$4,%lo(str1) # str1<br>
+ lw $4,%got(str2)($28) # G(str2)<br>
+ addiu $4,$4,%lo(str2) # str2<br>
lw $4,%got(hidden)($28) # G(hidden)<br>
lw $4,%call16(glob)($28) # G(glob)<br>
lw $4,%call16(extern)($28) # G(extern)<br>
.end glob<br>
+<br>
.data<br>
- .type local,%object<br>
- .size local,4<br>
-local:<br>
- .word undef<br>
+ .type str1, %object<br>
+ .size str1, 0x10200<br>
+str1:<br>
+ .ascii "str1\000"<br>
+ .space 0x101fb<br>
+<br>
+ .type str2, @object<br>
+ .size str2, 5<br>
+str2:<br>
+ .ascii "str2\000"<br>
<br>
.globl hidden<br>
.hidden hidden<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>