bfd macro conversion to inline functions, section

This one exposed a bug in tic6x gas, found with inline function
parameter type checking.  struct bfd_section and struct bfd_symbol
both have a flags field, so bfd_is_com_section (symbol) compiled OK
when bfd_is_com_section was a macro but didn't special case common
symbols.

bfd/
	* bfd-in.h (bfd_section_name, bfd_section_size, bfd_section_vma),
	(bfd_section_lma, bfd_section_alignment, bfd_section_flags),
	(bfd_section_userdata, bfd_is_com_section, discarded_section),
	(bfd_get_section_limit_octets, bfd_get_section_limit): Delete macros.
	* bfd.c (bfd_get_section_limit_octets, bfd_get_section_limit),
	(bfd_section_list_remove, bfd_section_list_append),
	(bfd_section_list_prepend, bfd_section_list_insert_after),
	(bfd_section_list_insert_before, bfd_section_removed_from_list):
	New inline functions.
	* section.c (bfd_is_und_section, bfd_is_abs_section),
	(bfd_is_ind_section, bfd_is_const_section, bfd_section_list_remove),
	(bfd_section_list_append, bfd_section_list_prepend),
	(bfd_section_list_insert_after, bfd_section_list_insert_before),
	(bfd_section_removed_from_list): Delete macros.
	(bfd_section_name, bfd_section_size, bfd_section_vma),
	(bfd_section_lma, bfd_section_alignment, bfd_section_flags),
	(bfd_section_userdata, bfd_is_com_section, bfd_is_und_section),
	(bfd_is_abs_section, bfd_is_ind_section, bfd_is_const_section),
	(discarded_section): New inline functions.
	* bfd-in2.h: Regenerate.
gas/
	* config/tc-tic6x.c (tc_gen_reloc): Correct common symbol check.
ld/
	* emultempl/xtensaelf.em (xtensa_get_section_deps): Comment.
	Use bfd_section_userdata.
	(xtensa_set_section_deps): Use bfd_set_section_userdata.
	* ldlang.c (lang_output_section_get): Use bfd_section_userdata.
	(sort_def_symbol): Likewise, and bfd_set_section_userdata.
	(init_os): Use bfd_set_section_userdata.
	(print_all_symbols): Use bfd_section_userdata.
	* ldlang.h (get_userdata): Delete.
This commit is contained in:
Alan Modra 2019-09-17 08:59:25 +09:30
parent af30dc128b
commit a48931cc2d
11 changed files with 405 additions and 257 deletions

View File

@ -1,3 +1,26 @@
2019-09-20 Alan Modra <amodra@gmail.com>
* bfd-in.h (bfd_section_name, bfd_section_size, bfd_section_vma),
(bfd_section_lma, bfd_section_alignment, bfd_section_flags),
(bfd_section_userdata, bfd_is_com_section, discarded_section),
(bfd_get_section_limit_octets, bfd_get_section_limit): Delete macros.
* bfd.c (bfd_get_section_limit_octets, bfd_get_section_limit),
(bfd_section_list_remove, bfd_section_list_append),
(bfd_section_list_prepend, bfd_section_list_insert_after),
(bfd_section_list_insert_before, bfd_section_removed_from_list):
New inline functions.
* section.c (bfd_is_und_section, bfd_is_abs_section),
(bfd_is_ind_section, bfd_is_const_section, bfd_section_list_remove),
(bfd_section_list_append, bfd_section_list_prepend),
(bfd_section_list_insert_after, bfd_section_list_insert_before),
(bfd_section_removed_from_list): Delete macros.
(bfd_section_name, bfd_section_size, bfd_section_vma),
(bfd_section_lma, bfd_section_alignment, bfd_section_flags),
(bfd_section_userdata, bfd_is_com_section, bfd_is_und_section),
(bfd_is_abs_section, bfd_is_ind_section, bfd_is_const_section),
(discarded_section): New inline functions.
* bfd-in2.h: Regenerate.
2019-09-20 Alan Modra <amodra@gmail.com>
* bfd-in.h (bfd_asymbol_section, bfd_asymbol_value, bfd_asymbol_name),

View File

@ -285,31 +285,6 @@ typedef struct bfd_section *sec_ptr;
((((bfd_vma) (this) + (boundary) - 1) >= (bfd_vma) (this)) \
? (((bfd_vma) (this) + ((boundary) - 1)) & ~ (bfd_vma) ((boundary)-1)) \
: ~ (bfd_vma) 0)
#define bfd_section_name(sec) ((sec)->name)
#define bfd_section_size(sec) ((sec)->size)
#define bfd_section_vma(sec) ((sec)->vma)
#define bfd_section_lma(sec) ((sec)->lma)
#define bfd_section_alignment(sec) ((sec)->alignment_power)
#define bfd_section_flags(sec) ((sec)->flags)
#define bfd_section_userdata(sec) ((sec)->userdata)
#define bfd_is_com_section(sec) (((sec)->flags & SEC_IS_COMMON) != 0)
#define bfd_get_section_limit_octets(bfd, sec) \
((bfd)->direction != write_direction && (sec)->rawsize != 0 \
? (sec)->rawsize : (sec)->size)
/* Find the address one past the end of SEC. */
#define bfd_get_section_limit(bfd, sec) \
(bfd_get_section_limit_octets(bfd, sec) / bfd_octets_per_byte (bfd))
/* Return TRUE if input section SEC has been discarded. */
#define discarded_section(sec) \
(!bfd_is_abs_section (sec) \
&& bfd_is_abs_section ((sec)->output_section) \
&& (sec)->sec_info_type != SEC_INFO_TYPE_MERGE \
&& (sec)->sec_info_type != SEC_INFO_TYPE_JUST_SYMS)
typedef enum bfd_print_symbol
{

View File

@ -292,31 +292,6 @@ typedef struct bfd_section *sec_ptr;
((((bfd_vma) (this) + (boundary) - 1) >= (bfd_vma) (this)) \
? (((bfd_vma) (this) + ((boundary) - 1)) & ~ (bfd_vma) ((boundary)-1)) \
: ~ (bfd_vma) 0)
#define bfd_section_name(sec) ((sec)->name)
#define bfd_section_size(sec) ((sec)->size)
#define bfd_section_vma(sec) ((sec)->vma)
#define bfd_section_lma(sec) ((sec)->lma)
#define bfd_section_alignment(sec) ((sec)->alignment_power)
#define bfd_section_flags(sec) ((sec)->flags)
#define bfd_section_userdata(sec) ((sec)->userdata)
#define bfd_is_com_section(sec) (((sec)->flags & SEC_IS_COMMON) != 0)
#define bfd_get_section_limit_octets(bfd, sec) \
((bfd)->direction != write_direction && (sec)->rawsize != 0 \
? (sec)->rawsize : (sec)->size)
/* Find the address one past the end of SEC. */
#define bfd_get_section_limit(bfd, sec) \
(bfd_get_section_limit_octets(bfd, sec) / bfd_octets_per_byte (bfd))
/* Return TRUE if input section SEC has been discarded. */
#define discarded_section(sec) \
(!bfd_is_abs_section (sec) \
&& bfd_is_abs_section ((sec)->output_section) \
&& (sec)->sec_info_type != SEC_INFO_TYPE_MERGE \
&& (sec)->sec_info_type != SEC_INFO_TYPE_JUST_SYMS)
typedef enum bfd_print_symbol
{
@ -1686,6 +1661,53 @@ struct relax_table {
int size;
};
static inline const char *
bfd_section_name (const asection *sec)
{
return sec->name;
}
static inline bfd_size_type
bfd_section_size (const asection *sec)
{
return sec->size;
}
static inline bfd_vma
bfd_section_vma (const asection *sec)
{
return sec->vma;
}
static inline bfd_vma
bfd_section_lma (const asection *sec)
{
return sec->lma;
}
static inline unsigned int
bfd_section_alignment (const asection *sec)
{
return sec->alignment_power;
}
static inline flagword
bfd_section_flags (const asection *sec)
{
return sec->flags;
}
static inline void *
bfd_section_userdata (const asection *sec)
{
return sec->userdata;
}
static inline bfd_boolean
bfd_is_com_section (const asection *sec)
{
return (sec->flags & SEC_IS_COMMON) != 0;
}
/* Note: the following are provided as inline functions rather than macros
because not all callers use the return value. A macro implementation
would use a comma expression, eg: "((ptr)->foo = val, TRUE)" and some
@ -1738,105 +1760,39 @@ extern asection _bfd_std_section[4];
/* Pointer to the indirect section. */
#define bfd_ind_section_ptr (&_bfd_std_section[3])
#define bfd_is_und_section(sec) ((sec) == bfd_und_section_ptr)
#define bfd_is_abs_section(sec) ((sec) == bfd_abs_section_ptr)
#define bfd_is_ind_section(sec) ((sec) == bfd_ind_section_ptr)
static inline bfd_boolean
bfd_is_und_section (const asection *sec)
{
return sec == bfd_und_section_ptr;
}
#define bfd_is_const_section(SEC) \
( ((SEC) == bfd_abs_section_ptr) \
|| ((SEC) == bfd_und_section_ptr) \
|| ((SEC) == bfd_com_section_ptr) \
|| ((SEC) == bfd_ind_section_ptr))
static inline bfd_boolean
bfd_is_abs_section (const asection *sec)
{
return sec == bfd_abs_section_ptr;
}
/* Macros to handle insertion and deletion of a bfd's sections. These
only handle the list pointers, ie. do not adjust section_count,
target_index etc. */
#define bfd_section_list_remove(ABFD, S) \
do \
{ \
asection *_s = S; \
asection *_next = _s->next; \
asection *_prev = _s->prev; \
if (_prev) \
_prev->next = _next; \
else \
(ABFD)->sections = _next; \
if (_next) \
_next->prev = _prev; \
else \
(ABFD)->section_last = _prev; \
} \
while (0)
#define bfd_section_list_append(ABFD, S) \
do \
{ \
asection *_s = S; \
bfd *_abfd = ABFD; \
_s->next = NULL; \
if (_abfd->section_last) \
{ \
_s->prev = _abfd->section_last; \
_abfd->section_last->next = _s; \
} \
else \
{ \
_s->prev = NULL; \
_abfd->sections = _s; \
} \
_abfd->section_last = _s; \
} \
while (0)
#define bfd_section_list_prepend(ABFD, S) \
do \
{ \
asection *_s = S; \
bfd *_abfd = ABFD; \
_s->prev = NULL; \
if (_abfd->sections) \
{ \
_s->next = _abfd->sections; \
_abfd->sections->prev = _s; \
} \
else \
{ \
_s->next = NULL; \
_abfd->section_last = _s; \
} \
_abfd->sections = _s; \
} \
while (0)
#define bfd_section_list_insert_after(ABFD, A, S) \
do \
{ \
asection *_a = A; \
asection *_s = S; \
asection *_next = _a->next; \
_s->next = _next; \
_s->prev = _a; \
_a->next = _s; \
if (_next) \
_next->prev = _s; \
else \
(ABFD)->section_last = _s; \
} \
while (0)
#define bfd_section_list_insert_before(ABFD, B, S) \
do \
{ \
asection *_b = B; \
asection *_s = S; \
asection *_prev = _b->prev; \
_s->prev = _prev; \
_s->next = _b; \
_b->prev = _s; \
if (_prev) \
_prev->next = _s; \
else \
(ABFD)->sections = _s; \
} \
while (0)
#define bfd_section_removed_from_list(ABFD, S) \
((S)->next == NULL ? (ABFD)->section_last != (S) : (S)->next->prev != (S))
static inline bfd_boolean
bfd_is_ind_section (const asection *sec)
{
return sec == bfd_ind_section_ptr;
}
static inline bfd_boolean
bfd_is_const_section (const asection *sec)
{
return sec >= bfd_abs_section_ptr && sec <= bfd_ind_section_ptr;
}
/* Return TRUE if input section SEC has been discarded. */
static inline bfd_boolean
discarded_section (const asection *sec)
{
return (!bfd_is_abs_section (sec)
&& bfd_is_abs_section (sec->output_section)
&& sec->sec_info_type != SEC_INFO_TYPE_MERGE
&& sec->sec_info_type != SEC_INFO_TYPE_JUST_SYMS);
}
#define BFD_FAKE_SECTION(SEC, SYM, NAME, IDX, FLAGS) \
/* name, id, index, next, prev, flags, user_set_vma, */ \
@ -7398,6 +7354,105 @@ bfd_set_asymbol_name (asymbol *sy, const char *name)
sy->name = name;
}
static inline bfd_size_type
bfd_get_section_limit_octets (const bfd *abfd, const asection *sec)
{
if (abfd->direction != write_direction && sec->rawsize != 0)
return sec->rawsize;
return sec->size;
}
/* Find the address one past the end of SEC. */
static inline bfd_size_type
bfd_get_section_limit (const bfd *abfd, const asection *sec)
{
return bfd_get_section_limit_octets (abfd, sec) / bfd_octets_per_byte (abfd);
}
/* Functions to handle insertion and deletion of a bfd's sections. These
only handle the list pointers, ie. do not adjust section_count,
target_index etc. */
static inline void
bfd_section_list_remove (bfd *abfd, asection *s)
{
asection *next = s->next;
asection *prev = s->prev;
if (prev)
prev->next = next;
else
abfd->sections = next;
if (next)
next->prev = prev;
else
abfd->section_last = prev;
}
static inline void
bfd_section_list_append (bfd *abfd, asection *s)
{
s->next = 0;
if (abfd->section_last)
{
s->prev = abfd->section_last;
abfd->section_last->next = s;
}
else
{
s->prev = 0;
abfd->sections = s;
}
abfd->section_last = s;
}
static inline void
bfd_section_list_prepend (bfd *abfd, asection *s)
{
s->prev = 0;
if (abfd->sections)
{
s->next = abfd->sections;
abfd->sections->prev = s;
}
else
{
s->next = 0;
abfd->section_last = s;
}
abfd->sections = s;
}
static inline void
bfd_section_list_insert_after (bfd *abfd, asection *a, asection *s)
{
asection *next = a->next;
s->next = next;
s->prev = a;
a->next = s;
if (next)
next->prev = s;
else
abfd->section_last = s;
}
static inline void
bfd_section_list_insert_before (bfd *abfd, asection *b, asection *s)
{
asection *prev = b->prev;
s->prev = prev;
s->next = b;
b->prev = s;
if (prev)
prev->next = s;
else
abfd->sections = s;
}
static inline bfd_boolean
bfd_section_removed_from_list (const bfd *abfd, const asection *s)
{
return s->next ? s->next->prev != s : abfd->section_last != s;
}
typedef enum bfd_error
{

View File

@ -477,6 +477,105 @@ CODE_FRAGMENT
. sy->name = name;
.}
.
.static inline bfd_size_type
.bfd_get_section_limit_octets (const bfd *abfd, const asection *sec)
.{
. if (abfd->direction != write_direction && sec->rawsize != 0)
. return sec->rawsize;
. return sec->size;
.}
.
.{* Find the address one past the end of SEC. *}
.static inline bfd_size_type
.bfd_get_section_limit (const bfd *abfd, const asection *sec)
.{
. return bfd_get_section_limit_octets (abfd, sec) / bfd_octets_per_byte (abfd);
.}
.
.{* Functions to handle insertion and deletion of a bfd's sections. These
. only handle the list pointers, ie. do not adjust section_count,
. target_index etc. *}
.static inline void
.bfd_section_list_remove (bfd *abfd, asection *s)
.{
. asection *next = s->next;
. asection *prev = s->prev;
. if (prev)
. prev->next = next;
. else
. abfd->sections = next;
. if (next)
. next->prev = prev;
. else
. abfd->section_last = prev;
.}
.
.static inline void
.bfd_section_list_append (bfd *abfd, asection *s)
.{
. s->next = 0;
. if (abfd->section_last)
. {
. s->prev = abfd->section_last;
. abfd->section_last->next = s;
. }
. else
. {
. s->prev = 0;
. abfd->sections = s;
. }
. abfd->section_last = s;
.}
.
.static inline void
.bfd_section_list_prepend (bfd *abfd, asection *s)
.{
. s->prev = 0;
. if (abfd->sections)
. {
. s->next = abfd->sections;
. abfd->sections->prev = s;
. }
. else
. {
. s->next = 0;
. abfd->section_last = s;
. }
. abfd->sections = s;
.}
.
.static inline void
.bfd_section_list_insert_after (bfd *abfd, asection *a, asection *s)
.{
. asection *next = a->next;
. s->next = next;
. s->prev = a;
. a->next = s;
. if (next)
. next->prev = s;
. else
. abfd->section_last = s;
.}
.
.static inline void
.bfd_section_list_insert_before (bfd *abfd, asection *b, asection *s)
.{
. asection *prev = b->prev;
. s->prev = prev;
. s->next = b;
. b->prev = s;
. if (prev)
. prev->next = s;
. else
. abfd->sections = s;
.}
.
.static inline bfd_boolean
.bfd_section_removed_from_list (const bfd *abfd, const asection *s)
.{
. return s->next ? s->next->prev != s : abfd->section_last != s;
.}
.
*/
#include "sysdep.h"

View File

@ -549,6 +549,53 @@ CODE_FRAGMENT
. int size;
.};
.
.static inline const char *
.bfd_section_name (const asection *sec)
.{
. return sec->name;
.}
.
.static inline bfd_size_type
.bfd_section_size (const asection *sec)
.{
. return sec->size;
.}
.
.static inline bfd_vma
.bfd_section_vma (const asection *sec)
.{
. return sec->vma;
.}
.
.static inline bfd_vma
.bfd_section_lma (const asection *sec)
.{
. return sec->lma;
.}
.
.static inline unsigned int
.bfd_section_alignment (const asection *sec)
.{
. return sec->alignment_power;
.}
.
.static inline flagword
.bfd_section_flags (const asection *sec)
.{
. return sec->flags;
.}
.
.static inline void *
.bfd_section_userdata (const asection *sec)
.{
. return sec->userdata;
.}
.static inline bfd_boolean
.bfd_is_com_section (const asection *sec)
.{
. return (sec->flags & SEC_IS_COMMON) != 0;
.}
.
.{* Note: the following are provided as inline functions rather than macros
. because not all callers use the return value. A macro implementation
. would use a comma expression, eg: "((ptr)->foo = val, TRUE)" and some
@ -601,105 +648,39 @@ CODE_FRAGMENT
.{* Pointer to the indirect section. *}
.#define bfd_ind_section_ptr (&_bfd_std_section[3])
.
.#define bfd_is_und_section(sec) ((sec) == bfd_und_section_ptr)
.#define bfd_is_abs_section(sec) ((sec) == bfd_abs_section_ptr)
.#define bfd_is_ind_section(sec) ((sec) == bfd_ind_section_ptr)
.static inline bfd_boolean
.bfd_is_und_section (const asection *sec)
.{
. return sec == bfd_und_section_ptr;
.}
.
.#define bfd_is_const_section(SEC) \
. ( ((SEC) == bfd_abs_section_ptr) \
. || ((SEC) == bfd_und_section_ptr) \
. || ((SEC) == bfd_com_section_ptr) \
. || ((SEC) == bfd_ind_section_ptr))
.static inline bfd_boolean
.bfd_is_abs_section (const asection *sec)
.{
. return sec == bfd_abs_section_ptr;
.}
.
.{* Macros to handle insertion and deletion of a bfd's sections. These
. only handle the list pointers, ie. do not adjust section_count,
. target_index etc. *}
.#define bfd_section_list_remove(ABFD, S) \
. do \
. { \
. asection *_s = S; \
. asection *_next = _s->next; \
. asection *_prev = _s->prev; \
. if (_prev) \
. _prev->next = _next; \
. else \
. (ABFD)->sections = _next; \
. if (_next) \
. _next->prev = _prev; \
. else \
. (ABFD)->section_last = _prev; \
. } \
. while (0)
.#define bfd_section_list_append(ABFD, S) \
. do \
. { \
. asection *_s = S; \
. bfd *_abfd = ABFD; \
. _s->next = NULL; \
. if (_abfd->section_last) \
. { \
. _s->prev = _abfd->section_last; \
. _abfd->section_last->next = _s; \
. } \
. else \
. { \
. _s->prev = NULL; \
. _abfd->sections = _s; \
. } \
. _abfd->section_last = _s; \
. } \
. while (0)
.#define bfd_section_list_prepend(ABFD, S) \
. do \
. { \
. asection *_s = S; \
. bfd *_abfd = ABFD; \
. _s->prev = NULL; \
. if (_abfd->sections) \
. { \
. _s->next = _abfd->sections; \
. _abfd->sections->prev = _s; \
. } \
. else \
. { \
. _s->next = NULL; \
. _abfd->section_last = _s; \
. } \
. _abfd->sections = _s; \
. } \
. while (0)
.#define bfd_section_list_insert_after(ABFD, A, S) \
. do \
. { \
. asection *_a = A; \
. asection *_s = S; \
. asection *_next = _a->next; \
. _s->next = _next; \
. _s->prev = _a; \
. _a->next = _s; \
. if (_next) \
. _next->prev = _s; \
. else \
. (ABFD)->section_last = _s; \
. } \
. while (0)
.#define bfd_section_list_insert_before(ABFD, B, S) \
. do \
. { \
. asection *_b = B; \
. asection *_s = S; \
. asection *_prev = _b->prev; \
. _s->prev = _prev; \
. _s->next = _b; \
. _b->prev = _s; \
. if (_prev) \
. _prev->next = _s; \
. else \
. (ABFD)->sections = _s; \
. } \
. while (0)
.#define bfd_section_removed_from_list(ABFD, S) \
. ((S)->next == NULL ? (ABFD)->section_last != (S) : (S)->next->prev != (S))
.static inline bfd_boolean
.bfd_is_ind_section (const asection *sec)
.{
. return sec == bfd_ind_section_ptr;
.}
.
.static inline bfd_boolean
.bfd_is_const_section (const asection *sec)
.{
. return sec >= bfd_abs_section_ptr && sec <= bfd_ind_section_ptr;
.}
.
.{* Return TRUE if input section SEC has been discarded. *}
.static inline bfd_boolean
.discarded_section (const asection *sec)
.{
. return (!bfd_is_abs_section (sec)
. && bfd_is_abs_section (sec->output_section)
. && sec->sec_info_type != SEC_INFO_TYPE_MERGE
. && sec->sec_info_type != SEC_INFO_TYPE_JUST_SYMS);
.}
.
.#define BFD_FAKE_SECTION(SEC, SYM, NAME, IDX, FLAGS) \
. {* name, id, index, next, prev, flags, user_set_vma, *} \

View File

@ -1,3 +1,7 @@
2019-09-20 Alan Modra <amodra@gmail.com>
* config/tc-tic6x.c (tc_gen_reloc): Correct common symbol check.
2018-09-20 Jan Beulich <jbeulich@suse.com>
PR gas/25012

View File

@ -4526,7 +4526,7 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixp)
if (reloc->howto->pcrel_offset && reloc->howto->partial_inplace)
{
reloc->addend += reloc->address;
if (!bfd_is_com_section (symbol))
if (!bfd_is_com_section (bfd_asymbol_section (symbol)))
reloc->addend -= symbol->value;
}
if (r_type == BFD_RELOC_C6000_PCR_H16

View File

@ -1,3 +1,14 @@
2019-09-20 Alan Modra <amodra@gmail.com>
* emultempl/xtensaelf.em (xtensa_get_section_deps): Comment.
Use bfd_section_userdata.
(xtensa_set_section_deps): Use bfd_set_section_userdata.
* ldlang.c (lang_output_section_get): Use bfd_section_userdata.
(sort_def_symbol): Likewise, and bfd_set_section_userdata.
(init_os): Use bfd_set_section_userdata.
(print_all_symbols): Use bfd_section_userdata.
* ldlang.h (get_userdata): Delete.
2019-09-20 Alan Modra <amodra@gmail.com>
* ldelf.c (ldelf_after_open, ldelf_place_orphan

View File

@ -596,8 +596,12 @@ xtensa_get_section_deps (const reloc_deps_graph *deps ATTRIBUTE_UNUSED,
/* We have a separate function for this so that
we could in the future keep a completely independent
structure that maps a section to its dependence edges.
For now, we place these in the sec->userdata field. */
reloc_deps_section *sec_deps = sec->userdata;
For now, we place these in the sec->userdata field.
This doesn't clash with ldlang.c use of userdata for output
sections, and during map output for input sections, since the
xtensa use is only for input sections and only extant in
before_allocation. */
reloc_deps_section *sec_deps = bfd_section_userdata (sec);
return sec_deps;
}
@ -606,7 +610,7 @@ xtensa_set_section_deps (const reloc_deps_graph *deps ATTRIBUTE_UNUSED,
asection *sec,
reloc_deps_section *deps_section)
{
sec->userdata = deps_section;
bfd_set_section_userdata (sec, deps_section);
}

View File

@ -1414,7 +1414,7 @@ lang_memory_default (asection *section)
lang_output_section_statement_type *
lang_output_section_get (const asection *output_section)
{
return get_userdata (output_section);
return bfd_section_userdata (output_section);
}
/* Find or create an output_section_statement with the given NAME.
@ -2316,12 +2316,11 @@ sort_def_symbol (struct bfd_link_hash_entry *hash_entry,
input_section_userdata_type *ud;
struct map_symbol_def *def;
ud = ((input_section_userdata_type *)
get_userdata (hash_entry->u.def.section));
ud = bfd_section_userdata (hash_entry->u.def.section);
if (!ud)
{
ud = stat_alloc (sizeof (*ud));
get_userdata (hash_entry->u.def.section) = ud;
bfd_set_section_userdata (hash_entry->u.def.section, ud);
ud->map_symbol_def_tail = &ud->map_symbol_def_head;
ud->map_symbol_def_count = 0;
}
@ -2361,7 +2360,7 @@ init_os (lang_output_section_statement_type *s, flagword flags)
/* Set the userdata of the output section to the output section
statement to avoid lookup. */
get_userdata (s->bfd_section) = s;
bfd_set_section_userdata (s->bfd_section, s);
/* If there is a base address, make sure that any sections it might
mention are initialized. */
@ -4390,8 +4389,7 @@ hash_entry_addr_cmp (const void *a, const void *b)
static void
print_all_symbols (asection *sec)
{
input_section_userdata_type *ud
= (input_section_userdata_type *) get_userdata (sec);
input_section_userdata_type *ud = bfd_section_userdata (sec);
struct map_symbol_def *def;
struct bfd_link_hash_entry **entries;
unsigned int i;

View File

@ -329,8 +329,6 @@ typedef struct input_section_userdata_struct
unsigned long map_symbol_def_count;
} input_section_userdata_type;
#define get_userdata(x) ((x)->userdata)
static inline bfd_boolean
bfd_input_just_syms (const bfd *abfd)
{