From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20209 invoked by alias); 4 May 2012 21:46:27 -0000 Received: (qmail 20174 invoked by uid 22791); 4 May 2012 21:46:24 -0000 X-SWARE-Spam-Status: No, hits=-6.2 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,RCVD_IN_DNSWL_HI,RCVD_IN_HOSTKARMA_W,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; Fri, 04 May 2012 21:46:05 +0000 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q44Lk5ou023639 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 4 May 2012 17:46:05 -0400 Received: from psique (ovpn-112-58.phx2.redhat.com [10.3.112.58]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id q44LjwcA026438; Fri, 4 May 2012 17:46:01 -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: Fri, 04 May 2012 21:46:00 -0000 In-Reply-To: (Sergio Durigan Junior's message of "Thu, 03 May 2012 13:22:23 -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/msg00139.txt.bz2 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