]> granicus.if.org Git - yasm/commitdiff
* elf-objfmt.c (elf_objfmt_symtab_append): Don't append symbol a second
authorPeter Johnson <peter@tortall.net>
Tue, 1 Nov 2005 04:23:54 +0000 (04:23 -0000)
committerPeter Johnson <peter@tortall.net>
Tue, 1 Nov 2005 04:23:54 +0000 (04:23 -0000)
time if it already has associated data.  This keeps global followed by
extern from generating duplicate symbol table entries.

svn path=/trunk/yasm/; revision=1300

modules/objfmts/elf/elf-objfmt.c
modules/objfmts/elf/tests/Makefile.inc
modules/objfmts/elf/tests/elfglobext2.asm [new file with mode: 0644]
modules/objfmts/elf/tests/elfglobext2.errwarn [new file with mode: 0644]
modules/objfmts/elf/tests/elfglobext2.hex [new file with mode: 0644]

index 0e3f816080255d9ed43e7d82ce1fb4275d813850..c5bd4d6d285188ccf3a61059949d482f5a6e5737 100644 (file)
@@ -91,10 +91,14 @@ elf_objfmt_symtab_append(yasm_objfmt_elf *objfmt_elf, yasm_symrec *sym,
                         elf_symbol_type type, elf_symbol_vis vis,
                          yasm_expr *size, elf_address value)
 {
-    elf_strtab_entry *name = elf_strtab_append_str(objfmt_elf->strtab,
-                                                  yasm_symrec_get_name(sym));
-    elf_symtab_entry *entry = elf_symtab_entry_create(name, sym);
-    elf_symtab_append_entry(objfmt_elf->elf_symtab, entry);
+    /* Only append to table if not already appended */
+    elf_symtab_entry *entry = yasm_symrec_get_data(sym, &elf_symrec_data);
+    if (!entry) {
+       elf_strtab_entry *name = elf_strtab_append_str(objfmt_elf->strtab,
+                                                      yasm_symrec_get_name(sym));
+       entry = elf_symtab_entry_create(name, sym);
+       elf_symtab_append_entry(objfmt_elf->elf_symtab, entry);
+    }
 
     elf_symtab_set_nonzero(entry, NULL, sectidx, bind, type, size, value);
     elf_sym_set_visibility(entry, vis);
index 51d51b0660b211220feb07382d970aaf648088b5..f39c04a50557ad55ccbfb03cac94fc7140323ead 100644 (file)
@@ -28,6 +28,9 @@ EXTRA_DIST += modules/objfmts/elf/tests/elfglobal.hex
 EXTRA_DIST += modules/objfmts/elf/tests/elfglobext.asm
 EXTRA_DIST += modules/objfmts/elf/tests/elfglobext.errwarn
 EXTRA_DIST += modules/objfmts/elf/tests/elfglobext.hex
+EXTRA_DIST += modules/objfmts/elf/tests/elfglobext2.asm
+EXTRA_DIST += modules/objfmts/elf/tests/elfglobext2.errwarn
+EXTRA_DIST += modules/objfmts/elf/tests/elfglobext2.hex
 EXTRA_DIST += modules/objfmts/elf/tests/elfreloc-ext.asm
 EXTRA_DIST += modules/objfmts/elf/tests/elfreloc-ext.errwarn
 EXTRA_DIST += modules/objfmts/elf/tests/elfreloc-ext.hex
diff --git a/modules/objfmts/elf/tests/elfglobext2.asm b/modules/objfmts/elf/tests/elfglobext2.asm
new file mode 100644 (file)
index 0000000..6467aa3
--- /dev/null
@@ -0,0 +1,2 @@
+global foo
+extern foo
diff --git a/modules/objfmts/elf/tests/elfglobext2.errwarn b/modules/objfmts/elf/tests/elfglobext2.errwarn
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/modules/objfmts/elf/tests/elfglobext2.hex b/modules/objfmts/elf/tests/elfglobext2.hex
new file mode 100644 (file)
index 0000000..ca4b2db
--- /dev/null
@@ -0,0 +1,376 @@
+7f 
+45 
+4c 
+46 
+01 
+01 
+01 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+01 
+00 
+03 
+00 
+01 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+b0 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+34 
+00 
+00 
+00 
+00 
+00 
+28 
+00 
+05 
+00 
+01 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+2e 
+74 
+65 
+78 
+74 
+00 
+2e 
+73 
+74 
+72 
+74 
+61 
+62 
+00 
+2e 
+73 
+79 
+6d 
+74 
+61 
+62 
+00 
+2e 
+73 
+68 
+73 
+74 
+72 
+74 
+61 
+62 
+00 
+00 
+00 
+00 
+00 
+2d 
+00 
+66 
+6f 
+6f 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+01 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+04 
+00 
+f1 
+ff 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+03 
+00 
+04 
+00 
+03 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+10 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+17 
+00 
+00 
+00 
+03 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+40 
+00 
+00 
+00 
+21 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+07 
+00 
+00 
+00 
+03 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+64 
+00 
+00 
+00 
+07 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+0f 
+00 
+00 
+00 
+02 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+6c 
+00 
+00 
+00 
+40 
+00 
+00 
+00 
+02 
+00 
+00 
+00 
+03 
+00 
+00 
+00 
+04 
+00 
+00 
+00 
+10 
+00 
+00 
+00 
+01 
+00 
+00 
+00 
+01 
+00 
+00 
+00 
+06 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+40 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+10 
+00 
+00 
+00 
+00 
+00 
+00 
+00