diff options
author | H. Peter Anvin <hpa@zytor.com> | 2019-09-12 17:45:11 -0700 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2019-09-12 17:45:11 -0700 |
commit | e47f4b7ad5e9ee416cdcac72c04d84077af0d80f (patch) | |
tree | d00ed0a6f4c15cf33635a7671e0856ef4b0b87f1 | |
parent | 7ad25b2e1828a4569812f3296473f7a3bc7cd941 (diff) | |
download | nasm-e47f4b7ad5e9ee416cdcac72c04d84077af0d80f.tar.gz |
elf: fix "object" symbol keyword
The "object" symbol keyword would incorrectly generate STT_NOTYPE
instead of STT_OBJECT. Add test for weak object references; they are
different from plain weak references in that they are guaranteed to
resolve to zero if the symbol is not found.
Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
-rw-r--r-- | output/outelf.c | 2 | ||||
-rw-r--r-- | test/elf_visibility.asm | 2 |
2 files changed, 3 insertions, 1 deletions
diff --git a/output/outelf.c b/output/outelf.c index 0c889bb6..787a3aab 100644 --- a/output/outelf.c +++ b/output/outelf.c @@ -872,7 +872,7 @@ static void elf_deflabel(char *name, int32_t segment, int64_t offset, if (!nasm_strnicmp(spcword, "notype", wlen)) type = STT_NOTYPE; else if (!nasm_strnicmp(spcword, "object", wlen)) - type = STT_NOTYPE; + type = STT_OBJECT; else if (!nasm_strnicmp(spcword, "hidden", wlen)) sym->other = STV_HIDDEN; else if (!nasm_strnicmp(spcword, "strong", wlen)) diff --git a/test/elf_visibility.asm b/test/elf_visibility.asm index 81ea7a0c..b1dc83cb 100644 --- a/test/elf_visibility.asm +++ b/test/elf_visibility.asm @@ -6,6 +6,7 @@ global foo_weak:function weak global foo_hidden_weak:function hidden weak extern strong_ref, weak_ref:weak, unused_ref +extern weak_object_ref:weak object required required_ref SECTION .text align=16 @@ -23,6 +24,7 @@ foo_weak: foo_hidden_weak: mov eax,weak_ref mov eax,strong_ref + mov eax,weak_object_ref foo_label: ret foo_end: |