file.addZeroFillDefinedAtom(sym.name, atomScope(sym.scope), size, copyRefs);
} else {
ArrayRef<uint8_t> atomContent = section.content.slice(offset, size);
+ DefinedAtom::Merge m = DefinedAtom::mergeNo;
+ if (sym.desc & N_WEAK_DEF)
+ m = DefinedAtom::mergeAsWeak;
file.addDefinedAtom(sym.name, atomScope(sym.scope),
- atomTypeFromSection(section), DefinedAtom::mergeNo,
- atomContent, copyRefs);
+ atomTypeFromSection(section), m, atomContent, copyRefs);
}
}
address: 0x0000000000000000
content: [ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
0x11, 0x12, 0x13, 0x14, 0x21, 0x22, 0x23, 0x24,
- 0x31, 0x32, 0x33, 0x34 ]
+ 0x31, 0x32, 0x33, 0x34, 0x41, 0x42, 0x43, 0x44 ]
- segment: __DATA
section: __bss
type: S_ZEROFILL
attributes: [ ]
alignment: 2
- address: 0x0000000000000014
+ address: 0x0000000000000018
size: 4
local-symbols:
- name: _s1
type: N_SECT
sect: 2
- value: 0x0000000000000014
+ value: 0x0000000000000018
- name: _s2
type: N_SECT
sect: 1
scope: [ N_EXT ]
sect: 1
value: 0x000000000000000C
+ - name: _cWeak
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 1
+ desc: [ N_WEAK_DEF ]
+ value: 0x0000000000000014
...
# CHECK: defined-atoms:
# CHECK: scope: global
# CHECK: content: [ 21, 22, 23, 24 ]
+# CHECK: - name: _cWeak
+# CHECK: scope: global
+# CHECK: content: [ 41, 42, 43, 44 ]
+# CHECK: merge: as-weak
+
# CHECK: - name: _s2
# CHECK: content: [ 31, 32, 33, 34 ]
# RUN: lld -flavor darwin -arch x86_64 -r -print_atoms %s -o %t | FileCheck %s
#
-# Test parsing of scope of functions.
+# Test parsing of mach-o functions.
#
--- !mach-o
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
alignment: 4
address: 0x0000000000000000
- content: [ 0xC3, 0xC3, 0xC3 ]
+ content: [ 0xC3, 0xC3, 0xC3, 0xC3, 0xC3 ]
local-symbols:
- name: _myStatic
type: N_SECT
sect: 1
- value: 0x0000000000000002
+ value: 0x0000000000000005
global-symbols:
- name: _myGlobal
type: N_SECT
scope: [ N_EXT ]
sect: 1
value: 0x0000000000000000
+ - name: _myGlobalWeak
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 1
+ desc: [ N_WEAK_DEF ]
+ value: 0x0000000000000001
- name: _myHidden
type: N_SECT
scope: [ N_EXT, N_PEXT ]
sect: 1
- value: 0x0000000000000001
+ value: 0x0000000000000002
+ - name: _myHiddenWeak
+ type: N_SECT
+ scope: [ N_EXT, N_PEXT ]
+ sect: 1
+ desc: [ N_WEAK_DEF ]
+ value: 0x0000000000000003
...
# CHECK: name: _myGlobal
# CHECK: scope: global
+
+# CHECK: name: _myGlobalWeak
+# CHECK: scope: global
+# CHECK: merge: as-weak
+
# CHECK: name: _myHidden
# CHECK: scope: hidden
+
+# CHECK: name: _myHiddenWeak
+# CHECK: scope: hidden
+# CHECK: merge: as-weak
+
# CHECK: name: _myStatic
# CHECK-NOT: scope: global
# CHECK-NOT: scope: hidden