From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18806 invoked by alias); 10 May 2012 01:54:52 -0000 Received: (qmail 18789 invoked by uid 22791); 10 May 2012 01:54:48 -0000 X-SWARE-Spam-Status: No, hits=-4.8 required=5.0 tests=AWL,BAYES_50,KHOP_RCVD_UNTRUST,RCVD_IN_DNSWL_HI,SPF_HELO_PASS,TW_FD,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 10 May 2012 01:54:34 +0000 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q4A1sXrv029600 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 9 May 2012 21:54:33 -0400 Received: from psique ([10.3.112.12]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id q4A1sQUc002936; Wed, 9 May 2012 21:54:29 -0400 From: Sergio Durigan Junior To: binutils@sourceware.org Cc: gdb-patches@sourceware.org, Pedro Alves Subject: Re: [RFC/PATCH] Fix `bfd_{get,set}_*' macros References: <20120503075305.GJ635@bubble.grove.modra.org> X-URL: http://www.redhat.com Date: Thu, 10 May 2012 01:54:00 -0000 In-Reply-To: (Sergio Durigan Junior's message of "Fri, 04 May 2012 18:45:57 -0300") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-05/txt/msg00326.txt.bz2 Ping. On Friday, May 04 2012, I wrote: > On Thursday, May 03 2012, I wrote: > >> On Thursday, May 03 2012, Alan Modra wrote: >> >>> On Thu, May 03, 2012 at 01:19:21AM -0300, Sergio Durigan Junior wrote: >>>> * bfd-in2.h (bfd_get_section_name, bfd_get_section_vma, >>>> bfd_get_section_lma, bfd_get_section_alignment, bfd_section_name, >>>> bfd_section_size, bfd_get_section_flags, >>>> bfd_get_section_userdata): Rewrite macros in order to use the >>>> `bfd' argument. >>>> * elf-vxworks.c (elf_vxworks_finish_dynamic_entry): Pass proper `bfd' >>>> as the first argument for `bfd_get_section_alignment'. >>>> * elf32-arm.c (create_ifunc_sections): Likewise, for >>>> `bfd_set_section_alignment'. >>> >>> The above is OK. You guessed wrongly for all the bfd args below, >>> except in elf64-ppc.c. I suggest expanding the macros instead. I've >>> noted the correct bfds below but IMO these macros serve no useful >>> purpose. >> >> Thanks for the review. I've chosen to update the patch as proposed >> below, instead of expanding the macros as you suggested. I'm involved >> in other tasks and it would take much more time, I'm afraid. >> >> WDYT of the patch below? > > I did something that I should have done before: I built binutils with my > patch :-). As it turns out, it's better not to fix `bfd_section_name' > and `bfd_section_size', so here's the new patch which builds correctly > on both binutils and GDB. OK to apply? > > 2012-05-04 Sergio Durigan Junior > > * bfd-in2.h (bfd_get_section_name, bfd_get_section_vma, > bfd_get_section_lma, bfd_get_section_alignment, > bfd_get_section_flags, > bfd_get_section_userdata): Rewrite macros in order to use the > `bfd' argument. > * elf-vxworks.c (elf_vxworks_finish_dynamic_entry): Pass proper `bfd' > as the first argument for `bfd_get_section_alignment'. > * elf32-arm.c (create_ifunc_sections): Likewise, for > `bfd_set_section_alignment'. > * elf32-m32r.c (m32r_elf_relocate_section): Likewise, for > `bfd_get_section_name'. > * elf32-microblaze.c (microblaze_elf_relocate_section): Likewise. > * elf32-ppc.c (ppc_elf_size_dynamic_sections): Likewise. > (ppc_elf_relocate_section): Likewise. > * elf64-mmix.c (mmix_final_link_relocate): Likewise, for > `bfd_get_section_vma'. > * elf64-ppc.c (create_linkage_sections): Likewise, for > `bfd_set_section_alignment'. > > > diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h > index 6b94f72..c7cee6d 100644 > --- a/bfd/bfd-in2.h > +++ b/bfd/bfd-in2.h > @@ -280,18 +280,19 @@ alent; > > typedef struct bfd_section *sec_ptr; > > -#define bfd_get_section_name(bfd, ptr) ((ptr)->name + 0) > -#define bfd_get_section_vma(bfd, ptr) ((ptr)->vma + 0) > -#define bfd_get_section_lma(bfd, ptr) ((ptr)->lma + 0) > -#define bfd_get_section_alignment(bfd, ptr) ((ptr)->alignment_power + 0) > +#define bfd_get_section_name(bfd, ptr) ((void) bfd, (ptr)->name) > +#define bfd_get_section_vma(bfd, ptr) ((void) bfd, (ptr)->vma) > +#define bfd_get_section_lma(bfd, ptr) ((void) bfd, (ptr)->lma) > +#define bfd_get_section_alignment(bfd, ptr) ((void) bfd, \ > + (ptr)->alignment_power) > #define bfd_section_name(bfd, ptr) ((ptr)->name) > #define bfd_section_size(bfd, ptr) ((ptr)->size) > #define bfd_get_section_size(ptr) ((ptr)->size) > #define bfd_section_vma(bfd, ptr) ((ptr)->vma) > #define bfd_section_lma(bfd, ptr) ((ptr)->lma) > #define bfd_section_alignment(bfd, ptr) ((ptr)->alignment_power) > -#define bfd_get_section_flags(bfd, ptr) ((ptr)->flags + 0) > -#define bfd_get_section_userdata(bfd, ptr) ((ptr)->userdata) > +#define bfd_get_section_flags(bfd, ptr) ((void) bfd, (ptr)->flags) > +#define bfd_get_section_userdata(bfd, ptr) ((void) bfd, (ptr)->userdata) > > #define bfd_is_com_section(ptr) (((ptr)->flags & SEC_IS_COMMON) != 0) > > diff --git a/bfd/elf-vxworks.c b/bfd/elf-vxworks.c > index 06edf8d..ebd8f2b 100644 > --- a/bfd/elf-vxworks.c > +++ b/bfd/elf-vxworks.c > @@ -280,7 +280,8 @@ elf_vxworks_finish_dynamic_entry (bfd *output_bfd, Elf_Internal_Dyn *dyn) > case DT_VX_WRS_TLS_DATA_ALIGN: > sec = bfd_get_section_by_name (output_bfd, ".tls_data"); > dyn->d_un.d_val > - = (bfd_size_type)1 << bfd_get_section_alignment (abfd, sec); > + = (bfd_size_type)1 << bfd_get_section_alignment (output_bfd, > + sec); > break; > > case DT_VX_WRS_TLS_VARS_START: > diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c > index f5bad39..ae670f1 100644 > --- a/bfd/elf32-arm.c > +++ b/bfd/elf32-arm.c > @@ -3258,7 +3258,7 @@ create_ifunc_sections (struct bfd_link_info *info) > s = bfd_make_section_with_flags (dynobj, ".iplt", > flags | SEC_READONLY | SEC_CODE); > if (s == NULL > - || !bfd_set_section_alignment (abfd, s, bed->plt_alignment)) > + || !bfd_set_section_alignment (dynobj, s, bed->plt_alignment)) > return FALSE; > htab->root.iplt = s; > } > @@ -3268,7 +3268,7 @@ create_ifunc_sections (struct bfd_link_info *info) > s = bfd_make_section_with_flags (dynobj, RELOC_SECTION (htab, ".iplt"), > flags | SEC_READONLY); > if (s == NULL > - || !bfd_set_section_alignment (abfd, s, bed->s->log_file_align)) > + || !bfd_set_section_alignment (dynobj, s, bed->s->log_file_align)) > return FALSE; > htab->root.irelplt = s; > } > diff --git a/bfd/elf32-m32r.c b/bfd/elf32-m32r.c > index 7ab7b60..4f06354 100644 > --- a/bfd/elf32-m32r.c > +++ b/bfd/elf32-m32r.c > @@ -3007,7 +3007,7 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, > const char *name; > > BFD_ASSERT (sec != NULL); > - name = bfd_get_section_name (abfd, sec); > + name = bfd_get_section_name (sec->owner, sec); > > if ( strcmp (name, ".sdata") == 0 > || strcmp (name, ".sbss") == 0 > diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c > index a58f7b3..5a20f0d 100644 > --- a/bfd/elf32-microblaze.c > +++ b/bfd/elf32-microblaze.c > @@ -839,7 +839,7 @@ microblaze_elf_relocate_section (bfd *output_bfd, > /* Only relocate if the symbol is defined. */ > if (sec) > { > - name = bfd_get_section_name (abfd, sec); > + name = bfd_get_section_name (sec->owner, sec); > > if (strcmp (name, ".sdata2") == 0 > || strcmp (name, ".sbss2") == 0) > @@ -868,7 +868,7 @@ microblaze_elf_relocate_section (bfd *output_bfd, > bfd_get_filename (input_bfd), > sym_name, > microblaze_elf_howto_table[(int) r_type]->name, > - bfd_get_section_name (abfd, sec)); > + bfd_get_section_name (sec->owner, sec)); > /*bfd_set_error (bfd_error_bad_value); ??? why? */ > ret = FALSE; > continue; > @@ -884,7 +884,7 @@ microblaze_elf_relocate_section (bfd *output_bfd, > /* Only relocate if the symbol is defined. */ > if (sec) > { > - name = bfd_get_section_name (abfd, sec); > + name = bfd_get_section_name (sec->owner, sec); > > if (strcmp (name, ".sdata") == 0 > || strcmp (name, ".sbss") == 0) > @@ -913,7 +913,7 @@ microblaze_elf_relocate_section (bfd *output_bfd, > bfd_get_filename (input_bfd), > sym_name, > microblaze_elf_howto_table[(int) r_type]->name, > - bfd_get_section_name (abfd, sec)); > + bfd_get_section_name (sec->owner, sec)); > /*bfd_set_error (bfd_error_bad_value); ??? why? */ > ret = FALSE; > continue; > diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c > index ca6df26..f5df17e 100644 > --- a/bfd/elf32-ppc.c > +++ b/bfd/elf32-ppc.c > @@ -5867,7 +5867,8 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, > { > /* Strip these too. */ > } > - else if (CONST_STRNEQ (bfd_get_section_name (dynobj, s), ".rela")) > + else if (CONST_STRNEQ (bfd_get_section_name (htab->elf.dynobj, s), > + ".rela")) > { > if (s->size != 0) > { > @@ -7886,8 +7887,10 @@ ppc_elf_relocate_section (bfd *output_bfd, > unresolved_reloc = TRUE; > break; > } > - BFD_ASSERT (strcmp (bfd_get_section_name (abfd, sec), ".got") == 0 > - || strcmp (bfd_get_section_name (abfd, sec), ".cgot") == 0); > + BFD_ASSERT (strcmp (bfd_get_section_name (sec->owner, sec), > + ".got") == 0 > + || strcmp (bfd_get_section_name (sec->owner, sec), > + ".cgot") == 0); > > addend -= sec->output_section->vma + sec->output_offset + 0x8000; > break; > @@ -7937,7 +7940,7 @@ ppc_elf_relocate_section (bfd *output_bfd, > } > addend -= SYM_VAL (sda); > > - name = bfd_get_section_name (abfd, sec->output_section); > + name = bfd_get_section_name (output_bfd, sec->output_section); > if (! ((CONST_STRNEQ (name, ".sdata") > && (name[6] == 0 || name[6] == '.')) > || (CONST_STRNEQ (name, ".sbss") > @@ -7969,7 +7972,7 @@ ppc_elf_relocate_section (bfd *output_bfd, > } > addend -= SYM_VAL (sda); > > - name = bfd_get_section_name (abfd, sec->output_section); > + name = bfd_get_section_name (output_bfd, sec->output_section); > if (! (CONST_STRNEQ (name, ".sdata2") > || CONST_STRNEQ (name, ".sbss2"))) > { > @@ -7998,7 +8001,7 @@ ppc_elf_relocate_section (bfd *output_bfd, > break; > } > > - name = bfd_get_section_name (abfd, sec->output_section); > + name = bfd_get_section_name (output_bfd, sec->output_section); > if (((CONST_STRNEQ (name, ".sdata") > && (name[6] == 0 || name[6] == '.')) > || (CONST_STRNEQ (name, ".sbss") > diff --git a/bfd/elf64-mmix.c b/bfd/elf64-mmix.c > index fd5921a..ae4b0fa 100644 > --- a/bfd/elf64-mmix.c > +++ b/bfd/elf64-mmix.c > @@ -1771,7 +1771,9 @@ mmix_final_link_relocate (reloc_howto_type *howto, asection *input_section, > first_global = 255; > else > { > - first_global = bfd_get_section_vma (abfd, regsec) / 8; > + first_global > + = bfd_get_section_vma (input_section->output_section->owner, > + regsec) / 8; > if (strcmp (bfd_get_section_name (symsec->owner, symsec), > MMIX_REG_CONTENTS_SECTION_NAME) == 0) > { > diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c > index 0d6dd99..7c7beb6 100644 > --- a/bfd/elf64-ppc.c > +++ b/bfd/elf64-ppc.c > @@ -4245,7 +4245,7 @@ create_linkage_sections (bfd *dynobj, struct bfd_link_info *info) > ".eh_frame", > flags); > if (htab->glink_eh_frame == NULL > - || !bfd_set_section_alignment (abfd, htab->glink_eh_frame, 2)) > + || !bfd_set_section_alignment (dynobj, htab->glink_eh_frame, 2)) > return FALSE; > } > > > > -- > Sergio -- Sergio