| /* SPDX-License-Identifier: BSD-2-Clause */ |
| /* Copyright 1996-2018 The NASM Authors - All Rights Reserved */ |
| |
| /* |
| * labels.h header file for labels.c |
| */ |
| |
| #ifndef LABELS_H |
| #define LABELS_H |
| |
| #include "compiler.h" |
| |
| enum label_type { |
| LBL_none = -1, /* No label */ |
| LBL_LOCAL = 0, /* Must be zero */ |
| LBL_STATIC, |
| LBL_GLOBAL, |
| LBL_EXTERN, |
| LBL_REQUIRED, /* Like extern but emit even if unused */ |
| LBL_COMMON, |
| LBL_SPECIAL, /* Magic symbols like ..start */ |
| LBL_BACKEND /* Backend-defined symbols like ..got */ |
| }; |
| |
| enum label_type lookup_label(const char *label, int32_t *segment, int64_t *offset); |
| static inline bool is_extern(enum label_type type) |
| { |
| return type == LBL_EXTERN || type == LBL_REQUIRED; |
| } |
| void define_label(const char *label, int32_t segment, int64_t offset, |
| bool normal); |
| void backend_label(const char *label, int32_t segment, int64_t offset); |
| bool declare_label(const char *label, enum label_type type, |
| const char *special); |
| void set_label_mangle(enum directive which, const char *what); |
| int init_labels(void); |
| void cleanup_labels(void); |
| const char *local_scope(const char *label); |
| |
| extern uint64_t global_offset_changed; |
| |
| #endif /* LABELS_H */ |