diff options
author | Alexander Golubev <fatzer2@gmail.com> | 2025-10-03 10:48:01 +0300 |
---|---|---|
committer | Alexander Golubev <fatzer2@gmail.com> | 2025-10-03 11:14:47 +0300 |
commit | 8380fc26a471d64bcddc38a2bce9442f6386b805 (patch) | |
tree | 94b0a42a452ab57c7b9b9589e075236831f451d8 /src | |
parent | c57eae31615bc70072c7e99d712c2285817bd2e5 (diff) | |
download | libr-master.tar.gz libr-master.zip |
To rely on current linker's version to determine the libbfd version is
unreliable. In particular it's likely to yield wrong result in next
use-cases:
- cross-compilations
- build with non-GNU toolchain
- just build with another linker version
Unfortunately libbfd doesn't provide a reliable way to retrieve version
information, so we will have to check for features in specific versions
we are interested in.
Note: this essentially reverts most of the changes introduced by
c57eae31615bc70072c7e99d712c2285817bd2e5.
Signed-off-by: Alexander Golubev <fatzer2@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/config.h.cmake | 7 | ||||
-rw-r--r-- | src/libr-bfd.c | 22 |
2 files changed, 16 insertions, 13 deletions
diff --git a/src/config.h.cmake b/src/config.h.cmake index 8842734..e2673d2 100644 --- a/src/config.h.cmake +++ b/src/config.h.cmake @@ -8,5 +8,8 @@ language is requested. */ #define ENABLE_NLS 1 -/* Define Binutils linker version code */ -#cmakedefine LINKER_VERSION_C @LINKER_VERSION_C@ +/* Define to 1 if you have Binutils >= 2.34 */ +#cmakedefine HAVE_BFD_2_34 1 + +/* Define to 1 if you have Binutils >= 2.45 */ +#cmakedefine HAVE_BFD_2_45 1 diff --git a/src/libr-bfd.c b/src/libr-bfd.c index 7d72036..9d72cce 100644 --- a/src/libr-bfd.c +++ b/src/libr-bfd.c @@ -114,7 +114,7 @@ int keep_symbol(libr_section *sections, libr_section *chkscn) { /* if it is, and has size zero, then it was marked for deletion */ if( - #if (LINKER_VERSION_C >= 2034000) + #ifdef HAVE_BFD_2_34 bfd_section_size(chkscn) == 0 #else bfd_get_section_size(chkscn) == 0 @@ -144,7 +144,7 @@ void remove_sections(libr_section *sections, void *symtab_buffer, long *symtab_c if(symbol != NULL) { - #if (LINKER_VERSION_C >= 2034000) + #ifdef HAVE_BFD_2_34 chkscn = bfd_asymbol_section(symbol); #else chkscn = bfd_get_section(symbol); @@ -171,7 +171,7 @@ int setup_sections(bfd *ihandle, bfd *ohandle) for(iscn = ihandle->sections; iscn != NULL; iscn = iscn->next) { if( - #if (LINKER_VERSION_C >= 2034000) + #ifdef HAVE_BFD_2_34 bfd_section_size(iscn) == 0 #else bfd_get_section_size(iscn) == 0 @@ -199,7 +199,7 @@ int setup_sections(bfd *ihandle, bfd *ohandle) return false; } if( - #if (LINKER_VERSION_C >= 2034000) + #ifdef HAVE_BFD_2_34 !bfd_set_section_size(oscn, iscn->size) #else !bfd_set_section_size(ohandle, oscn, iscn->size) @@ -209,13 +209,13 @@ int setup_sections(bfd *ihandle, bfd *ohandle) printf("failed to set data size: %s\n", bfd_errmsg(bfd_get_error())); return false; } - #if (LINKER_VERSION_C >= 2034000) + #ifdef HAVE_BFD_2_34 vma = bfd_section_vma(iscn); #else vma = bfd_section_vma(ihandle, iscn); #endif if( - #if (LINKER_VERSION_C >= 2034000) + #ifdef HAVE_BFD_2_34 !bfd_set_section_vma(oscn, vma) #else !bfd_set_section_vma(ohandle, oscn, vma) @@ -227,7 +227,7 @@ int setup_sections(bfd *ihandle, bfd *ohandle) } oscn->lma = iscn->lma; if( - #if (LINKER_VERSION_C >= 2034000) + #ifdef HAVE_BFD_2_34 !bfd_set_section_alignment(oscn, bfd_section_alignment(iscn)) #else !bfd_set_section_alignment(ohandle, oscn, bfd_section_alignment(ihandle, iscn)) @@ -241,7 +241,7 @@ int setup_sections(bfd *ihandle, bfd *ohandle) iscn->output_section = oscn; iscn->output_offset = vma; if( - #if (LINKER_VERSION_C >= 2045000) + #ifdef HAVE_BFD_2_45 !bfd_copy_private_section_data(ihandle, iscn, ohandle, oscn, NULL) #else !bfd_copy_private_section_data(ihandle, iscn, ohandle, oscn) @@ -310,7 +310,7 @@ int build_output(libr_file *file_handle) /* Actually copy section data */ for(iscn = ihandle->sections; iscn != NULL; iscn = iscn->next) { - #if (LINKER_VERSION_C >= 2034000) + #ifdef HAVE_BFD_2_34 size = bfd_section_size(iscn); #else size = bfd_get_section_size(iscn); @@ -329,7 +329,7 @@ int build_output(libr_file *file_handle) } if( - #if (LINKER_VERSION_C >= 2034000) + #ifdef HAVE_BFD_2_34 bfd_section_flags(iscn) & SEC_HAS_CONTENTS #else bfd_get_section_flags(ihandle, iscn) & SEC_HAS_CONTENTS @@ -554,7 +554,7 @@ libr_intstatus add_section(libr_file *file_handle, char *resource_name, libr_sec if(scn == NULL) RETURN(LIBR_ERROR_NEWSECTION, "Failed to create new section"); if( - #if (LINKER_VERSION_C >= 2034000) + #ifdef HAVE_BFD_2_34 !bfd_set_section_flags(scn, SEC_HAS_CONTENTS | SEC_DATA | SEC_IN_MEMORY) #else !bfd_set_section_flags(file_handle->bfd_read, scn, SEC_HAS_CONTENTS | SEC_DATA | SEC_IN_MEMORY) |