mirror of
https://github.com/netwide-assembler/nasm.git
synced 2025-04-12 18:40:23 +08:00
Don't keep assigning segment numbers to EXTERN or COMMON
If a symbol is EXTERN or COMMON, then we should not keep assigning it new segment numbers over and over. Instead, change the label code so that it assignes a new segment value if and only if one has not been assigned before. Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
This commit is contained in:
parent
58ab877402
commit
af5f918a92
@ -369,7 +369,7 @@ bool process_directives(char *directive)
|
||||
break;
|
||||
|
||||
if (type == LBL_COMMON || type == LBL_EXTERN)
|
||||
define_label(value, seg_alloc(), size, false);
|
||||
define_label(value, 0, size, false);
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -77,7 +77,6 @@ static bool ismagic(const char *l)
|
||||
|
||||
#define END_LIST -3 /* don't clash with NO_SEG! */
|
||||
#define END_BLOCK -2
|
||||
#define BOGUS_VALUE -4
|
||||
|
||||
#define PERMTS_SIZE 16384 /* size of text blocks */
|
||||
#if (PERMTS_SIZE < IDLEN_MAX)
|
||||
@ -230,7 +229,6 @@ static union label *find_label(const char *label, bool create, bool *created)
|
||||
*created = true;
|
||||
|
||||
nasm_zero(*lfree);
|
||||
lfree->admin.movingon = BOGUS_VALUE;
|
||||
lfree->defn.label = perm_copy(label);
|
||||
lfree->defn.subsection = NO_SEG;
|
||||
if (label_str)
|
||||
@ -426,6 +424,12 @@ void define_label(const char *label, int32_t segment,
|
||||
nasm_error(ERR_WARNING, "label `%s' defined on pass two", label);
|
||||
}
|
||||
|
||||
if (!segment) {
|
||||
segment = lptr->defn.segment;
|
||||
if (!segment)
|
||||
segment = lptr->defn.segment = seg_alloc();
|
||||
}
|
||||
|
||||
if (lptr->defn.defined || lptr->defn.type == LBL_BACKEND) {
|
||||
/* We have seen this on at least one previous pass */
|
||||
mangle_label_name(lptr);
|
||||
|
Loading…
x
Reference in New Issue
Block a user